blob: 4695dbea25580d63245c9135b62783a2c20128f8 [file] [log] [blame] [view]
# Build
The @PLUGIN@ plugin can be built in-tree in Gerrit's `/plugins` path.
The `plugins/external_plugin_deps.bzl` file will need to be updated to match
or contain `@PLUGIN@/external_plugin_deps.bzl`.
```
git clone --recursive https://gerrit.googlesource.com/gerrit
cd gerrit
git clone "https://gerrit.googlesource.com/plugins/@PLUGIN@" plugins/@PLUGIN@
ln -sf plugins/@PLUGIN@/external_plugin_deps.bzl plugins/.
bazelisk build plugins/@PLUGIN@
```
The output is created in
```
gerrit/bazel-bin/plugins/@PLUGIN@/@PLUGIN@.jar
```
The @PLUGIN@ plugin requires the global-refdb libModule to be available in
the site/lib directory. Instructions for building the global-refdb libModule
can be found [here](https://gerrit.googlesource.com/modules/global-refdb/).
## Eclipse project setup
This project can be imported into the Eclipse IDE:
- Add the plugin name to the `CUSTOM_PLUGINS_TEST_DEPS`
set in Gerrit core in `tools/bzl/plugins.bzl`,
- execute:
```
./tools/eclipse/project.py
```
## Run tests
The tests require a spanner service where the refdb will be created. The spanner
service may be a real spanner service in GCP or a locally running docker based
emulator.
### Running tests using a real spanner service
In this case we have to provide an GCP service account key and the instance name
under which the test refdb will be found or created. This is done by passing two
environment variables `GOOGLE_APPLICATION_CREDENTIALS` and `SPANNER_INSTANCE`.
If `SPANNER_DATABASE` environment variable is also specified, then a database
with that name will be used for testing. If a database with that name does not
exist it will be created. This database will not be dropped when the test run
finishes, leaving it ready for a next test run.
Using this option is recommended as database creation and especially schema
initialization is known to take a very long time.
If `SPANNER_DATABASE` environment variable is not specified then a new database
will be created for this test run and will be dropped when the test run
finishes.
```
bazelisk test \
--test_env='GOOGLE_APPLICATION_CREDENTIALS=/path/to/the/key.json' \
--test_env='SPANNER_INSTANCE=test-instance' \
[--test_env='SPANNER_DATABASE=test-global-refdb'] \
--test_tag_filters=@PLUGIN@ //...
```
Note that instead of using the `--test_tag_filters=@PLUGIN@ //...` we can also
pass a different test target `//plugins/@PLUGIN@/...`:
```
bazelisk test \
--test_env='GOOGLE_APPLICATION_CREDENTIALS=/path/to/the/key.json' \
--test_env='SPANNER_INSTANCE=test-instance' \
[--test_env='SPANNER_DATABASE=test-global-refdb'] \
//plugins/@PLUGIN@/...
```
### Running tests using a local docker based spanner emulator
This use case requires docker to be installed and running on the machine running
the tests. A container running spanner will be created automatically by the
tests.
The absence of the `GOOGLE_APPLICATION_CREDENTIALS` env variable means that the tests
will create local spanner emulator.
```
bazelisk test //plugins/@PLUGIN@/...
```
### MacOS specifics when using docker based spanner emulator
On MacOS you may need to access the docker daemon via TCP.
Run [socat](https://linux.die.net/man/1/socat) to expose the docker daemon socket via TCP
```
socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock
```
Execute the tests over TCP
```
bazelisk test --test_env='DOCKER_HOST=tcp://127.0.0.1:2375' //plugins/@PLUGIN@/...
```
### Debugging tests
```
bazelisk test --test_output=streamed //plugins/@PLUGIN@/...
```
If necessary increase log levels in `src/test/resources/log4j.properties`
to trace testcontainers and docker java API.
### Tracing traffic to docker daemon
If you face issue you can trace traffic to the docker daemon using
[socat](https://linux.die.net/man/1/socat) exposing the docker daemon via TCP.
Run socat to log diagnostics and show the traffic to the docker daemon
```
socat -dd -v TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock
```
Execute the tests over TCP
```
bazelisk test --test_env='DOCKER_HOST=tcp://127.0.0.1:2375' //plugins/@PLUGIN@/...
```
[Back to @PLUGIN@ documentation index][index]
[index]: index.html