diff options
author | Jozsef Csongvai <jozsef.csongvai@bell.ca> | 2022-10-26 00:29:13 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2022-10-26 00:29:13 +0000 |
commit | 5b5a9933c7a3a56101f34b48ed40e4e4dcf43e8d (patch) | |
tree | 2287478b1cfcedc1a18983ce0cf55885e259fdfd | |
parent | 5d364b5d8d994818597c4bd7b22b1f4fe01c2847 (diff) | |
parent | 3920536083e753e84faafab9887e4a3f5f36af3d (diff) |
Merge "UatExecutor does not support complex test scenarios"1.4.1
3 files changed, 107 insertions, 4 deletions
diff --git a/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonMatcher.kt b/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonMatcher.kt new file mode 100644 index 000000000..995b19c41 --- /dev/null +++ b/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonMatcher.kt @@ -0,0 +1,26 @@ +package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils + +import org.mockito.ArgumentMatcher +import org.skyscreamer.jsonassert.JSONAssert +import org.skyscreamer.jsonassert.JSONCompareMode + +class JsonMatcher(val expectedJson: String?) : ArgumentMatcher<String> { + + override fun matches(actualJson: String?): Boolean { + if (expectedJson == null) { + return actualJson == null + } else if (actualJson.isNullOrEmpty() && (expectedJson.isEmpty() || expectedJson.equals("null"))) { + // null, "" and "null" means the same here + return true + } else if (!actualJson.isNullOrEmpty() && expectedJson.isNotEmpty()) { + return try { + JSONAssert.assertEquals("", expectedJson, actualJson, JSONCompareMode.LENIENT) + true + } catch (e: AssertionError) { + false + } + } else { + return false + } + } +} diff --git a/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt b/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt index b97dbf7bb..45677fac1 100644 --- a/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt +++ b/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt @@ -154,7 +154,7 @@ open class UatExecutor( verify(mockClient, evalVerificationMode(expectation.times)).exchangeResource( eq(request.method), eq(request.path), - argThat { assertJsonEquals(request.body, this) }, + any(), argThat(RequiredMapEntriesMatcher(request.headers)) ) } @@ -202,7 +202,7 @@ open class UatExecutor( restClient.exchangeResource( eq(expectation.request.method), eq(expectation.request.path), - any(), + argThat(JsonMatcher(expectation.request.body.toString())), any() ) ) @@ -324,8 +324,11 @@ open class UatExecutor( override fun getInstance(selector: String, service: BlueprintWebClientService): BlueprintWebClientService { var spiedService = spies[selector] - if (spiedService != null) + if (spiedService != null) { + // inject the service here as realService: needed for "stateful services" (e.g. holding a session token) + spiedService.realService = service return spiedService + } spiedService = SpyService(mapper, selector, service) spies[selector] = spiedService @@ -339,7 +342,7 @@ open class UatExecutor( open class SpyService( private val mapper: ObjectMapper, val selector: String, - private val realService: BlueprintWebClientService + var realService: BlueprintWebClientService ) : BlueprintWebClientService by realService { diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonMatcherTest.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonMatcherTest.kt new file mode 100644 index 000000000..9179176f9 --- /dev/null +++ b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonMatcherTest.kt @@ -0,0 +1,74 @@ +package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class JsonMatcherTest { + @Test + fun `matches easy case`() { + val expected = """ + { + "a": "b" + } + """.trimIndent() + val actual = """ + { + "a": "b" + } + """.trimIndent() + assertTrue(JsonMatcher(expected).matches(actual)) + } + + @Test + fun `matches fails easy case`() { + val expected = """ + { + "a": "b" + } + """.trimIndent() + val actual = """ + { + "a": "c" + } + """.trimIndent() + assertFalse(JsonMatcher(expected).matches(actual)) + } + + @Test + fun `matches easy case (actual is lenient aka Extensible)`() { + val expected = """ + { + "a": "b" + } + """.trimIndent() + val actual = """ + { + "a": "b", + "c": "d" + } + """.trimIndent() + assertTrue(JsonMatcher(expected).matches(actual)) + + assertFalse(JsonMatcher(actual).matches(expected)) + } + + @Test + fun `matches null`() { + assertTrue(JsonMatcher(null).matches(null)) + } + + @Test + fun `matches null and "null"`() { + val expected: String? = null + val actual: String? = null + assertTrue(JsonMatcher("null").matches(null)) + } + + @Test + fun `matches ""`() { + val expected: String? = null + val actual: String? = null + assertTrue(JsonMatcher("").matches("")) + } +} |