Buck: Tweak unit test invocation and halve the run time

Since Ia3f689a9e6 we spawn each and every unit test in its own
JVM with a lot of overhead. This change spawns only one single
JVM per acceptance test group. With recent refactoring, we don't
need to isolate unit test environment, as they can run in parallel
without collision between tests.

* old: TESTING...FINISHED 271,2s (1400 PASS/22 SKIP/0 FAIL)
* new: TESTING...FINISHED 161,0s (1400 PASS/22 SKIP/0 FAIL)

Change-Id: I7140f29d194b26fe0c5104733f5681c139e77c73
This commit is contained in:
David Ostrovsky
2015-10-16 06:29:17 +02:00
parent 7bd0fe4d28
commit bb7061592e
19 changed files with 60 additions and 46 deletions

View File

@@ -318,11 +318,10 @@ The following groups of tests are currently supported:
* ssh
* slow
To run a specific test, e.g. the acceptance test
`com.google.gerrit.acceptance.git.HttpPushForReviewIT`:
To run a specific test group, e.g. the rest-account test group:
----
buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git:HttpPushForReviewIT
buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:rest-account
----
To create test coverage report:
@@ -605,24 +604,30 @@ Test execution results are cached by Buck. If a test that was already run
needs to be repeated, the unit test cache for that test must be removed first:
----
rm -rf buck-out/bin/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group/.AddRemoveGroupMembersIT/
rm -rf buck-out/bin/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/.rest-account/
----
After clearing the cache, the test can be run again:
----
buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group:AddRemoveGroupMembersIT
TESTING //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group:AddRemoveGroupMembersIT
PASS 14,9s 8 Passed 0 Failed com.google.gerrit.acceptance.rest.group.AddRemoveGroupMembersIT
buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:rest-account
[-] TESTING...FINISHED 12,3s (12 PASS/0 FAIL)
RESULTS FOR //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:rest-account
PASS 970ms 2 Passed 0 Skipped 0 Failed com.google.gerrit.acceptance.rest.account.CapabilitiesIT
PASS 999ms 1 Passed 0 Skipped 0 Failed com.google.gerrit.acceptance.rest.account.EditPreferencesIT
PASS 1,2s 1 Passed 0 Skipped 0 Failed com.google.gerrit.acceptance.rest.account.GetAccountDetailIT
PASS 951ms 2 Passed 0 Skipped 0 Failed com.google.gerrit.acceptance.rest.account.GetAccountIT
PASS 6,4s 2 Passed 0 Skipped 0 Failed com.google.gerrit.acceptance.rest.account.GetDiffPreferencesIT
PASS 1,2s 4 Passed 0 Skipped 0 Failed com.google.gerrit.acceptance.rest.account.PutUsernameIT
TESTS PASSED
----
An alternative approach is to use Buck's `--filters` (`-f`) option:
----
buck test -f 'com.google.gerrit.acceptance.rest.change.SubmitByMergeAlwaysIT'
TESTING SELECTED TESTS
PASS 14,5s 6 Passed 0 Failed com.google.gerrit.acceptance.rest.change.SubmitByMergeAlwaysIT
buck test -f //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:rest-account
RESULTS FOR SELECTED TESTS
PASS <100ms 4 Passed 0 Skipped 0 Failed //tools:util_test
TESTS PASSED
----

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'api-account',
srcs = glob(['*IT.java']),
labels = ['api'],
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'api-change',
srcs = glob(['*IT.java']),
labels = ['api'],
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'api-config',
srcs = glob(['*IT.java']),
labels = ['api'],
)

View File

@@ -1,12 +1,13 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'api-group',
srcs = glob(['*IT.java']),
deps = [
':util',
'//gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:util',
],
labels = ['rest']
labels = ['api']
)
java_library(

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'api-project',
srcs = glob(['*IT.java']),
labels = ['api'],
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'api-revision',
srcs = glob(['*IT.java']),
labels = ['api'],
)

