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:
@@ -318,11 +318,10 @@ The following groups of tests are currently supported:
|
|||||||
* ssh
|
* ssh
|
||||||
* slow
|
* slow
|
||||||
|
|
||||||
To run a specific test, e.g. the acceptance test
|
To run a specific test group, e.g. the rest-account test group:
|
||||||
`com.google.gerrit.acceptance.git.HttpPushForReviewIT`:
|
|
||||||
|
|
||||||
----
|
----
|
||||||
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:
|
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:
|
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:
|
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
|
buck test //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:rest-account
|
||||||
TESTING //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group:AddRemoveGroupMembersIT
|
[-] TESTING...FINISHED 12,3s (12 PASS/0 FAIL)
|
||||||
PASS 14,9s 8 Passed 0 Failed com.google.gerrit.acceptance.rest.group.AddRemoveGroupMembersIT
|
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
|
TESTS PASSED
|
||||||
----
|
----
|
||||||
|
|
||||||
An alternative approach is to use Buck's `--filters` (`-f`) option:
|
An alternative approach is to use Buck's `--filters` (`-f`) option:
|
||||||
|
|
||||||
----
|
----
|
||||||
buck test -f 'com.google.gerrit.acceptance.rest.change.SubmitByMergeAlwaysIT'
|
buck test -f //gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:rest-account
|
||||||
TESTING SELECTED TESTS
|
RESULTS FOR SELECTED TESTS
|
||||||
PASS 14,5s 6 Passed 0 Failed com.google.gerrit.acceptance.rest.change.SubmitByMergeAlwaysIT
|
PASS <100ms 4 Passed 0 Skipped 0 Failed //tools:util_test
|
||||||
TESTS PASSED
|
TESTS PASSED
|
||||||
----
|
----
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'api-account',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['api'],
|
labels = ['api'],
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'api-change',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['api'],
|
labels = ['api'],
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'api-config',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['api'],
|
labels = ['api'],
|
||||||
)
|
)
|
||||||
|
@@ -1,12 +1,13 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'api-group',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
deps = [
|
deps = [
|
||||||
':util',
|
':util',
|
||||||
'//gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:util',
|
'//gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:util',
|
||||||
],
|
],
|
||||||
labels = ['rest']
|
labels = ['api']
|
||||||
)
|
)
|
||||||
|
|
||||||
java_library(
|
java_library(
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'api-project',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['api'],
|
labels = ['api'],
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'api-revision',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['api'],
|
labels = ['api'],
|
||||||
)
|
)
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'edit',
|
||||||
srcs = ['ChangeEditIT.java'],
|
srcs = ['ChangeEditIT.java'],
|
||||||
labels = ['edit'],
|
|
||||||
deps = [
|
deps = [
|
||||||
'//lib/commons:codec',
|
'//lib/commons:codec',
|
||||||
'//lib/joda:joda-time',
|
'//lib/joda:joda-time',
|
||||||
],
|
],
|
||||||
|
labels = ['edit'],
|
||||||
)
|
)
|
||||||
|
@@ -1,21 +1,12 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
srcs = [
|
group = 'git',
|
||||||
'DraftChangeBlockedIT.java',
|
srcs = glob(['*IT.java']),
|
||||||
'ForcePushIT.java',
|
deps = [
|
||||||
'SubmitOnPushIT.java',
|
':submodule_util',
|
||||||
'SubmoduleSubscriptionsWholeTopicMergeIT.java',
|
':push_for_review',
|
||||||
'SubmoduleSubscriptionsIT.java',
|
|
||||||
'VisibleRefFilterIT.java',
|
|
||||||
],
|
],
|
||||||
deps = [':submodule_util'],
|
|
||||||
labels = ['git'],
|
|
||||||
)
|
|
||||||
|
|
||||||
acceptance_tests(
|
|
||||||
srcs = ['HttpPushForReviewIT.java', 'SshPushForReviewIT.java'],
|
|
||||||
deps = [':push_for_review'],
|
|
||||||
labels = ['git'],
|
labels = ['git'],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'pgm',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['pgm'],
|
|
||||||
source_under_test = ['//gerrit-pgm:pgm'],
|
source_under_test = ['//gerrit-pgm:pgm'],
|
||||||
|
labels = ['pgm'],
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'rest-account',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
deps = [':util'],
|
deps = [':util'],
|
||||||
labels = ['rest']
|
labels = ['rest']
|
||||||
|
@@ -5,10 +5,11 @@ SUBMIT_UTIL_SRCS = [
|
|||||||
'AbstractSubmitByMerge.java',
|
'AbstractSubmitByMerge.java',
|
||||||
]
|
]
|
||||||
|
|
||||||
SUBMIT_TESTS = glob(['Submit*IT.java'], excludes = SUBMIT_UTIL_SRCS)
|
SUBMIT_TESTS = glob(['Submit*IT.java'])
|
||||||
OTHER_TESTS = glob(['*IT.java'], excludes = SUBMIT_TESTS + SUBMIT_UTIL_SRCS)
|
OTHER_TESTS = glob(['*IT.java'], excludes = SUBMIT_TESTS)
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'rest-change-other',
|
||||||
srcs = OTHER_TESTS,
|
srcs = OTHER_TESTS,
|
||||||
deps = [
|
deps = [
|
||||||
':submit_util',
|
':submit_util',
|
||||||
@@ -18,6 +19,7 @@ acceptance_tests(
|
|||||||
)
|
)
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'rest-change-submit',
|
||||||
srcs = SUBMIT_TESTS,
|
srcs = SUBMIT_TESTS,
|
||||||
deps = [
|
deps = [
|
||||||
':submit_util',
|
':submit_util',
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'rest-config',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['rest']
|
labels = ['rest']
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'rest-group',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['rest']
|
labels = ['rest']
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'rest-project',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
deps = [
|
deps = [
|
||||||
':branch',
|
':branch',
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'server-change',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
labels = ['server'],
|
labels = ['server'],
|
||||||
)
|
)
|
||||||
|
@@ -3,11 +3,13 @@ include_defs('//gerrit-acceptance-tests/tests.defs')
|
|||||||
FLAKY_TEST_CASES=['ProjectWatchIT.java']
|
FLAKY_TEST_CASES=['ProjectWatchIT.java']
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'server-project',
|
||||||
srcs = glob(['*IT.java'], excludes=FLAKY_TEST_CASES),
|
srcs = glob(['*IT.java'], excludes=FLAKY_TEST_CASES),
|
||||||
labels = ['server'],
|
labels = ['server'],
|
||||||
)
|
)
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'server-project-flaky',
|
||||||
srcs = FLAKY_TEST_CASES,
|
srcs = FLAKY_TEST_CASES,
|
||||||
labels = ['server', 'flaky'],
|
labels = ['server', 'flaky'],
|
||||||
)
|
)
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
include_defs('//gerrit-acceptance-tests/tests.defs')
|
include_defs('//gerrit-acceptance-tests/tests.defs')
|
||||||
|
|
||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
|
group = 'ssh',
|
||||||
srcs = glob(['*IT.java']),
|
srcs = glob(['*IT.java']),
|
||||||
deps = ['//lib/commons:compress'],
|
deps = ['//lib/commons:compress'],
|
||||||
labels = ['ssh'],
|
labels = ['ssh'],
|
||||||
|
@@ -5,6 +5,7 @@ BOUNCYCASTLE = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
def acceptance_tests(
|
def acceptance_tests(
|
||||||
|
group,
|
||||||
srcs,
|
srcs,
|
||||||
deps = [],
|
deps = [],
|
||||||
labels = [],
|
labels = [],
|
||||||
@@ -16,19 +17,18 @@ def acceptance_tests(
|
|||||||
if path.exists('/dev/urandom'):
|
if path.exists('/dev/urandom'):
|
||||||
vm_args = vm_args + ['-Djava.security.egd=file:/dev/./urandom']
|
vm_args = vm_args + ['-Djava.security.egd=file:/dev/./urandom']
|
||||||
|
|
||||||
for j in srcs:
|
java_test(
|
||||||
java_test(
|
name = group,
|
||||||
name = j[:-len('.java')],
|
srcs = srcs,
|
||||||
srcs = [j],
|
deps = ['//gerrit-acceptance-tests:lib'] + deps,
|
||||||
deps = ['//gerrit-acceptance-tests:lib'] + deps,
|
source_under_test = [
|
||||||
source_under_test = [
|
'//gerrit-httpd:httpd',
|
||||||
'//gerrit-httpd:httpd',
|
'//gerrit-sshd:sshd',
|
||||||
'//gerrit-sshd:sshd',
|
'//gerrit-server:server',
|
||||||
'//gerrit-server:server',
|
] + source_under_test,
|
||||||
] + source_under_test,
|
labels = labels + [
|
||||||
labels = labels + [
|
'acceptance',
|
||||||
'acceptance',
|
'slow',
|
||||||
'slow',
|
],
|
||||||
],
|
vm_args = vm_args,
|
||||||
vm_args = vm_args,
|
)
|
||||||
)
|
|
||||||
|
Reference in New Issue
Block a user