Skip to content

Commit c333b48

Browse files
committed
JPERF-999: Allow specifying Scenario class without having it in classpath
virtual-users consumers use the VirtualUserBehavior and VirtualUserOptions classes for serializing VU options. Requiring to set Scenatio as Class artificially enforces the consumer to depend on the VU JAR classes.
1 parent 747e674 commit c333b48

3 files changed

Lines changed: 21 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ Dropping a requirement of a major version of a dependency is a new contract.
2323
## [Unreleased]
2424
[Unreleased]: https://github.com/atlassian/virtual-users/compare/release-3.13.2...master
2525

26+
### Added
27+
- Allow specifying Scenario class without having it in classpath. Resolve [JPERF-999].
28+
29+
[JPERF-999]: https://ecosystem.atlassian.net/browse/JPERF-999
30+
2631
## [3.13.2] - 2022-04-08
2732
[3.13.2]: https://github.com/atlassian/virtual-users/compare/release-3.13.1...release-3.13.2
2833

src/main/kotlin/com/atlassian/performance/tools/virtualusers/api/VirtualUserOptions.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,10 @@ class VirtualUserOptions(
5050
val virtualUserLoad: VirtualUserLoad
5151
get() = behavior.load
5252

53+
@Suppress("UNCHECKED_CAST")
5354
@Deprecated(deprecatedGetterMessage)
5455
val scenario: Class<out Scenario>
55-
get() = behavior.scenario
56+
get() = Class.forName(behavior.scenarioClass) as Class<out Scenario>
5657

5758
@Deprecated(deprecatedGetterMessage)
5859
val seed: Long
@@ -341,7 +342,7 @@ class VirtualUserOptions(
341342
rampParameter to behavior.load.ramp,
342343
flatParameter to behavior.load.flat,
343344
maxOverallLoadParameter to behavior.load.maxOverallLoad.let { "${it.change}/${it.time}" },
344-
scenarioParameter to behavior.scenario.canonicalName,
345+
scenarioParameter to behavior.scenarioClass,
345346
diagnosticsLimitParameter to behavior.diagnosticsLimit,
346347
seedParameter to behavior.seed,
347348
browserParameter to behavior.browser.name,

src/main/kotlin/com/atlassian/performance/tools/virtualusers/api/config/VirtualUserBehavior.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class VirtualUserBehavior private constructor(
2323
)
2424
internal val help: Boolean,
2525
internal val results: Path,
26-
internal val scenario: Class<out Scenario>,
26+
internal val scenarioClass: String,
2727
val load: VirtualUserLoad,
2828
val maxOverhead: Duration,
2929
internal val seed: Long,
@@ -48,7 +48,7 @@ class VirtualUserBehavior private constructor(
4848
) : this(
4949
help = help,
5050
results = Paths.get("."),
51-
scenario = scenario,
51+
scenarioClass = scenario.canonicalName,
5252
load = load,
5353
maxOverhead = Duration.ofMinutes(5),
5454
seed = seed,
@@ -111,7 +111,7 @@ class VirtualUserBehavior private constructor(
111111
): VirtualUserBehavior = Builder(this).load(load).build()
112112

113113
class Builder(
114-
private var scenario: Class<out Scenario>
114+
private var scenarioClass: String
115115
) {
116116
private var results: Path = Paths.get(".")
117117
private var load: VirtualUserLoad = VirtualUserLoad.Builder().build()
@@ -129,7 +129,7 @@ class VirtualUserBehavior private constructor(
129129
*/
130130
fun results(results: Path) = apply { this.results = results }
131131

132-
fun scenario(scenario: Class<out Scenario>) = apply { this.scenario = scenario }
132+
fun scenario(scenario: Class<out Scenario>) = apply { this.scenarioClass = scenario.canonicalName }
133133
fun load(load: VirtualUserLoad) = apply { this.load = load }
134134
fun maxOverhead(maxOverhead: Duration) = apply { this.maxOverhead = maxOverhead }
135135
fun seed(seed: Long) = apply { this.seed = seed }
@@ -149,14 +149,20 @@ class VirtualUserBehavior private constructor(
149149

150150
fun userGenerator(userGenerator: Class<out UserGenerator>) = apply { this.userGenerator = userGenerator }
151151

152+
constructor(
153+
scenario: Class<out Scenario>
154+
) : this(
155+
scenarioClass = scenario.canonicalName
156+
)
157+
152158
constructor(
153159
behavior: VirtualUserBehavior
154160
) : this(
155-
scenario = behavior.scenario
161+
scenarioClass = behavior.scenarioClass
156162
) {
157163
load = behavior.load
158164
maxOverhead = behavior.maxOverhead
159-
scenario = behavior.scenario
165+
scenarioClass = behavior.scenarioClass
160166
diagnosticsLimit = behavior.diagnosticsLimit
161167
browser = behavior.browser
162168
logging = behavior.logging
@@ -168,7 +174,7 @@ class VirtualUserBehavior private constructor(
168174
fun build(): VirtualUserBehavior = VirtualUserBehavior(
169175
help = false,
170176
results = results,
171-
scenario = scenario,
177+
scenarioClass = scenarioClass,
172178
load = load,
173179
maxOverhead = maxOverhead,
174180
seed = seed,

0 commit comments

Comments
 (0)