Skip to content

Commit 8be7f56

Browse files
committed
E2E for LLM-enhanced dictionary
1 parent 52750bb commit 8be7f56

4 files changed

Lines changed: 96 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.foo.rest.examples.spring.openapi.v3.dictionaryllm
2+
3+
import org.springframework.boot.SpringApplication
4+
import org.springframework.boot.autoconfigure.SpringBootApplication
5+
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
6+
import org.springframework.http.ResponseEntity
7+
import org.springframework.web.bind.annotation.PostMapping
8+
import org.springframework.web.bind.annotation.RequestBody
9+
import org.springframework.web.bind.annotation.RequestMapping
10+
import org.springframework.web.bind.annotation.RestController
11+
12+
@RestController
13+
@RequestMapping(path = ["/api/dictionaryllm"])
14+
@SpringBootApplication(exclude = [SecurityAutoConfiguration::class])
15+
open class DictionaryLlmApplication {
16+
companion object {
17+
@JvmStatic
18+
fun main(args: Array<String>) {
19+
SpringApplication.run(DictionaryLlmApplication::class.java, *args)
20+
}
21+
}
22+
23+
@PostMapping
24+
fun post(@RequestBody dto: DictionaryLlmDto) : ResponseEntity<String> {
25+
26+
27+
if(dto.giganotosaurus == "triceratops") {
28+
return ResponseEntity.ok("OK")
29+
}
30+
31+
return ResponseEntity.status(400).build()
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.foo.rest.examples.spring.openapi.v3.dictionaryllm
2+
3+
class DictionaryLlmDto(
4+
var giganotosaurus: String? = null
5+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.foo.rest.examples.spring.openapi.v3.dictionaryllm
2+
3+
import com.foo.rest.examples.spring.openapi.v3.SpringController
4+
5+
6+
class DictionaryLlmController : SpringController(DictionaryLlmApplication::class.java)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.evomaster.e2etests.spring.openapi.v3.dictionaryllm
2+
3+
import com.foo.rest.examples.spring.openapi.v3.dictionaryllm.DictionaryLlmController
4+
import org.evomaster.core.llm.LlmProvider
5+
import org.evomaster.core.llm.mock.MockChatModel
6+
import org.evomaster.core.problem.rest.data.HttpVerb
7+
import org.evomaster.e2etests.spring.openapi.v3.SpringTestBase
8+
import org.junit.jupiter.api.Assertions.assertTrue
9+
import org.junit.jupiter.api.BeforeAll
10+
import org.junit.jupiter.api.Test
11+
12+
13+
class DictionaryLlmEMTest : SpringTestBase() {
14+
15+
companion object {
16+
@BeforeAll
17+
@JvmStatic
18+
fun init() {
19+
initClass(DictionaryLlmController())
20+
}
21+
}
22+
23+
24+
@Test
25+
fun testRunEM() {
26+
27+
defaultSeed = 43
28+
29+
runTestHandlingFlakyAndCompilation(
30+
"DictionaryLlmEM",
31+
100
32+
) { args: MutableList<String> ->
33+
34+
//White-box would trivially cover it via taint analysis
35+
setOption(args, "blackBox", "true")
36+
setOption(args, "base", baseUrlOfSut)
37+
setOption(args, "schema", "$baseUrlOfSut/v3/api-docs")
38+
setOption(args, "useDictionaryDataPool", "true")
39+
setOption(args, "llm", "true")
40+
setOption(args, "llmProvider", LlmProvider.MOCK.name)
41+
42+
MockChatModel.reset()
43+
MockChatModel.mockResponse("[\"triceratops\"]"){ it.contains("giganotosaurus")}
44+
45+
val solution = initAndRun(args)
46+
47+
assertTrue(solution.individuals.size >= 1)
48+
assertHasAtLeastOne(solution, HttpVerb.POST, 400, "/api/dictionaryllm", null)
49+
assertHasAtLeastOne(solution, HttpVerb.POST, 200, "/api/dictionaryllm", "OK")
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)