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=9a731e6cbe02e857778f9f223bb66b0d5465ecef;hb=6a1eb6e2a6538decc54f5348fcb1589f5b829e68;hp=e92705e9d8aa6d34d77660c39a25328f14e71e0d;hpb=a41966b2da6d7f74d4f486bc1492a5cbb5866583;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 e92705e9..9a731e6c 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 @@ -45,6 +45,7 @@ import org.oransc.enrichment.configuration.WebClientConfig; import org.oransc.enrichment.controller.ProducerSimulatorController; import org.oransc.enrichment.controllers.consumer.ConsumerConsts; import org.oransc.enrichment.controllers.consumer.ConsumerEiJobInfo; +import org.oransc.enrichment.controllers.consumer.ConsumerEiTypeInfo; import org.oransc.enrichment.controllers.producer.ProducerConsts; import org.oransc.enrichment.controllers.producer.ProducerRegistrationInfo; import org.oransc.enrichment.controllers.producer.ProducerRegistrationInfo.ProducerEiTypeRegistrationInfo; @@ -54,8 +55,6 @@ import org.oransc.enrichment.repository.EiJobs; import org.oransc.enrichment.repository.EiProducers; import org.oransc.enrichment.repository.EiType; import org.oransc.enrichment.repository.EiTypes; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; @@ -82,8 +81,8 @@ import reactor.test.StepVerifier; "server.ssl.key-store=./config/keystore.jks", // "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_PRODUCER_ID = "producerId"; private final String EI_JOB_PROPERTY = "\"property1\""; @Autowired @@ -137,7 +136,7 @@ class ApplicationTest { @Test void testGetEiTypes() throws Exception { - putEiProducerWithOneType("test"); + putEiProducerWithOneType(EI_PRODUCER_ID, "test"); String url = ConsumerConsts.API_ROOT + "/eitypes"; String rsp = restClient().get(url).block(); assertThat(rsp).isEqualTo("[\"test\"]"); @@ -145,10 +144,11 @@ class ApplicationTest { @Test void testGetEiType() throws Exception { - putEiProducerWithOneType("test"); + putEiProducerWithOneType(EI_PRODUCER_ID, "test"); String url = ConsumerConsts.API_ROOT + "/eitypes/test"; String rsp = restClient().get(url).block(); - assertThat(rsp).contains("job_data_schema"); + ConsumerEiTypeInfo info = gson.fromJson(rsp, ConsumerEiTypeInfo.class); + assertThat(info.jobParametersSchema).isNotNull(); } @Test @@ -159,7 +159,7 @@ class ApplicationTest { @Test void testGetEiJobsIds() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId"); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs"; String rsp = restClient().get(url).block(); @@ -174,16 +174,24 @@ class ApplicationTest { @Test void testGetEiJob() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, 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"); + ConsumerEiJobInfo info = gson.fromJson(rsp, ConsumerEiJobInfo.class); + assertThat(info.owner).isEqualTo("owner"); + } + + @Test + void testGetEiJobNotFound() throws Exception { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/junk"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND, "Could not find EI job: junk"); } @Test void testGetEiJobStatus() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId"); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId/status"; String rsp = restClient().get(url).block(); @@ -194,21 +202,30 @@ class ApplicationTest { @Test void testDeleteEiJob() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, 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(); - assertThat(this.eiJobs.size()).isEqualTo(0); + assertThat(this.eiJobs.size()).isZero(); ProducerSimulatorController.TestResults simulatorResults = this.producerSimulator.getTestResults(); await().untilAsserted(() -> assertThat(simulatorResults.jobsStopped.size()).isEqualTo(1)); assertThat(simulatorResults.jobsStopped.get(0).id).isEqualTo("jobId"); } + @Test + void testDeleteEiJobNotFound() throws Exception { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/junk"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND, "Could not find EI job: junk"); + } + @Test void testPutEiJob() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + // Test that one producer accepting a job is enough + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + putEiProducerWithOneTypeRejecting("simulateProducerError", EI_TYPE_ID); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; String body = gson.toJson(eiJobInfo()); @@ -221,32 +238,77 @@ class ApplicationTest { ProducerJobInfo request = simulatorResults.jobsStarted.get(0); assertThat(request.id).isEqualTo("jobId"); + assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(1); + resp = restClient().putForEntity(url, body).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); EiJob job = this.eiJobs.getJob("jobId"); assertThat(job.owner()).isEqualTo("owner"); } + @Test + void putEiProducerWithOneType_rejecting() throws JsonMappingException, JsonProcessingException, ServiceException { + putEiProducerWithOneTypeRejecting("simulateProducerError", EI_TYPE_ID); + String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + String body = gson.toJson(eiJobInfo()); + testErrorCode(restClient().put(url, body), HttpStatus.CONFLICT, "Job not accepted by any producers"); + + ProducerSimulatorController.TestResults simulatorResults = this.producerSimulator.getTestResults(); + assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(1); + } + @Test void testPutEiJob_jsonSchemavalidationError() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, 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"); + ConsumerEiJobInfo jobInfo = + new ConsumerEiJobInfo(jsonObject("{ \"XXstring\" : \"value\" }"), "owner", "targetUri"); String body = gson.toJson(jobInfo); - testErrorCode(restClient().put(url, body), HttpStatus.NOT_FOUND, "Json validation failure"); + testErrorCode(restClient().put(url, body), HttpStatus.CONFLICT, "Json validation failure"); } @Test void testGetEiProducerTypes() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + final String EI_TYPE_ID_2 = EI_TYPE_ID + "_2"; + putEiProducerWithOneType("producer1", EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId"); + putEiProducerWithOneType("producer2", EI_TYPE_ID_2); + putEiJob(EI_TYPE_ID_2, "jobId2"); String url = ProducerConsts.API_ROOT + "/eitypes"; ResponseEntity resp = restClient().getForEntity(url).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(resp.getBody()).contains(EI_TYPE_ID); + assertThat(resp.getBody()).contains(EI_TYPE_ID_2); + } + + @Test + void testReplacingEiProducerTypes() throws Exception { + final String REPLACED_TYPE_ID = "replaced"; + putEiProducerWithOneType(EI_PRODUCER_ID, REPLACED_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + + String url = ProducerConsts.API_ROOT + "/eitypes"; + + ResponseEntity resp = restClient().getForEntity(url).block(); + assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(resp.getBody()).contains(EI_TYPE_ID); + assertThat(resp.getBody()).doesNotContain(REPLACED_TYPE_ID); + } + + @Test + void testChangingEiTypeGetRejected() throws Exception { + putEiProducerWithOneType("producer1", "typeId1"); + putEiProducerWithOneType("producer2", "typeId2"); + putEiJob("typeId1", "jobId"); + + String url = ConsumerConsts.API_ROOT + "/eitypes/typeId2/eijobs/jobId"; + String body = gson.toJson(eiJobInfo()); + testErrorCode(restClient().put(url, body), HttpStatus.CONFLICT, + "Not allowed to change type for existing EI job"); } @Test @@ -259,10 +321,9 @@ class ApplicationTest { assertThat(this.eiTypes.size()).isEqualTo(1); EiType type = this.eiTypes.getType(EI_TYPE_ID); - assertThat(type.getProducerIds().contains("eiProducerId")).isTrue(); + assertThat(type.getProducerIds()).contains("eiProducerId"); assertThat(this.eiProducers.size()).isEqualTo(1); - assertThat(this.eiProducers.get("eiProducerId").eiTypes().iterator().next().getId().equals(EI_TYPE_ID)) - .isTrue(); + assertThat(this.eiProducers.get("eiProducerId").eiTypes().iterator().next().getId()).isEqualTo(EI_TYPE_ID); resp = restClient().putForEntity(url, body).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -274,7 +335,7 @@ class ApplicationTest { @Test void testPutEiProducerExistingJob() throws Exception { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId"); String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); @@ -306,7 +367,7 @@ class ApplicationTest { @Test void testGetEiJobsForProducer() throws JsonMappingException, JsonProcessingException, ServiceException { - putEiProducerWithOneType(EI_TYPE_ID); + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId1"); putEiJob(EI_TYPE_ID, "jobId2"); @@ -326,23 +387,43 @@ class ApplicationTest { @Test void testDeleteEiProducer() throws Exception { - String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; - String url2 = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId2"; - String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); - restClient().putForEntity(url, body).block(); - restClient().putForEntity(url2, body).block(); + putEiProducerWithOneType("eiProducerId", EI_TYPE_ID); + putEiProducerWithOneType("eiProducerId2", EI_TYPE_ID); + assertThat(this.eiProducers.size()).isEqualTo(2); EiType type = this.eiTypes.getType(EI_TYPE_ID); - assertThat(type.getProducerIds().contains("eiProducerId")).isTrue(); - assertThat(type.getProducerIds().contains("eiProducerId2")).isTrue(); + assertThat(type.getProducerIds()).contains("eiProducerId"); + assertThat(type.getProducerIds()).contains("eiProducerId2"); + putEiJob(EI_TYPE_ID, "jobId"); + assertThat(this.eiJobs.size()).isEqualTo(1); + String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; restClient().deleteForEntity(url).block(); assertThat(this.eiProducers.size()).isEqualTo(1); - assertThat(this.eiTypes.getType(EI_TYPE_ID).getProducerIds().contains("eiProducerId")).isFalse(); + assertThat(this.eiTypes.getType(EI_TYPE_ID).getProducerIds()).doesNotContain("eiProducerId"); + assertThat(this.eiJobs.size()).isEqualTo(1); + String url2 = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId2"; restClient().deleteForEntity(url2).block(); - assertThat(this.eiProducers.size()).isEqualTo(0); - assertThat(this.eiTypes.size()).isEqualTo(0); + assertThat(this.eiProducers.size()).isZero(); + assertThat(this.eiTypes.size()).isZero(); + assertThat(this.eiJobs.size()).isZero(); + } + + @Test + void testGetProducerEiType() throws JsonMappingException, JsonProcessingException, ServiceException { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + String url = ProducerConsts.API_ROOT + "/eitypes/" + EI_TYPE_ID; + ResponseEntity resp = restClient().getForEntity(url).block(); + assertThat(resp.getBody()).contains(EI_PRODUCER_ID); + } + + @Test + void testGetProducerIdentifiers() throws JsonMappingException, JsonProcessingException, ServiceException { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + String url = ProducerConsts.API_ROOT + "/eiproducers"; + ResponseEntity resp = restClient().getForEntity(url).block(); + assertThat(resp.getBody()).contains(EI_PRODUCER_ID); } ProducerEiTypeRegistrationInfo producerEiTypeRegistrationInfo(String typeId) @@ -350,6 +431,14 @@ class ApplicationTest { return new ProducerEiTypeRegistrationInfo(jsonSchemaObject(), typeId); } + ProducerRegistrationInfo producerEiRegistratioInfoRejecting(String typeId) + throws JsonMappingException, JsonProcessingException { + Collection types = new ArrayList<>(); + types.add(producerEiTypeRegistrationInfo(typeId)); + return new ProducerRegistrationInfo(types, baseUrl() + ProducerSimulatorController.JOB_CREATED_ERROR_URL, + baseUrl() + ProducerSimulatorController.JOB_DELETED_ERROR_URL); + } + ProducerRegistrationInfo producerEiRegistratioInfo(String typeId) throws JsonMappingException, JsonProcessingException { Collection types = new ArrayList<>(); @@ -359,7 +448,7 @@ class ApplicationTest { } ConsumerEiJobInfo eiJobInfo() throws JsonMappingException, JsonProcessingException { - return new ConsumerEiJobInfo(jsonObject(), "owner"); + return new ConsumerEiJobInfo(jsonObject(), "owner", "targetUri"); } Object jsonObject(String json) { @@ -394,20 +483,28 @@ class ApplicationTest { private EiJob putEiJob(String eiTypeId, String jobId) throws JsonMappingException, JsonProcessingException, ServiceException { - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/" + jobId; + String url = ConsumerConsts.API_ROOT + "/eitypes/" + eiTypeId + "/eijobs/" + jobId; String body = gson.toJson(eiJobInfo()); restClient().putForEntity(url, body).block(); return this.eiJobs.getJob(jobId); } - private EiType putEiProducerWithOneType(String eiTypeId) + private EiType putEiProducerWithOneTypeRejecting(String producerId, String eiTypeId) throws JsonMappingException, JsonProcessingException, ServiceException { - String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; + String url = ProducerConsts.API_ROOT + "/eiproducers/" + producerId; + String body = gson.toJson(producerEiRegistratioInfoRejecting(eiTypeId)); + + restClient().putForEntity(url, body).block(); + return this.eiTypes.getType(eiTypeId); + } + + private EiType putEiProducerWithOneType(String producerId, String eiTypeId) + throws JsonMappingException, JsonProcessingException, ServiceException { + String url = ProducerConsts.API_ROOT + "/eiproducers/" + producerId; String body = gson.toJson(producerEiRegistratioInfo(eiTypeId)); restClient().putForEntity(url, body).block(); - assertThat(this.eiTypes.size()).isEqualTo(1); return this.eiTypes.getType(eiTypeId); }