Skip to content

Commit d3bfd40

Browse files
authored
Merge pull request #1618 from WebFuzzing/status-oracle-ramaining
Status oracle ramaining
2 parents 92de2a0 + f8b7094 commit d3bfd40

4 files changed

Lines changed: 33 additions & 3 deletions

File tree

core-tests/e2e-tests/spring/spring-rest-openapi-v3/src/main/kotlin/com/foo/rest/examples/spring/openapi/v3/statusoracle/StatusOracleRest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ private class StatisticsRest {
5252
return ResponseEntity.status(204).body("Hello")
5353
}
5454

55+
@GetMapping(path = ["/no-205-if-content"])
56+
fun no205IfContent(): ResponseEntity<String> {
57+
return ResponseEntity.status(205).body("Hello")
58+
}
59+
5560
@PostMapping(path = ["/no-413-if-no-payload"])
5661
fun no413IfNoPayload() : ResponseEntity<String> {
5762
return ResponseEntity.status(413).build()
@@ -95,4 +100,9 @@ private class StatisticsRest {
95100
fun no501IfImplemented(): ResponseEntity<String>{
96101
return ResponseEntity.status(501).build()
97102
}
103+
104+
@GetMapping(path = ["/no-426-if-no-upgrade"])
105+
fun no426IfNoUpgrade(): ResponseEntity<String>{
106+
return ResponseEntity.status(426).build()
107+
}
98108
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ class StatusOracleEMTest : SpringTestBase(){
5858
//assertHasAtLeastOne(solution, HttpVerb.GET, 204, "/api/statusoracle/no-204-if-content", "Hello")
5959
//assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_204_IF_CONTENT })
6060

61+
//205
62+
//Same issue as 204
63+
//assertHasAtLeastOne(solution, HttpVerb.GET, 205, "/api/statusoracle/no-205-if-content", "Hello")
64+
//assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_205_IF_CONTENT })
65+
6166
//304
6267
assertHasAtLeastOne(solution, HttpVerb.POST, 304, "/api/statusoracle/no-304-if-no-get-or-head", null)
6368
assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_304_IF_NO_GET_OR_HEAD })
@@ -83,6 +88,10 @@ class StatusOracleEMTest : SpringTestBase(){
8388
assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_413_IF_NO_PAYLOAD })
8489
assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_415_IF_NO_PAYLOAD })
8590

91+
//426
92+
assertHasAtLeastOne(solution, HttpVerb.GET, 426, "/api/statusoracle/no-426-if-no-upgrade", null)
93+
assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_426_IF_NO_UPGRADE })
94+
8695
//501
8796
assertHasAtLeastOne(solution, HttpVerb.GET, 501, "/api/statusoracle/no-501-if-implemented", null)
8897
assertTrue(faultsCategories.any { it == ExperimentalFaultCategory.HTTP_STATUS_NO_501_IF_IMPLEMENTED })

core/src/main/kotlin/org/evomaster/core/problem/enterprise/ExperimentalFaultCategory.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@ enum class ExperimentalFaultCategory(
5151
HTTP_STATUS_NO_403_IF_NO_401(958, "no-403-if-no-401", "403WhenNo401", "TODO"),
5252
HTTP_STATUS_HAS_406_IF_ACCEPT(959, "has-406-if-accept", "406WhenValid", "TODO"),
5353
HTTP_STATUS_NO_304_IF_NO_GET_OR_HEAD(960, "no-304-if-no-get-or-head", "", "TODO"),
54-
HTTP_STATUS_NO_401_IF_NO_WWW_AUTHENTICATE(961, "no-401-if-no-www-authenticate", "", "TODO"),
54+
HTTP_STATUS_NO_401_IF_NO_WWW_AUTHENTICATE(961, "no-401-if-no-authenticate", "", "TODO"),
5555
HTTP_STATUS_NO_405_IF_NO_ALLOW(962, "no-405-if-no-allow", "", "TODO"),
5656
HTTP_STATUS_NO_501_IF_IMPLEMENTED(963, "no-501-if-implemented", "", "TODO"),
57-
57+
HTTP_STATUS_NO_205_IF_CONTENT(964,"no-205-if-content","", "TODO"),
58+
HTTP_STATUS_NO_426_IF_NO_UPGRADE(965,"no-426-if-no-upgrade","", "TODO"),
5859

5960
//3xx: GraphQL
6061
GQL_ERROR_FIELD(920, "Error Field", "returnedErrors",

core/src/main/kotlin/org/evomaster/core/problem/rest/oracle/HttpStatusOracle.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import org.evomaster.core.problem.rest.schema.SchemaUtils
2424
* no-201-if-get
2525
* no-201-if-patch
2626
* no-204-if-content
27+
* no-205-if-content
2728
* no-304-if-no-get-or-head
2829
* no-401-if-no-www-authenticate
2930
* no-405-if-no-allow
@@ -32,6 +33,7 @@ import org.evomaster.core.problem.rest.schema.SchemaUtils
3233
* no-401-if-no-auth (schema)
3334
* no-403-if-no-401 (schema)
3435
* has-406-if-accept (schema)
36+
* no-426-if-no-upgrade
3537
* no-501-if-implemented
3638
*
3739
*
@@ -64,10 +66,14 @@ object HttpStatusOracle {
6466
}
6567
}
6668

67-
if(status == 204 && verb == HttpVerb.GET && result.hasBody()){
69+
if(status == 204 && result.hasBody()){
6870
faults.add(ExperimentalFaultCategory.HTTP_STATUS_NO_204_IF_CONTENT)
6971
}
7072

73+
if(status == 205 && result.hasBody()){
74+
faults.add(ExperimentalFaultCategory.HTTP_STATUS_NO_205_IF_CONTENT)
75+
}
76+
7177
val bodyParam = call.parameters.filterIsInstance<BodyParam>()
7278
.firstOrNull()
7379

@@ -105,6 +111,10 @@ object HttpStatusOracle {
105111
faults.add(ExperimentalFaultCategory.HTTP_STATUS_NO_415_IF_NO_PAYLOAD)
106112
}
107113

114+
if(status == 426 && result.getHeader("upgrade").isNullOrEmpty()){
115+
faults.add(ExperimentalFaultCategory.HTTP_STATUS_NO_426_IF_NO_UPGRADE)
116+
}
117+
108118
if(status == 501){
109119
faults.add(ExperimentalFaultCategory.HTTP_STATUS_NO_501_IF_IMPLEMENTED)
110120
}

0 commit comments

Comments
 (0)