X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=enrichment-coordinator-service%2Fsrc%2Ftest%2Fjava%2Forg%2Foransc%2Fenrichment%2FApplicationTest.java;h=e92705e9d8aa6d34d77660c39a25328f14e71e0d;hb=a41966b2da6d7f74d4f486bc1492a5cbb5866583;hp=cf340764474d00ae2d606df8f8d7d0eeccab7d08;hpb=ebf3211ddd6e634ca9c0a2fec56abd1f12c7625d;p=nonrtric.git diff --git a/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java b/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java index cf340764..e92705e9 100644 --- a/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java +++ b/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java @@ -24,14 +24,13 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.assertTrue; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; +import com.google.gson.JsonParser; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import org.junit.jupiter.api.AfterEach; @@ -49,14 +48,12 @@ import org.oransc.enrichment.controllers.consumer.ConsumerEiJobInfo; import org.oransc.enrichment.controllers.producer.ProducerConsts; import org.oransc.enrichment.controllers.producer.ProducerRegistrationInfo; import org.oransc.enrichment.controllers.producer.ProducerRegistrationInfo.ProducerEiTypeRegistrationInfo; +import org.oransc.enrichment.exceptions.ServiceException; import org.oransc.enrichment.repository.EiJob; import org.oransc.enrichment.repository.EiJobs; -import org.oransc.enrichment.repository.EiProducer; import org.oransc.enrichment.repository.EiProducers; import org.oransc.enrichment.repository.EiType; import org.oransc.enrichment.repository.EiTypes; -import org.oransc.enrichment.repository.ImmutableEiJob; -import org.oransc.enrichment.repository.ImmutableEiProducer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -86,6 +83,8 @@ import reactor.test.StepVerifier; "app.webclient.trust-store=./config/truststore.jks"}) class ApplicationTest { private static final Logger logger = LoggerFactory.getLogger(ApplicationTest.class); + private final String EI_TYPE_ID = "typeId"; + private final String EI_JOB_PROPERTY = "\"property1\""; @Autowired ApplicationContext context; @@ -137,52 +136,55 @@ class ApplicationTest { } @Test - void getEiTypes() throws Exception { - addEiType("test"); + void testGetEiTypes() throws Exception { + putEiProducerWithOneType("test"); String url = ConsumerConsts.API_ROOT + "/eitypes"; String rsp = restClient().get(url).block(); assertThat(rsp).isEqualTo("[\"test\"]"); } @Test - void getEiType() throws Exception { - addEiType("test"); + void testGetEiType() throws Exception { + putEiProducerWithOneType("test"); String url = ConsumerConsts.API_ROOT + "/eitypes/test"; String rsp = restClient().get(url).block(); assertThat(rsp).contains("job_data_schema"); } @Test - void getEiTypeNotFound() throws Exception { + void testGetEiTypeNotFound() throws Exception { String url = ConsumerConsts.API_ROOT + "/eitypes/junk"; testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND, "Could not find EI type: junk"); } @Test - void getEiJobsIds() throws Exception { - addEiJob("typeId", "jobId"); + void testGetEiJobsIds() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs"; String rsp = restClient().get(url).block(); assertThat(rsp).isEqualTo("[\"jobId\"]"); } @Test - void getEiJobTypeNotFound() throws Exception { + void testGetEiJobTypeNotFound() throws Exception { String url = ConsumerConsts.API_ROOT + "/eitypes/junk/eijobs"; testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND, "Could not find EI type: junk"); } @Test - void getEiJob() throws Exception { - addEiJob("typeId", "jobId"); + void testGetEiJob() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; String rsp = restClient().get(url).block(); assertThat(rsp).contains("job_data"); } @Test - void getEiJobStatus() throws Exception { - addEiJob("typeId", "jobId"); + void testGetEiJobStatus() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId/status"; String rsp = restClient().get(url).block(); assertThat(rsp).contains("ENABLED"); @@ -191,8 +193,9 @@ class ApplicationTest { // Status TBD @Test - void deleteEiJob() throws Exception { - addEiJob("typeId", "jobId"); + void testDeleteEiJob() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); assertThat(this.eiJobs.size()).isEqualTo(1); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; restClient().delete(url).block(); @@ -204,8 +207,8 @@ class ApplicationTest { } @Test - void putEiJob() throws Exception { - addEiType("typeId"); + void testPutEiJob() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; String body = gson.toJson(eiJobInfo()); @@ -225,8 +228,21 @@ class ApplicationTest { } @Test - void getEiProducerTypes() throws Exception { - this.addEiJob("typeId", "jobId"); + void testPutEiJob_jsonSchemavalidationError() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + + String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + // The element with name "property1" is mandatory in the schema + ConsumerEiJobInfo jobInfo = new ConsumerEiJobInfo(jsonObject("{ \"XXstring\" : \"value\" }"), "owner"); + String body = gson.toJson(jobInfo); + + testErrorCode(restClient().put(url, body), HttpStatus.NOT_FOUND, "Json validation failure"); + } + + @Test + void testGetEiProducerTypes() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); String url = ProducerConsts.API_ROOT + "/eitypes"; ResponseEntity resp = restClient().getForEntity(url).block(); @@ -234,31 +250,53 @@ class ApplicationTest { } @Test - void putEiProducer() throws Exception { + void testPutEiProducer() throws Exception { String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; - String body = gson.toJson(producerEiRegistratioInfo()); + String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); ResponseEntity resp = restClient().putForEntity(url, body).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(this.eiTypes.size()).isEqualTo(1); - EiType type = this.eiTypes.getType("typeId"); + EiType type = this.eiTypes.getType(EI_TYPE_ID); assertThat(type.getProducerIds().contains("eiProducerId")).isTrue(); assertThat(this.eiProducers.size()).isEqualTo(1); - assertThat(this.eiProducers.get("eiProducerId").eiTypes().iterator().next().getId().equals("typeId")).isTrue(); + assertThat(this.eiProducers.get("eiProducerId").eiTypes().iterator().next().getId().equals(EI_TYPE_ID)) + .isTrue(); resp = restClient().putForEntity(url, body).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); + + resp = restClient().getForEntity(url).block(); + assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(resp.getBody()).isEqualTo(body); } @Test - void putEiProducerExistingJob() throws Exception { - this.addEiJob("typeId", "jobId"); + void testPutEiProducerExistingJob() throws Exception { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; - String body = gson.toJson(producerEiRegistratioInfo()); + String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); + restClient().putForEntity(url, body).block(); - ResponseEntity resp = restClient().putForEntity(url, body).block(); - assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.CREATED); + ProducerSimulatorController.TestResults simulatorResults = this.producerSimulator.getTestResults(); + await().untilAsserted(() -> assertThat(simulatorResults.jobsStarted.size()).isEqualTo(2)); + ProducerJobInfo request = simulatorResults.jobsStarted.get(0); + assertThat(request.id).isEqualTo("jobId"); + } + + @Test + void testPutProducerAndEiJob() throws Exception { + String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; + String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); + restClient().putForEntity(url, body).block(); + assertThat(this.eiTypes.size()).isEqualTo(1); + this.eiTypes.getType(EI_TYPE_ID); + + url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + body = gson.toJson(eiJobInfo()); + restClient().putForEntity(url, body).block(); ProducerSimulatorController.TestResults simulatorResults = this.producerSimulator.getTestResults(); await().untilAsserted(() -> assertThat(simulatorResults.jobsStarted.size()).isEqualTo(1)); @@ -267,13 +305,14 @@ class ApplicationTest { } @Test - void getEiJobsForProducer() { - this.addEiJob("typeId", "jobId1"); - this.addEiJob("typeId", "jobId2"); + void testGetEiJobsForProducer() throws JsonMappingException, JsonProcessingException, ServiceException { + putEiProducerWithOneType(EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId1"); + putEiJob(EI_TYPE_ID, "jobId2"); // PUT a consumer String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; - String body = gson.toJson(producerEiRegistratioInfo()); + String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); restClient().putForEntity(url, body).block(); url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId/eijobs"; @@ -281,77 +320,95 @@ class ApplicationTest { assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); ProducerJobInfo[] parsedResp = gson.fromJson(resp.getBody(), ProducerJobInfo[].class); - assertThat(parsedResp[0].typeId).isEqualTo("typeId"); - assertThat(parsedResp[1].typeId).isEqualTo("typeId"); + assertThat(parsedResp[0].typeId).isEqualTo(EI_TYPE_ID); + assertThat(parsedResp[1].typeId).isEqualTo(EI_TYPE_ID); } @Test - void deleteEiProducer() throws Exception { + void testDeleteEiProducer() throws Exception { String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; String url2 = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId2"; - String body = gson.toJson(producerEiRegistratioInfo()); + String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); restClient().putForEntity(url, body).block(); restClient().putForEntity(url2, body).block(); assertThat(this.eiProducers.size()).isEqualTo(2); - EiType type = this.eiTypes.getType("typeId"); + EiType type = this.eiTypes.getType(EI_TYPE_ID); assertThat(type.getProducerIds().contains("eiProducerId")).isTrue(); assertThat(type.getProducerIds().contains("eiProducerId2")).isTrue(); restClient().deleteForEntity(url).block(); assertThat(this.eiProducers.size()).isEqualTo(1); - assertThat(this.eiTypes.getType("typeId").getProducerIds().contains("eiProducerId")).isFalse(); + assertThat(this.eiTypes.getType(EI_TYPE_ID).getProducerIds().contains("eiProducerId")).isFalse(); restClient().deleteForEntity(url2).block(); assertThat(this.eiProducers.size()).isEqualTo(0); assertThat(this.eiTypes.size()).isEqualTo(0); } - ProducerEiTypeRegistrationInfo producerEiTypeRegistrationInfo() { - return new ProducerEiTypeRegistrationInfo(jsonObject(), "typeId"); + ProducerEiTypeRegistrationInfo producerEiTypeRegistrationInfo(String typeId) + throws JsonMappingException, JsonProcessingException { + return new ProducerEiTypeRegistrationInfo(jsonSchemaObject(), typeId); } - ProducerRegistrationInfo producerEiRegistratioInfo() { + ProducerRegistrationInfo producerEiRegistratioInfo(String typeId) + throws JsonMappingException, JsonProcessingException { Collection types = new ArrayList<>(); - types.add(producerEiTypeRegistrationInfo()); + types.add(producerEiTypeRegistrationInfo(typeId)); return new ProducerRegistrationInfo(types, baseUrl() + ProducerSimulatorController.JOB_CREATED_URL, baseUrl() + ProducerSimulatorController.JOB_DELETED_URL); } - ConsumerEiJobInfo eiJobInfo() { + ConsumerEiJobInfo eiJobInfo() throws JsonMappingException, JsonProcessingException { return new ConsumerEiJobInfo(jsonObject(), "owner"); } - JsonObject jsonObject() { - JsonObject jsonObj = new JsonObject(); - JsonElement e = new JsonPrimitive(111); - jsonObj.add("param", e); - return jsonObj; + Object jsonObject(String json) { + try { + return JsonParser.parseString(json).getAsJsonObject(); + } catch (Exception e) { + throw new NullPointerException(e.toString()); + } } - private EiJob addEiJob(String typeId, String jobId) { - EiType type = addEiType(typeId); - EiJob job = ImmutableEiJob.builder() // - .id(jobId) // - .type(type) // - .owner("owner") // - .jobData(jsonObject()) // - .build(); - this.eiJobs.put(job); - return job; - } - - private EiType addEiType(String typeId) { - EiType eiType = new EiType(typeId, jsonObject()); - this.eiTypes.put(eiType); // - EiProducer producer = ImmutableEiProducer.builder() // - .id("producerId") // - .eiTypes(Arrays.asList(eiType)) // - .jobCreationCallbackUrl(baseUrl() + ProducerSimulatorController.JOB_CREATED_URL) // - .jobDeletionCallbackUrl(baseUrl() + ProducerSimulatorController.JOB_DELETED_URL) // - .build(); - this.eiProducers.put(producer); - eiType.addProducer(producer); - return eiType; + Object jsonSchemaObject() { + // a json schema with one mandatory property named "string" + String schemaStr = "{" // + + "\"$schema\": \"http://json-schema.org/draft-04/schema#\"," // + + "\"type\": \"object\"," // + + "\"properties\": {" // + + EI_JOB_PROPERTY + " : {" // + + " \"type\": \"string\"" // + + " }" // + + "}," // + + "\"required\": [" // + + EI_JOB_PROPERTY // + + "]" // + + "}"; // + return jsonObject(schemaStr); + } + + Object jsonObject() { + return jsonObject("{ " + EI_JOB_PROPERTY + " : \"value\" }"); + } + + private EiJob putEiJob(String eiTypeId, String jobId) + throws JsonMappingException, JsonProcessingException, ServiceException { + + String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/" + jobId; + String body = gson.toJson(eiJobInfo()); + restClient().putForEntity(url, body).block(); + + return this.eiJobs.getJob(jobId); + } + + private EiType putEiProducerWithOneType(String eiTypeId) + throws JsonMappingException, JsonProcessingException, ServiceException { + String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; + String body = gson.toJson(producerEiRegistratioInfo(eiTypeId)); + + restClient().putForEntity(url, body).block(); + assertThat(this.eiTypes.size()).isEqualTo(1); + return this.eiTypes.getType(eiTypeId); } private String baseUrl() {