Expose acceptance test framework as new plugin artifact

Split the current gerrit-acceptance-tests in two parts:

* framework + some needed deps, that is exposed as additional plugin
artifact
* rest of the gerrit-acceptance-test project

To implement the split and not to pull in too many dependencies, some
refactoring was needed. Particularly, gerrit-server:testutil depends
on gerrit-server:server, that depends on almost everything. Similar
problem was with gerrit-pgm:pgm, that is needed for AbstractDaemonTest
to work. Split the rules in gerrit-pgm to break transitive dependency
chain. We shouldn't ship artifacts twice, in plugin-api and in
acceptance-framework.

This change also partially reverts Ie9e63de622, where
//gerrit-acceptance-tests:lib with all its transitive dependencies was
included in plugin-api artifact.

Expose gerrit-acceptance-framework as new plugin artifact. This allows
us to support unit tests in plugins in three different build modes:

* Buck in tree build mode
* Buck standalone build mode
* Maven build

To install gerrit-acceptance-framework locally, the following command
is used:

  buck build api_install

To deploy gerrit-acceptance-framework to Maven Central, the following
command is used:

  buck build api_deploy

To support unit tests in tree build mode, the following Buck variable
is exposed: GERRIT_TESTS and can be used, e.g.:

  java_test(
    name = 'cookbook_tests',
    srcs = glob(['src/test/java/**/*IT.java']),
    labels = ['cookbook-plugin'],
    source_under_test = [':cookbook-plugin__plugin'],
    deps = GERRIT_PLUGIN_API + GERRIT_TESTS + [
      ':cookbook-plugin__plugin',
    ],
  )

To support unit tests in standalone build mode, acceptance-framework
maven jar is defined in lib/gerrit/BUCK file:

  maven_jar(
    name = 'acceptance-framework',
    id = 'com.google.gerrit:gerrit-acceptance-framework:' + VER,
    license = 'Apache2.0',
    attach_source = False,
    repository = REPO,
  )

bucklets/gerrit_plugin.bucklet is extended with the same variable
that points to the new maven_jar artifact, so that the same Buck
java_test() rule can be used in both modes.

Test plan:

1. run tests in gerrit tree
2. apply corresponding change to cookbook-plugin and run tests in
gerrit tree mode
3. apply corresponding change to bucklets, and run tests for
cookbook-plugin in standalone build mode

Change-Id: I4cadf6616de36ca24712f8b07d282b7a50911105
This commit is contained in:
David Ostrovsky
2015-09-24 21:52:17 +02:00
committed by Hugo Arès
parent aaaf9faea6
commit 947b5e53ac
36 changed files with 253 additions and 119 deletions

View File

@@ -0,0 +1,77 @@
SRCS = glob(['src/test/java/com/google/gerrit/acceptance/*.java'])
DEPS = [
'//gerrit-gpg:gpg',
'//gerrit-pgm:daemon',
'//gerrit-pgm:util-nodep',
'//gerrit-server:testutil',
'//lib/auto:auto-value',
'//lib/httpcomponents:fluent-hc',
'//lib/httpcomponents:httpclient',
'//lib/httpcomponents:httpcore',
'//lib/jgit:junit',
'//lib/log:impl_log4j',
'//lib/log:log4j',
]
PROVIDED = [
'//gerrit-common:annotations',
'//gerrit-common:server',
'//gerrit-extension-api:api',
'//gerrit-httpd:httpd',
'//gerrit-lucene:lucene',
'//gerrit-pgm:init',
'//gerrit-reviewdb:server',
'//gerrit-server:server',
'//lib:gson',
'//lib/jgit:jgit',
'//lib:jsch',
'//lib/mina:sshd',
'//lib:servlet-api-3_1',
]
java_binary(
name = 'api',
deps = [':lib'],
visibility = ['PUBLIC'],
)
java_library(
name = 'lib',
srcs = SRCS,
exported_deps = DEPS + [
'//lib:truth',
],
provided_deps = PROVIDED + [
'//lib:gwtorm',
'//lib/guice:guice',
'//lib/guice:guice-assistedinject',
'//lib/guice:guice-servlet',
],
visibility = ['PUBLIC'],
)
java_sources(
name = 'src',
srcs = SRCS,
visibility = ['PUBLIC'],
)
java_doc(
name = 'javadoc',
title = 'Gerrit Acceptance Test Framework Documentation',
pkgs = [' com.google.gerrit.acceptance'],
paths = ['src/test/java'],
srcs = SRCS,
deps = DEPS + PROVIDED + [
'//lib:guava',
'//lib/guice:guice-assistedinject',
'//lib/guice:guice_library',
'//lib/guice:guice-servlet',
'//lib/guice:javax-inject',
'//lib:gwtorm_client',
'//lib:junit__jar',
'//lib:truth__jar',
],
visibility = ['PUBLIC'],
)