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=68271f8f3cde706e59122882765699bb7b007d7f;hb=3ac4de0524650cea3d17f9ad5ff7e9cf5dffbe83;hp=d8a0b32eb84f8893dcc561107fd1345dbf1b7327;hpb=b41c6e789ed381a31e2bd40d98e608d1d2dced50;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 d8a0b32e..68271f8f 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 @@ -1,9 +1,9 @@ /*- * ========================LICENSE_START================================= - * ONAP : ccsdk oran - * ====================================================================== - * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. - * ====================================================================== + * O-RAN-SC + * %% + * Copyright (C) 2020 Nordix Foundation + * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -33,6 +33,7 @@ import com.google.gson.JsonParser; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; +import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.Collection; @@ -42,15 +43,18 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.oransc.enrichment.clients.AsyncRestClient; -import org.oransc.enrichment.clients.ProducerJobInfo; +import org.oransc.enrichment.clients.AsyncRestClientFactory; import org.oransc.enrichment.configuration.ApplicationConfig; import org.oransc.enrichment.configuration.ImmutableWebClientConfig; import org.oransc.enrichment.configuration.WebClientConfig; +import org.oransc.enrichment.controller.ConsumerSimulatorController; 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.ConsumerEiJobStatus; import org.oransc.enrichment.controllers.consumer.ConsumerEiTypeInfo; import org.oransc.enrichment.controllers.producer.ProducerConsts; +import org.oransc.enrichment.controllers.producer.ProducerJobInfo; import org.oransc.enrichment.controllers.producer.ProducerRegistrationInfo; import org.oransc.enrichment.controllers.producer.ProducerRegistrationInfo.ProducerEiTypeRegistrationInfo; import org.oransc.enrichment.controllers.producer.ProducerStatusInfo; @@ -61,6 +65,8 @@ import org.oransc.enrichment.repository.EiProducers; import org.oransc.enrichment.repository.EiType; import org.oransc.enrichment.repository.EiTypes; import org.oransc.enrichment.tasks.ProducerSupervision; +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,13 +88,18 @@ import reactor.test.StepVerifier; @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@TestPropertySource(properties = { // +@TestPropertySource( + properties = { // "server.ssl.key-store=./config/keystore.jks", // - "app.webclient.trust-store=./config/truststore.jks" }) + "app.webclient.trust-store=./config/truststore.jks", // + "app.vardata-directory=./target"}) class ApplicationTest { + private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private final String EI_TYPE_ID = "typeId"; private final String EI_PRODUCER_ID = "producerId"; private final String EI_JOB_PROPERTY = "\"property1\""; + private final String EI_JOB_ID = "jobId"; @Autowired ApplicationContext context; @@ -108,12 +119,13 @@ class ApplicationTest { @Autowired ProducerSimulatorController producerSimulator; + @Autowired + ConsumerSimulatorController consumerSimulator; + @Autowired ProducerSupervision producerSupervision; - private static Gson gson = new GsonBuilder() // - .serializeNulls() // - .create(); // + private static Gson gson = new GsonBuilder().create(); /** * Overrides the BeanFactory. @@ -135,6 +147,7 @@ class ApplicationTest { this.eiTypes.clear(); this.eiProducers.clear(); this.producerSimulator.getTestResults().reset(); + this.consumerSimulator.getTestResults().reset(); } @AfterEach @@ -162,13 +175,20 @@ class ApplicationTest { assertThat(rsp).isEqualTo("[\"test\"]"); } + @Test + void testGetEiTypesEmpty() throws Exception { + String url = ConsumerConsts.API_ROOT + "/eitypes"; + String rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo("[]"); + } + @Test void testGetEiType() throws Exception { putEiProducerWithOneType(EI_PRODUCER_ID, "test"); String url = ConsumerConsts.API_ROOT + "/eitypes/test"; String rsp = restClient().get(url).block(); ConsumerEiTypeInfo info = gson.fromJson(rsp, ConsumerEiTypeInfo.class); - assertThat(info.jobParametersSchema).isNotNull(); + assertThat(info).isNotNull(); } @Test @@ -181,31 +201,47 @@ class ApplicationTest { void testGetEiJobsIds() throws Exception { putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId"); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs"; + final String JOB_ID_JSON = "[\"jobId\"]"; + String url = ConsumerConsts.API_ROOT + "/eijobs?eiTypeId=typeId"; String rsp = restClient().get(url).block(); - assertThat(rsp).isEqualTo("[\"jobId\"]"); - } + assertThat(rsp).isEqualTo(JOB_ID_JSON); - @Test - 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"); + url = ConsumerConsts.API_ROOT + "/eijobs?owner=owner"; + rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo(JOB_ID_JSON); + + url = ConsumerConsts.API_ROOT + "/eijobs?owner=JUNK"; + rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo("[]"); + + url = ConsumerConsts.API_ROOT + "/eijobs"; + rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo(JOB_ID_JSON); + + url = ConsumerConsts.API_ROOT + "/eijobs?eiTypeId=typeId&&owner=owner"; + rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo(JOB_ID_JSON); + + url = ConsumerConsts.API_ROOT + "/eijobs?eiTypeId=JUNK"; + rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo("[]"); } @Test void testGetEiJob() throws Exception { putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiJob(EI_TYPE_ID, "jobId"); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + String url = ConsumerConsts.API_ROOT + "/eijobs/jobId"; String rsp = restClient().get(url).block(); ConsumerEiJobInfo info = gson.fromJson(rsp, ConsumerEiJobInfo.class); assertThat(info.owner).isEqualTo("owner"); + assertThat(info.eiTypeId).isEqualTo(EI_TYPE_ID); } @Test void testGetEiJobNotFound() throws Exception { putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/junk"; + String url = ConsumerConsts.API_ROOT + "/eijobs/junk"; testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND, "Could not find EI job: junk"); } @@ -213,31 +249,28 @@ class ApplicationTest { void testGetEiJobStatus() throws Exception { 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(); - assertThat(rsp).contains("ENABLED"); - } - // Status TBD + verifyJobStatus("jobId", "ENABLED"); + } @Test void testDeleteEiJob() throws Exception { 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"; + String url = ConsumerConsts.API_ROOT + "/eijobs/jobId"; restClient().delete(url).block(); 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"); + assertThat(simulatorResults.jobsStopped.get(0)).isEqualTo("jobId"); } @Test void testDeleteEiJobNotFound() throws Exception { putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/junk"; + String url = ConsumerConsts.API_ROOT + "/eijobs/junk"; testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND, "Could not find EI job: junk"); } @@ -247,7 +280,7 @@ class ApplicationTest { putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); putEiProducerWithOneTypeRejecting("simulateProducerError", EI_TYPE_ID); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + String url = ConsumerConsts.API_ROOT + "/eijobs/jobId"; String body = gson.toJson(eiJobInfo()); ResponseEntity resp = restClient().putForEntity(url, body).block(); assertThat(this.eiJobs.size()).isEqualTo(1); @@ -258,33 +291,37 @@ class ApplicationTest { ProducerJobInfo request = simulatorResults.jobsStarted.get(0); assertThat(request.id).isEqualTo("jobId"); - assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(1); + // One retry --> two calls + await().untilAsserted(() -> assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(2)); + assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(2); resp = restClient().putForEntity(url, body).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); EiJob job = this.eiJobs.getJob("jobId"); - assertThat(job.owner()).isEqualTo("owner"); + assertThat(job.getOwner()).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 url = ConsumerConsts.API_ROOT + "/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); + // There is one retry -> 2 calls + await().untilAsserted(() -> assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(2)); + assertThat(simulatorResults.noOfRejectedCreate).isEqualTo(2); } @Test void testPutEiJob_jsonSchemavalidationError() throws Exception { putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + String url = ConsumerConsts.API_ROOT + "/eijobs/jobId"; // The element with name "property1" is mandatory in the schema - ConsumerEiJobInfo jobInfo = new ConsumerEiJobInfo(jsonObject("{ \"XXstring\" : \"value\" }"), "owner", - "targetUri"); + ConsumerEiJobInfo jobInfo = new ConsumerEiJobInfo("typeId", jsonObject("{ \"XXstring\" : \"value\" }"), "owner", + "targetUri", "jobStatusUrl"); String body = gson.toJson(jobInfo); testErrorCode(restClient().put(url, body), HttpStatus.CONFLICT, "Json validation failure"); @@ -325,10 +362,10 @@ class ApplicationTest { putEiProducerWithOneType("producer2", "typeId2"); putEiJob("typeId1", "jobId"); - String url = ConsumerConsts.API_ROOT + "/eitypes/typeId2/eijobs/jobId"; - String body = gson.toJson(eiJobInfo()); + String url = ConsumerConsts.API_ROOT + "/eijobs/jobId"; + String body = gson.toJson(eiJobInfo("typeId2", "jobId")); testErrorCode(restClient().put(url, body), HttpStatus.CONFLICT, - "Not allowed to change type for existing EI job"); + "Not allowed to change type for existing EI job"); } @Test @@ -375,7 +412,7 @@ class ApplicationTest { assertThat(this.eiTypes.size()).isEqualTo(1); this.eiTypes.getType(EI_TYPE_ID); - url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; + url = ConsumerConsts.API_ROOT + "/eijobs/jobId"; body = gson.toJson(eiJobInfo()); restClient().putForEntity(url, body).block(); @@ -417,17 +454,59 @@ class ApplicationTest { putEiJob(EI_TYPE_ID, "jobId"); assertThat(this.eiJobs.size()).isEqualTo(1); - String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; - restClient().deleteForEntity(url).block(); + deleteEiProducer("eiProducerId"); assertThat(this.eiProducers.size()).isEqualTo(1); assertThat(this.eiTypes.getType(EI_TYPE_ID).getProducerIds()).doesNotContain("eiProducerId"); - assertThat(this.eiJobs.size()).isEqualTo(1); + verifyJobStatus("jobId", "ENABLED"); - String url2 = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId2"; - restClient().deleteForEntity(url2).block(); + deleteEiProducer("eiProducerId2"); assertThat(this.eiProducers.size()).isZero(); assertThat(this.eiTypes.size()).isZero(); - assertThat(this.eiJobs.size()).isZero(); + verifyJobStatus("jobId", "DISABLED"); + } + + @Test + void testJobStatusNotifications() throws JsonMappingException, JsonProcessingException, ServiceException { + ConsumerSimulatorController.TestResults consumerCalls = this.consumerSimulator.getTestResults(); + ProducerSimulatorController.TestResults producerCalls = this.producerSimulator.getTestResults(); + + putEiProducerWithOneType("eiProducerId", EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId"); + putEiProducerWithOneType("eiProducerId2", EI_TYPE_ID); + await().untilAsserted(() -> assertThat(producerCalls.jobsStarted.size()).isEqualTo(2)); + + deleteEiProducer("eiProducerId2"); + assertThat(this.eiTypes.size()).isEqualTo(1); // The type remains, one producer left + deleteEiProducer("eiProducerId"); + assertThat(this.eiTypes.size()).isZero(); // The type is gone + assertThat(this.eiJobs.size()).isEqualTo(1); // The job remains + await().untilAsserted(() -> assertThat(consumerCalls.status.size()).isEqualTo(1)); + assertThat(consumerCalls.status.get(0).state).isEqualTo(ConsumerEiJobStatus.EiJobStatusValues.DISABLED); + + putEiProducerWithOneType("eiProducerId", EI_TYPE_ID); + await().untilAsserted(() -> assertThat(consumerCalls.status.size()).isEqualTo(2)); + assertThat(consumerCalls.status.get(1).state).isEqualTo(ConsumerEiJobStatus.EiJobStatusValues.ENABLED); + } + + @Test + void testJobStatusNotifications2() throws JsonMappingException, JsonProcessingException, ServiceException { + // Test replacing a producer with new and removed types + + // Create a job + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + putEiJob(EI_TYPE_ID, EI_JOB_ID); + + // change the type for the producer, the EI_TYPE_ID is deleted + putEiProducerWithOneType(EI_PRODUCER_ID, "junk"); + verifyJobStatus(EI_JOB_ID, "DISABLED"); + ConsumerSimulatorController.TestResults consumerCalls = this.consumerSimulator.getTestResults(); + await().untilAsserted(() -> assertThat(consumerCalls.status.size()).isEqualTo(1)); + assertThat(consumerCalls.status.get(0).state).isEqualTo(ConsumerEiJobStatus.EiJobStatusValues.DISABLED); + + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + verifyJobStatus(EI_JOB_ID, "ENABLED"); + await().untilAsserted(() -> assertThat(consumerCalls.status.size()).isEqualTo(2)); + assertThat(consumerCalls.status.get(1).state).isEqualTo(ConsumerEiJobStatus.EiJobStatusValues.ENABLED); } @Test @@ -446,31 +525,40 @@ class ApplicationTest { assertThat(resp.getBody()).contains(EI_PRODUCER_ID); } - private void assertProducerOpState(String producerId, - ProducerStatusInfo.OperationalState expectedOperationalState) { - String statusUrl = ProducerConsts.API_ROOT + "/eiproducers/" + producerId + "/status"; - ResponseEntity resp = restClient().getForEntity(statusUrl).block(); - ProducerStatusInfo statusInfo = gson.fromJson(resp.getBody(), ProducerStatusInfo.class); - assertThat(statusInfo.opState).isEqualTo(expectedOperationalState); - } - @Test void testProducerSupervision() throws JsonMappingException, JsonProcessingException, ServiceException { putEiProducerWithOneTypeRejecting("simulateProducerError", EI_TYPE_ID); + { + // Create a job + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + putEiJob(EI_TYPE_ID, EI_JOB_ID); + deleteEiProducer(EI_PRODUCER_ID); + } + assertThat(this.eiProducers.size()).isEqualTo(1); assertThat(this.eiTypes.size()).isEqualTo(1); assertProducerOpState("simulateProducerError", ProducerStatusInfo.OperationalState.ENABLED); this.producerSupervision.createTask().blockLast(); this.producerSupervision.createTask().blockLast(); + + // Now we have one producer that is disabled, but the job will be enabled until + // the producer/type is removed assertThat(this.eiProducers.size()).isEqualTo(1); assertProducerOpState("simulateProducerError", ProducerStatusInfo.OperationalState.DISABLED); + verifyJobStatus(EI_JOB_ID, "ENABLED"); - // After 3 failed checks, the producer shall be deregisterred + // After 3 failed checks, the producer and the type shall be deregisterred this.producerSupervision.createTask().blockLast(); assertThat(this.eiProducers.size()).isEqualTo(0); assertThat(this.eiTypes.size()).isEqualTo(0); + verifyJobStatus(EI_JOB_ID, "DISABLED"); + + // Job disabled status notification shall be received + ConsumerSimulatorController.TestResults consumerResults = this.consumerSimulator.getTestResults(); + await().untilAsserted(() -> assertThat(consumerResults.status.size()).isEqualTo(1)); + assertThat(consumerResults.status.get(0).state).isEqualTo(ConsumerEiJobStatus.EiJobStatusValues.DISABLED); } @Test @@ -483,36 +571,84 @@ class ApplicationTest { assertThat(resp.getBody()).contains("hunky dory"); } + @Test + void testEiJobDatabase() throws Exception { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + putEiJob(EI_TYPE_ID, "jobId1"); + putEiJob(EI_TYPE_ID, "jobId2"); + + assertThat(this.eiJobs.size()).isEqualTo(2); + + { + // Restore the jobs + EiJobs jobs = new EiJobs(this.applicationConfig); + jobs.restoreJobsFromDatabase(); + assertThat(jobs.size()).isEqualTo(2); + jobs.remove("jobId1"); + jobs.remove("jobId2"); + } + { + // Restore the jobs, no jobs in database + EiJobs jobs = new EiJobs(this.applicationConfig); + jobs.restoreJobsFromDatabase(); + assertThat(jobs.size()).isEqualTo(0); + } + logger.warn("Test removing a job when the db file is gone"); + this.eiJobs.remove("jobId1"); + assertThat(this.eiJobs.size()).isEqualTo(1); + } + + private void deleteEiProducer(String eiProducerId) { + String url = ProducerConsts.API_ROOT + "/eiproducers/" + eiProducerId; + restClient().deleteForEntity(url).block(); + } + + private void verifyJobStatus(String jobId, String expStatus) { + String url = ConsumerConsts.API_ROOT + "/eijobs/" + jobId + "/status"; + String rsp = restClient().get(url).block(); + assertThat(rsp).contains(expStatus); + } + + private void assertProducerOpState(String producerId, + ProducerStatusInfo.OperationalState expectedOperationalState) { + String statusUrl = ProducerConsts.API_ROOT + "/eiproducers/" + producerId + "/status"; + ResponseEntity resp = restClient().getForEntity(statusUrl).block(); + ProducerStatusInfo statusInfo = gson.fromJson(resp.getBody(), ProducerStatusInfo.class); + assertThat(statusInfo.opState).isEqualTo(expectedOperationalState); + } + ProducerEiTypeRegistrationInfo producerEiTypeRegistrationInfo(String typeId) - throws JsonMappingException, JsonProcessingException { + throws JsonMappingException, JsonProcessingException { return new ProducerEiTypeRegistrationInfo(jsonSchemaObject(), typeId); } ProducerRegistrationInfo producerEiRegistratioInfoRejecting(String typeId) - throws JsonMappingException, JsonProcessingException { + 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, - baseUrl() + ProducerSimulatorController.SUPERVISION_ERROR_URL); + baseUrl() + ProducerSimulatorController.JOB_ERROR_URL, + baseUrl() + ProducerSimulatorController.SUPERVISION_ERROR_URL); } ProducerRegistrationInfo producerEiRegistratioInfo(String typeId) - throws JsonMappingException, JsonProcessingException { + throws JsonMappingException, JsonProcessingException { Collection types = new ArrayList<>(); types.add(producerEiTypeRegistrationInfo(typeId)); return new ProducerRegistrationInfo(types, // - baseUrl() + ProducerSimulatorController.JOB_CREATED_URL, - baseUrl() + ProducerSimulatorController.JOB_DELETED_URL, - baseUrl() + ProducerSimulatorController.SUPERVISION_URL); + baseUrl() + ProducerSimulatorController.JOB_URL, baseUrl() + ProducerSimulatorController.SUPERVISION_URL); + } + + private ConsumerEiJobInfo eiJobInfo() throws JsonMappingException, JsonProcessingException { + return eiJobInfo(EI_TYPE_ID, EI_JOB_ID); } - ConsumerEiJobInfo eiJobInfo() throws JsonMappingException, JsonProcessingException { - return new ConsumerEiJobInfo(jsonObject(), "owner", "targetUri"); + ConsumerEiJobInfo eiJobInfo(String typeId, String eiJobId) throws JsonMappingException, JsonProcessingException { + return new ConsumerEiJobInfo(typeId, jsonObject(), "owner", "targetUri", + baseUrl() + ConsumerSimulatorController.getJobStatusUrl(eiJobId)); } - Object jsonObject(String json) { + private Object jsonObject(String json) { try { return JsonParser.parseString(json).getAsJsonObject(); } catch (Exception e) { @@ -520,39 +656,39 @@ class ApplicationTest { } } - Object jsonSchemaObject() { + private 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 // - + "]" // - + "}"; // + + "\"$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() { + private Object jsonObject() { return jsonObject("{ " + EI_JOB_PROPERTY + " : \"value\" }"); } private EiJob putEiJob(String eiTypeId, String jobId) - throws JsonMappingException, JsonProcessingException, ServiceException { + throws JsonMappingException, JsonProcessingException, ServiceException { - String url = ConsumerConsts.API_ROOT + "/eitypes/" + eiTypeId + "/eijobs/" + jobId; - String body = gson.toJson(eiJobInfo()); + String url = ConsumerConsts.API_ROOT + "/eijobs/" + jobId; + String body = gson.toJson(eiJobInfo(eiTypeId, jobId)); restClient().putForEntity(url, body).block(); return this.eiJobs.getJob(jobId); } private EiType putEiProducerWithOneTypeRejecting(String producerId, String eiTypeId) - throws JsonMappingException, JsonProcessingException, ServiceException { + throws JsonMappingException, JsonProcessingException, ServiceException { String url = ProducerConsts.API_ROOT + "/eiproducers/" + producerId; String body = gson.toJson(producerEiRegistratioInfoRejecting(eiTypeId)); @@ -561,7 +697,7 @@ class ApplicationTest { } private EiType putEiProducerWithOneType(String producerId, String eiTypeId) - throws JsonMappingException, JsonProcessingException, ServiceException { + throws JsonMappingException, JsonProcessingException, ServiceException { String url = ProducerConsts.API_ROOT + "/eiproducers/" + producerId; String body = gson.toJson(producerEiRegistratioInfo(eiTypeId)); @@ -576,16 +712,17 @@ class ApplicationTest { private AsyncRestClient restClient(boolean useTrustValidation) { WebClientConfig config = this.applicationConfig.getWebClientConfig(); config = ImmutableWebClientConfig.builder() // - .keyStoreType(config.keyStoreType()) // - .keyStorePassword(config.keyStorePassword()) // - .keyStore(config.keyStore()) // - .keyPassword(config.keyPassword()) // - .isTrustStoreUsed(useTrustValidation) // - .trustStore(config.trustStore()) // - .trustStorePassword(config.trustStorePassword()) // - .build(); + .keyStoreType(config.keyStoreType()) // + .keyStorePassword(config.keyStorePassword()) // + .keyStore(config.keyStore()) // + .keyPassword(config.keyPassword()) // + .isTrustStoreUsed(useTrustValidation) // + .trustStore(config.trustStore()) // + .trustStorePassword(config.trustStorePassword()) // + .build(); - return new AsyncRestClient(baseUrl(), config); + AsyncRestClientFactory restClientFactory = new AsyncRestClientFactory(config); + return restClientFactory.createRestClient(baseUrl()); } private AsyncRestClient restClient() { @@ -597,16 +734,16 @@ class ApplicationTest { } private void testErrorCode(Mono request, HttpStatus expStatus, String responseContains, - boolean expectApplicationProblemJsonMediaType) { + boolean expectApplicationProblemJsonMediaType) { StepVerifier.create(request) // - .expectSubscription() // - .expectErrorMatches( - t -> checkWebClientError(t, expStatus, responseContains, expectApplicationProblemJsonMediaType)) // - .verify(); + .expectSubscription() // + .expectErrorMatches( + t -> checkWebClientError(t, expStatus, responseContains, expectApplicationProblemJsonMediaType)) // + .verify(); } private boolean checkWebClientError(Throwable throwable, HttpStatus expStatus, String responseContains, - boolean expectApplicationProblemJsonMediaType) { + boolean expectApplicationProblemJsonMediaType) { assertTrue(throwable instanceof WebClientResponseException); WebClientResponseException responseException = (WebClientResponseException) throwable; assertThat(responseException.getStatusCode()).isEqualTo(expStatus);