Skip to content

Commit 29c29fc

Browse files
committed
JPERF-411: Test user creation on LoadTest level
Unblock fixes within `LoadTest`, e.g. creating users per VU thread, controlling the ramping period, etc. Ignore `EntryPointIT`, because it uses `testcontainer`, which causes shading bugs like: ``` java.lang.AbstractMethodError: org.testcontainers.dockerclient.transport.okhttp.OkHttpInvocationBuilder.get(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object; at com.github.dockerjava.core.exec.VersionCmdExec.execute(VersionCmdExec.java:26) at com.github.dockerjava.core.exec.VersionCmdExec.execute(VersionCmdExec.java:13) at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21) at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35) at com.atlassian.performance.tools.dockerinfrastructure.Ryuk.disable$docker_infrastructure(Ryuk.kt:31) at com.atlassian.performance.tools.dockerinfrastructure.network.SharedNetwork.<clinit>(SharedNetwork.kt:11) at com.atlassian.performance.tools.dockerinfrastructure.api.jira.JiraCoreFormula.<init>(JiraCoreFormula.kt:24) at com.atlassian.performance.tools.dockerinfrastructure.api.jira.JiraCoreFormula.<init>(JiraCoreFormula.kt:17) at com.atlassian.performance.tools.dockerinfrastructure.api.jira.JiraCoreFormula$Builder.build(JiraCoreFormula.kt:108) at com.atlassian.performance.tools.virtualusers.api.EntryPointIT.shouldRunWith3_2_0_Args(EntryPointIT.kt:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:117) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137) at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:748) ``` Many parts of `EntryPointIT` are covered by `LoadTestIT` anyway.
1 parent c4f4b91 commit 29c29fc

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
key: v3-dependencies-{{ checksum "build.gradle.kts" }}
1919
- run:
2020
command: ./gradlew build
21-
no_output_timeout: 14m
21+
no_output_timeout: 30m
2222
- store_artifacts:
2323
path: ./build/reports
2424
- store_test_results:

src/test/kotlin/com/atlassian/performance/tools/virtualusers/RestUserGeneratorIT.kt renamed to src/test/kotlin/com/atlassian/performance/tools/virtualusers/LoadTestIT.kt

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import com.atlassian.performance.tools.infrastructure.api.jira.JiraNodeConfig
1010
import com.atlassian.performance.tools.infrastructure.api.jvm.OracleJDK
1111
import com.atlassian.performance.tools.infrastructure.api.profiler.AsyncProfiler
1212
import com.atlassian.performance.tools.ssh.api.Ssh
13+
import com.atlassian.performance.tools.virtualusers.api.TemporalRate
14+
import com.atlassian.performance.tools.virtualusers.api.VirtualUserLoad
15+
import com.atlassian.performance.tools.virtualusers.api.VirtualUserOptions
16+
import com.atlassian.performance.tools.virtualusers.api.config.VirtualUserBehavior
1317
import com.atlassian.performance.tools.virtualusers.api.config.VirtualUserTarget
1418
import com.atlassian.performance.tools.virtualusers.lib.docker.execAsResource
1519
import com.atlassian.performance.tools.virtualusers.lib.infrastructure.Jperf425WorkaroundMysqlDatabase
@@ -20,15 +24,13 @@ import com.atlassian.performance.tools.virtualusers.lib.sshubuntu.SudoSshUbuntuC
2024
import com.atlassian.performance.tools.virtualusers.lib.sshubuntu.SudoSshUbuntuImage
2125
import com.github.dockerjava.api.model.ExposedPort
2226
import com.github.dockerjava.core.DockerClientBuilder
23-
import org.assertj.core.api.Assertions.assertThat
2427
import org.junit.Test
2528
import java.net.URI
2629
import java.time.Duration
2730
import java.util.*
28-
import java.util.concurrent.Callable
2931
import java.util.concurrent.Executors
3032

31-
class RestUserGeneratorIT {
33+
class LoadTestIT {
3234

3335
private val dataset: Dataset = URI("https://s3-eu-central-1.amazonaws.com/")
3436
.resolve("jpt-custom-datasets-storage-a008820-datasetbucket-dah44h6l1l8p/")
@@ -49,25 +51,48 @@ class RestUserGeneratorIT {
4951
)
5052
}
5153

54+
private val behavior = VirtualUserBehavior.Builder(TracingScenario::class.java)
55+
.createUsers(true)
56+
.browser(LoadTestTest.TestBrowser::class.java)
57+
.skipSetup(true)
58+
5259
@Test
5360
fun shouldCreateUsersInParallelDespiteBigUserBase() {
5461
val pool = Executors.newCachedThreadPool()
5562
val nodes = 6
63+
val load = VirtualUserLoad.Builder()
64+
.virtualUsers(75)
65+
.ramp(Duration.ofSeconds(45))
66+
.flat(Duration.ofMinutes(3))
67+
.maxOverallLoad(TemporalRate(15.0, Duration.ofSeconds(1)))
68+
.build()
69+
val loadSlices = load.slice(nodes)
5670

57-
val newUsers = testWithJira {
58-
val userGeneration = Callable {
59-
RestUserGenerator(target(it)).generateUsers(12)
60-
}
71+
testWithJira { jira ->
6172
(0 until nodes)
62-
.map { pool.submit(userGeneration) }
73+
.map { loadSlices[it] }
74+
.map { loadTest(jira, it) }
75+
.map { pool.submit { it.run() } }
6376
.map { it.get() }
64-
.flatten()
6577
}
6678

6779
pool.shutdownNow()
68-
assertThat(newUsers).hasSize(72)
6980
}
7081

82+
private fun loadTest(
83+
jira: URI,
84+
load: VirtualUserLoad
85+
): LoadTest = LoadTest(
86+
options = VirtualUserOptions(
87+
target = target(jira),
88+
behavior = behavior
89+
.load(load)
90+
.build()
91+
),
92+
userGenerator = RestUserGenerator(target(jira))
93+
)
94+
95+
7196
private fun <T> testWithJira(
7297
test: (URI) -> T
7398
): T {

src/test/kotlin/com/atlassian/performance/tools/virtualusers/api/EntryPointIT.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@ import com.atlassian.performance.tools.dockerinfrastructure.api.jira.Jira
44
import com.atlassian.performance.tools.dockerinfrastructure.api.jira.JiraCoreFormula
55
import com.atlassian.performance.tools.virtualusers.ChromeContainer
66
import com.atlassian.performance.tools.virtualusers.SimpleScenario
7+
import org.junit.Ignore
78
import org.junit.Test
89

910
class EntryPointIT {
1011

12+
@Ignore("https://github.com/testcontainers/testcontainers-java/issues/1113")
1113
@Test
1214
fun shouldRunWith3_2_0_Args() {
1315
JiraCoreFormula.Builder()
1416
.build()
1517
.provision()
16-
.use { jira : Jira ->
18+
.use { jira: Jira ->
1719
com.atlassian.performance.tools.virtualusers.api.main(arrayOf(
1820
"--jira-address", jira.getUri().toString(),
1921
"--login", "admin",

0 commit comments

Comments
 (0)