View File

@@ -1,10 +1,11 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'edit',
srcs = ['ChangeEditIT.java'],
labels = ['edit'],
deps = [
'//lib/commons:codec',
'//lib/joda:joda-time',
],
labels = ['edit'],
)

View File

@@ -1,21 +1,12 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
srcs = [
'DraftChangeBlockedIT.java',
'ForcePushIT.java',
'SubmitOnPushIT.java',
'SubmoduleSubscriptionsWholeTopicMergeIT.java',
'SubmoduleSubscriptionsIT.java',
'VisibleRefFilterIT.java',
group = 'git',
srcs = glob(['*IT.java']),
deps = [
':submodule_util',
':push_for_review',
],
deps = [':submodule_util'],
labels = ['git'],
)
acceptance_tests(
srcs = ['HttpPushForReviewIT.java', 'SshPushForReviewIT.java'],
deps = [':push_for_review'],
labels = ['git'],
)

View File

@@ -1,7 +1,8 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'pgm',
srcs = glob(['*IT.java']),
labels = ['pgm'],
source_under_test = ['//gerrit-pgm:pgm'],
labels = ['pgm'],
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'rest-account',
srcs = glob(['*IT.java']),
deps = [':util'],
labels = ['rest']

View File

@@ -5,10 +5,11 @@ SUBMIT_UTIL_SRCS = [
'AbstractSubmitByMerge.java',
]
SUBMIT_TESTS = glob(['Submit*IT.java'], excludes = SUBMIT_UTIL_SRCS)
OTHER_TESTS = glob(['*IT.java'], excludes = SUBMIT_TESTS + SUBMIT_UTIL_SRCS)
SUBMIT_TESTS = glob(['Submit*IT.java'])
OTHER_TESTS = glob(['*IT.java'], excludes = SUBMIT_TESTS)
acceptance_tests(
group = 'rest-change-other',
srcs = OTHER_TESTS,
deps = [
':submit_util',
@@ -18,6 +19,7 @@ acceptance_tests(
)
acceptance_tests(
group = 'rest-change-submit',
srcs = SUBMIT_TESTS,
deps = [
':submit_util',

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'rest-config',
srcs = glob(['*IT.java']),
labels = ['rest']
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'rest-group',
srcs = glob(['*IT.java']),
labels = ['rest']
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'rest-project',
srcs = glob(['*IT.java']),
deps = [
':branch',

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'server-change',
srcs = glob(['*IT.java']),
labels = ['server'],
)

View File

@@ -3,11 +3,13 @@ include_defs('//gerrit-acceptance-tests/tests.defs')
FLAKY_TEST_CASES=['ProjectWatchIT.java']
acceptance_tests(
group = 'server-project',
srcs = glob(['*IT.java'], excludes=FLAKY_TEST_CASES),
labels = ['server'],
)
acceptance_tests(
group = 'server-project-flaky',
srcs = FLAKY_TEST_CASES,
labels = ['server', 'flaky'],
)

View File

@@ -1,6 +1,7 @@
include_defs('//gerrit-acceptance-tests/tests.defs')
acceptance_tests(
group = 'ssh',
srcs = glob(['*IT.java']),
deps = ['//lib/commons:compress'],
labels = ['ssh'],

View File

@@ -5,6 +5,7 @@ BOUNCYCASTLE = [
]
def acceptance_tests(
group,
srcs,
deps = [],
labels = [],
@@ -16,10 +17,9 @@ def acceptance_tests(
if path.exists('/dev/urandom'):
vm_args = vm_args + ['-Djava.security.egd=file:/dev/./urandom']
for j in srcs:
java_test(
name = j[:-len('.java')],
srcs = [j],
name = group,
srcs = srcs,
deps = ['//gerrit-acceptance-tests:lib'] + deps,
source_under_test = [
'//gerrit-httpd:httpd',