Skip to content

Commit 34480af

Browse files
Update
1 parent 1e8eb9d commit 34480af

12 files changed

Lines changed: 153 additions & 88 deletions

File tree

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/AIClassificationEMTestBase.kt

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ abstract class AIClassificationEMTestBase : SpringTestBase(){
3030
): EvaluatedIndividual<RestIndividual> {
3131

3232
val sampler = injector.getInstance(AbstractRestSampler::class.java)
33-
3433
val ind = sampler.createIndividual(sampleT, actions.toMutableList())
3534

3635
val ff = injector.getInstance(AbstractRestFitness::class.java)
@@ -43,30 +42,42 @@ abstract class AIClassificationEMTestBase : SpringTestBase(){
4342
injector: Injector,
4443
ok2xx: List<RestCallAction>,
4544
fail400: List<RestCallAction>,
46-
threshold: Double = injector.getInstance(EMConfig::class.java).classificationRepairThreshold
45+
repairThreshold: Double = injector.getInstance(EMConfig::class.java).classificationRepairThreshold,
46+
randomPerformanceThreshold: Double = 0.50
4747
) {
4848

4949
val model = injector.getInstance(AIResponseClassifier::class.java)
5050
model.disableLearning() // no side-effects
5151

52-
for(ok in ok2xx){
53-
val resOK = evaluateAction(injector, ok)
54-
assertTrue(resOK.getStatusCode() in 200..299)
55-
val mOK= model.classify(ok)
56-
assertTrue(
57-
mOK.probabilityOf400() < threshold,
58-
"Too high probability of 400 for OK ${ok.getName()}: ${mOK.probabilityOf400()}")
52+
var correctPrediction = 0
53+
// 400
54+
for (fail in fail400) {
55+
val result = evaluateAction(injector, fail)
56+
assertEquals(400, result.getStatusCode())
57+
58+
val probability = model.classify(fail).probabilityOf400()
59+
if (probability >= repairThreshold) {
60+
correctPrediction++
61+
}
5962
}
63+
// 2xx
64+
for (ok in ok2xx) {
65+
val result = evaluateAction(injector, ok)
66+
assertTrue(result.getStatusCode() in 200..299)
6067

61-
for(fail in fail400) {
62-
val resFail = evaluateAction(injector, fail)
63-
assertEquals(400, resFail.getStatusCode())
64-
val mFail = model.classify(fail)
65-
assertTrue(
66-
mFail.probabilityOf400() >= threshold,
67-
"Too low probability of 400 for Fail ${fail.getName()}: ${mFail.probabilityOf400()}"
68-
)
68+
val probability = model.classify(ok).probabilityOf400()
69+
if (probability < repairThreshold) {
70+
correctPrediction++
71+
}
6972
}
70-
}
7173

72-
}
74+
val totalSize = ok2xx.size + fail400.size
75+
val accuracy =
76+
if (totalSize > 0) correctPrediction.toDouble() / totalSize else 0.0
77+
78+
assertTrue(
79+
accuracy > randomPerformanceThreshold,
80+
"Too low total accuracy: $accuracy"
81+
)
82+
}
83+
}

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/allornone/ACAllOrNoneEMTest.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,46 @@ class ACAllOrNoneEMTest : AIClassificationEMTestBase() {
2424
@Disabled
2525
@Test
2626
fun testRunDeterministic(){
27-
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
27+
testRunEM("DETERMINISTIC")
2828
}
2929

3030
@Disabled
3131
@Test
3232
fun testRunGaussian(){
33-
testRunEM(AIResponseClassifierModel.GAUSSIAN)
33+
testRunEM("GAUSSIAN")
3434
}
3535

3636
@Disabled
3737
@Test
3838
fun testRunGLM(){
39-
testRunEM(AIResponseClassifierModel.GLM)
39+
testRunEM("GLM")
4040
}
4141

4242
@Disabled
4343
@Test
4444
fun testRunKDE(){
45-
testRunEM(AIResponseClassifierModel.KDE)
45+
testRunEM("KDE")
4646
}
4747

4848
@Disabled
4949
@Test
5050
fun testRunKNN(){
51-
testRunEM(AIResponseClassifierModel.KNN)
51+
testRunEM("KNN")
5252
}
5353

5454
@Disabled
5555
@Test
5656
fun testRunNN(){
57-
testRunEM(AIResponseClassifierModel.NN)
57+
testRunEM("NN")
5858
}
5959

60-
private fun testRunEM(model: AIResponseClassifierModel) {
60+
61+
@Test
62+
fun testRunEnsemble(){
63+
testRunEM("GAUSSIAN,GLM,KDE,KNN,NN")
64+
}
65+
66+
private fun testRunEM(model: String) {
6167

6268
runTestHandlingFlakyAndCompilation(
6369
"ACAllOrNoneEM",

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/arithmetic/ACArithmeticEMTest.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,46 @@ class ACArithmeticEMTest : AIClassificationEMTestBase() {
2424
@Disabled
2525
@Test
2626
fun testRunDeterministic(){
27-
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
27+
testRunEM("DETERMINISTIC")
2828
}
2929

3030
@Disabled
3131
@Test
3232
fun testRunGaussian(){
33-
testRunEM(AIResponseClassifierModel.GAUSSIAN)
33+
testRunEM("GAUSSIAN")
3434
}
3535

3636
@Disabled
3737
@Test
3838
fun testRunGLM(){
39-
testRunEM(AIResponseClassifierModel.GLM)
39+
testRunEM("GLM")
4040
}
4141

4242
@Disabled
4343
@Test
4444
fun testRunKDE(){
45-
testRunEM(AIResponseClassifierModel.KDE)
45+
testRunEM("KDE")
4646
}
4747

4848
@Disabled
4949
@Test
5050
fun testRunKNN(){
51-
testRunEM(AIResponseClassifierModel.KNN)
51+
testRunEM("KNN")
5252
}
5353

5454
@Disabled
5555
@Test
5656
fun testRunNN(){
57-
testRunEM(AIResponseClassifierModel.NN)
57+
testRunEM("NN")
5858
}
5959

60-
private fun testRunEM(model: AIResponseClassifierModel) {
60+
61+
@Test
62+
fun testRunEnsemble(){
63+
testRunEM("GAUSSIAN,GLM,KDE,KNN,NN")
64+
}
65+
66+
private fun testRunEM(model: String) {
6167

6268
runTestHandlingFlakyAndCompilation(
6369
"ACArithmeticEM",

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/basic/ACBasicEMTest.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,49 @@ class ACBasicEMTest : AIClassificationEMTestBase() {
2121
}
2222
}
2323

24+
@Disabled
2425
@Test
2526
fun testRunDeterministic(){
26-
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
27+
testRunEM("DETERMINISTIC")
2728
}
2829

2930
@Disabled
3031
@Test
3132
fun testRunGaussian(){
32-
testRunEM(AIResponseClassifierModel.GAUSSIAN)
33+
testRunEM("GAUSSIAN")
3334
}
3435

3536
@Disabled
3637
@Test
3738
fun testRunGLM(){
38-
testRunEM(AIResponseClassifierModel.GLM)
39+
testRunEM("GLM")
3940
}
4041

4142
@Disabled
4243
@Test
4344
fun testRunKDE(){
44-
testRunEM(AIResponseClassifierModel.KDE)
45+
testRunEM("KDE")
4546
}
4647

4748
@Disabled
4849
@Test
4950
fun testRunKNN(){
50-
testRunEM(AIResponseClassifierModel.KNN)
51+
testRunEM("KNN")
5152
}
5253

5354
@Disabled
5455
@Test
5556
fun testRunNN(){
56-
testRunEM(AIResponseClassifierModel.NN)
57+
testRunEM("NN")
58+
}
59+
60+
61+
@Test
62+
fun testRunEnsemble(){
63+
testRunEM("GAUSSIAN,GLM,KDE,KNN,NN")
5764
}
5865

59-
private fun testRunEM(model: AIResponseClassifierModel) {
66+
private fun testRunEM(model: String) {
6067

6168
runTestHandlingFlakyAndCompilation(
6269
"ACBasicEM",

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/imply/ACImplyEMTest.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,40 +32,46 @@ class ACImplyEMTest : AIClassificationEMTestBase() {
3232
@Disabled
3333
@Test
3434
fun testRunDeterministic(){
35-
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
35+
testRunEM("DETERMINISTIC")
3636
}
3737

3838
@Disabled
3939
@Test
4040
fun testRunGaussian(){
41-
testRunEM(AIResponseClassifierModel.GAUSSIAN)
41+
testRunEM("GAUSSIAN")
4242
}
4343

4444
@Disabled
4545
@Test
4646
fun testRunGLM(){
47-
testRunEM(AIResponseClassifierModel.GLM)
47+
testRunEM("GLM")
4848
}
4949

5050
@Disabled
5151
@Test
5252
fun testRunKDE(){
53-
testRunEM(AIResponseClassifierModel.KDE)
53+
testRunEM("KDE")
5454
}
5555

5656
@Disabled
5757
@Test
5858
fun testRunKNN(){
59-
testRunEM(AIResponseClassifierModel.KNN)
59+
testRunEM("KNN")
6060
}
6161

6262
@Disabled
6363
@Test
6464
fun testRunNN(){
65-
testRunEM(AIResponseClassifierModel.NN)
65+
testRunEM("NN")
6666
}
6767

68-
private fun testRunEM(model: AIResponseClassifierModel) {
68+
69+
@Test
70+
fun testRunEnsemble(){
71+
testRunEM("GAUSSIAN,GLM,KDE,KNN,NN")
72+
}
73+
74+
private fun testRunEM(model: String) {
6975

7076
runTestHandlingFlakyAndCompilation(
7177
"ACImplyEM",

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/mixed/ACMixedEMTest.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,40 +33,45 @@ class ACMixedEMTest : AIClassificationEMTestBase() {
3333
@Disabled
3434
@Test
3535
fun testRunDeterministic(){
36-
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
36+
testRunEM("DETERMINISTIC")
3737
}
3838

3939
@Disabled
4040
@Test
4141
fun testRunGaussian(){
42-
testRunEM(AIResponseClassifierModel.GAUSSIAN)
42+
testRunEM("GAUSSIAN")
4343
}
4444

4545
@Disabled
4646
@Test
4747
fun testRunGLM(){
48-
testRunEM(AIResponseClassifierModel.GLM)
48+
testRunEM("GLM")
4949
}
5050

5151
@Disabled
5252
@Test
5353
fun testRunKDE(){
54-
testRunEM(AIResponseClassifierModel.KDE)
54+
testRunEM("KDE")
5555
}
5656

5757
@Disabled
5858
@Test
5959
fun testRunKNN(){
60-
testRunEM(AIResponseClassifierModel.KNN)
60+
testRunEM("KNN")
6161
}
6262

6363
@Disabled
6464
@Test
6565
fun testRunNN(){
66-
testRunEM(AIResponseClassifierModel.NN)
66+
testRunEM("NN")
6767
}
6868

69-
private fun testRunEM(model: AIResponseClassifierModel) {
69+
@Test
70+
fun testRunEnsemble(){
71+
testRunEM("GAUSSIAN,GLM,KDE,KNN,NN")
72+
}
73+
74+
private fun testRunEM(model: String) {
7075

7176
runTestHandlingFlakyAndCompilation(
7277
"ACMixedEM",

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/test/kotlin/org/evomaster/e2etests/spring/openapi/v3/aiclassification/onlyone/ACOnlyOneEMTest.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,40 +30,46 @@ class ACOnlyOneEMTest : AIClassificationEMTestBase() {
3030
@Disabled
3131
@Test
3232
fun testRunDeterministic(){
33-
testRunEM(AIResponseClassifierModel.DETERMINISTIC)
33+
testRunEM("DETERMINISTIC")
3434
}
3535

3636
@Disabled
3737
@Test
3838
fun testRunGaussian(){
39-
testRunEM(AIResponseClassifierModel.GAUSSIAN)
39+
testRunEM("GAUSSIAN")
4040
}
4141

4242
@Disabled
4343
@Test
4444
fun testRunGLM(){
45-
testRunEM(AIResponseClassifierModel.GLM)
45+
testRunEM("GLM")
4646
}
4747

4848
@Disabled
4949
@Test
5050
fun testRunKDE(){
51-
testRunEM(AIResponseClassifierModel.KDE)
51+
testRunEM("KDE")
5252
}
5353

5454
@Disabled
5555
@Test
5656
fun testRunKNN(){
57-
testRunEM(AIResponseClassifierModel.KNN)
57+
testRunEM("KNN")
5858
}
5959

6060
@Disabled
6161
@Test
6262
fun testRunNN(){
63-
testRunEM(AIResponseClassifierModel.NN)
63+
testRunEM("NN")
6464
}
6565

66-
private fun testRunEM(model: AIResponseClassifierModel) {
66+
67+
@Test
68+
fun testRunEnsemble(){
69+
testRunEM("GAUSSIAN,GLM,KDE,KNN,NN")
70+
}
71+
72+
private fun testRunEM(model: String) {
6773

6874
runTestHandlingFlakyAndCompilation(
6975
"ACOnlyOneEM",

0 commit comments

Comments
 (0)