diff options
author | PatrikBuhr <patrik.buhr@est.tech> | 2020-08-11 09:24:25 +0200 |
---|---|---|
committer | PatrikBuhr <patrik.buhr@est.tech> | 2020-08-20 09:21:40 +0200 |
commit | 2b2091a87d004ccc3cdd7da567a794aac4fe65ca (patch) | |
tree | a592211ab0f32b99cc4e575859826dac487db812 /a1-policy-management/src/test | |
parent | 5d0ad5f3d3158357183849ca329ac6999be6281d (diff) |
REST Style alignment for A1 Policy Management
Created a structure for support of different NBI APIs.
A version 2 is started, which introduces changes initiated by
reviews and aligns to https://opensource.zalando.com/restful-api-guidelines/#118
More alignment will be done in later commits.
Issue-ID: CCSDK-2498
Change-Id: I810ecce79b5e2462cc77a1c2e7c638fbc6d54774
Signed-off-by: PatrikBuhr <patrik.buhr@est.tech>
Diffstat (limited to 'a1-policy-management/src/test')
16 files changed, 957 insertions, 94 deletions
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTestV1.java index 1ec90e3a..971f358c 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTestV1.java @@ -49,9 +49,9 @@ import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableRicC import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableWebClientConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.WebClientConfig; -import org.onap.ccsdk.oran.a1policymanagementservice.controllers.PolicyInfo; -import org.onap.ccsdk.oran.a1policymanagementservice.controllers.ServiceRegistrationInfo; -import org.onap.ccsdk.oran.a1policymanagementservice.controllers.ServiceStatus; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v1.PolicyInfo; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v1.ServiceRegistrationInfo; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v1.ServiceStatus; import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException; import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicy; import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicyType; @@ -95,8 +95,8 @@ import reactor.util.annotation.Nullable; properties = { // "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); +class ApplicationTestV1 { + private static final Logger logger = LoggerFactory.getLogger(ApplicationTestV1.class); @Autowired ApplicationContext context; @@ -266,7 +266,8 @@ class ApplicationTest { Policy ricPolicy = ricPolicies.get(policyId); assertThat(ricPolicy.json()).isEqualTo(policy.json()); - // Both types should be in the Policy Management Service's storage after the synch + // Both types should be in the Policy Management Service's storage after the + // synch assertThat(ric1.getSupportedPolicyTypes()).hasSize(2); assertThat(ric2.getSupportedPolicyTypes()).hasSize(2); } @@ -325,8 +326,8 @@ class ApplicationTest { Policy policy = policies.getPolicy(policyInstanceId); assertThat(policy).isNotNull(); assertThat(policy.id()).isEqualTo(policyInstanceId); - assertThat(policy.ownerServiceName()).isEqualTo(serviceName); - assertThat(policy.ric().name()).isEqualTo("ric1"); + assertThat(policy.ownerServiceId()).isEqualTo(serviceName); + assertThat(policy.ric().id()).isEqualTo("ric1"); assertThat(policy.isTransient()).isTrue(); // Put a non transient policy @@ -359,7 +360,8 @@ class ApplicationTest { @Test /** - * Test that HttpStatus and body from failing REST call to A1 is passed on to the caller. + * Test that HttpStatus and body from failing REST call to A1 is passed on to + * the caller. * * @throws ServiceException */ @@ -666,10 +668,10 @@ class ApplicationTest { Policy policy = ImmutablePolicy.builder() // .id(id) // .json(jsonString()) // - .ownerServiceName(service) // + .ownerServiceId(service) // .ric(rics.getRic(ric)) // .type(addPolicyType(typeName, ric)) // - .lastModified("lastModified") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); policies.put(policy); @@ -712,29 +714,6 @@ class ApplicationTest { return "{\"servingCellNrcgi\":\"1\"}"; } - @Test - void testConcurrency() throws Exception { - final Instant startTime = Instant.now(); - List<Thread> threads = new ArrayList<>(); - a1ClientFactory.setResponseDelay(Duration.ofMillis(1)); - addRic("ric"); - addPolicyType("type1", "ric"); - addPolicyType("type2", "ric"); - - for (int i = 0; i < 10; ++i) { - Thread thread = - new Thread(new ConcurrencyTestRunnable(baseUrl(), supervision, a1ClientFactory, rics, policyTypes), - "TestThread_" + i); - thread.start(); - threads.add(thread); - } - for (Thread t : threads) { - t.join(); - } - assertThat(policies.size()).isZero(); - logger.info("Concurrency test took " + Duration.between(startTime, Instant.now())); - } - private AsyncRestClient restClient(boolean useTrustValidation) { WebClientConfig config = this.applicationConfig.getWebClientConfig(); config = ImmutableWebClientConfig.builder() // @@ -779,7 +758,7 @@ class ApplicationTest { private PolicyType createPolicyType(String policyTypeName) { return ImmutablePolicyType.builder() // - .name(policyTypeName) // + .id(policyTypeName) // .schema("{\"title\":\"" + policyTypeName + "\"}") // .build(); } @@ -804,7 +783,7 @@ class ApplicationTest { mes.add(managedElement); } RicConfig conf = ImmutableRicConfig.builder() // - .name(ricName) // + .ricId(ricName) // .baseUrl(ricName) // .managedElementIds(mes) // .controllerName("") // diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTestV2.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTestV2.java new file mode 100644 index 00000000..bc47baf9 --- /dev/null +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ApplicationTestV2.java @@ -0,0 +1,874 @@ +/*- + * ========================LICENSE_START================================= + * ONAP : ccsdk oran + * ====================================================================== + * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. + * ====================================================================== + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================LICENSE_END=================================== + */ + +package org.onap.ccsdk.oran.a1policymanagementservice; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClient; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableRicConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableWebClientConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.WebClientConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.Consts; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.PolicyIdList; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.PolicyInfo; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.PolicyInfoList; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.PolicySchemaList; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.PolicyTypeIdList; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.RicInfo; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.ServiceRegistrationInfo; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.ServiceStatus; +import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.ServiceStatusList; +import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicy; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicyType; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Lock.LockType; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policies; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyType; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric.RicState; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Services; +import org.onap.ccsdk.oran.a1policymanagementservice.tasks.RicSupervision; +import org.onap.ccsdk.oran.a1policymanagementservice.tasks.ServiceSupervision; +import org.onap.ccsdk.oran.a1policymanagementservice.utils.MockA1Client; +import org.onap.ccsdk.oran.a1policymanagementservice.utils.MockA1ClientFactory; +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; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.web.reactive.function.client.WebClientResponseException; + +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; +import reactor.util.annotation.Nullable; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@TestPropertySource( + properties = { // + "server.ssl.key-store=./config/keystore.jks", // + "app.webclient.trust-store=./config/truststore.jks"}) +class ApplicationTestV2 { + private static final Logger logger = LoggerFactory.getLogger(ApplicationTestV2.class); + + @Autowired + ApplicationContext context; + + @Autowired + private Rics rics; + + @Autowired + private Policies policies; + + @Autowired + private PolicyTypes policyTypes; + + @Autowired + MockA1ClientFactory a1ClientFactory; + + @Autowired + RicSupervision supervision; + + @Autowired + ApplicationConfig applicationConfig; + + @Autowired + Services services; + + private static Gson gson = new GsonBuilder() // + .serializeNulls() // + .create(); // + + public static class MockApplicationConfig extends ApplicationConfig { + @Override + public String getLocalConfigurationFilePath() { + return ""; // No config file loaded for the test + } + } + + /** + * Overrides the BeanFactory. + */ + @TestConfiguration + static class TestBeanFactory { + private final PolicyTypes policyTypes = new PolicyTypes(); + private final Services services = new Services(); + private final Policies policies = new Policies(); + MockA1ClientFactory a1ClientFactory = null; + + @Bean + public ApplicationConfig getApplicationConfig() { + return new MockApplicationConfig(); + } + + @Bean + MockA1ClientFactory getA1ClientFactory() { + if (a1ClientFactory == null) { + this.a1ClientFactory = new MockA1ClientFactory(this.policyTypes); + } + return this.a1ClientFactory; + } + + @Bean + public PolicyTypes getPolicyTypes() { + return this.policyTypes; + } + + @Bean + Policies getPolicies() { + return this.policies; + } + + @Bean + Services getServices() { + return this.services; + } + + @Bean + public ServiceSupervision getServiceSupervision() { + Duration checkInterval = Duration.ofMillis(1); + return new ServiceSupervision(this.services, this.policies, this.getA1ClientFactory(), checkInterval); + } + + @Bean + public ServletWebServerFactory servletContainer() { + return new TomcatServletWebServerFactory(); + } + + } + + @LocalServerPort + private int port; + + @BeforeEach + void reset() { + rics.clear(); + policies.clear(); + policyTypes.clear(); + services.clear(); + a1ClientFactory.reset(); + } + + @AfterEach + void verifyNoRicLocks() { + for (Ric ric : this.rics.getRics()) { + ric.getLock().lockBlocking(LockType.EXCLUSIVE); + ric.getLock().unlockBlocking(); + assertThat(ric.getLock().getLockCounter()).isZero(); + assertThat(ric.getState()).isEqualTo(Ric.RicState.AVAILABLE); + } + } + + @Test + void testGetRics() throws Exception { + addRic("ric1"); + this.addPolicyType("type1", "ric1"); + String url = "/rics?policytype_id=type1"; + String rsp = restClient().get(url).block(); + assertThat(rsp).contains("ric1"); + + // nameless type for ORAN A1 1.1 + addRic("ric2"); + this.addPolicyType("", "ric2"); + url = "/rics?policytype_id="; + + // This tests also validation of trusted certs restClient(true) + rsp = restClient(true).get(url).block(); + assertThat(rsp).contains("ric2") // + .doesNotContain("ric1") // + .contains("AVAILABLE"); + + // All RICs + rsp = restClient().get("/rics").block(); + assertThat(rsp).contains("ric2") // + .contains("ric1"); + + // Non existing policy type + url = "/rics?policytype_id=XXXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + @Test + void testSynchronization() throws Exception { + // Two polictypes will be put in the NearRT RICs + PolicyTypes nearRtRicPolicyTypes = new PolicyTypes(); + nearRtRicPolicyTypes.put(createPolicyType("typeName")); + nearRtRicPolicyTypes.put(createPolicyType("typeName2")); + this.a1ClientFactory.setPolicyTypes(nearRtRicPolicyTypes); + + // One type and one instance added to the Policy Management Service's storage + final String ric1Name = "ric1"; + Ric ric1 = addRic(ric1Name); + Policy policy2 = addPolicy("policyId2", "typeName", "service", ric1Name); + Ric ric2 = addRic("ric2"); + + getA1Client(ric1Name).putPolicy(policy2); // put it in the RIC (NearRT-RIC) + policies.remove(policy2); // Remove it from the repo -> should be deleted in the RIC + + String policyId = "policyId"; + Policy policy = addPolicy(policyId, "typeName", "service", ric1Name); // This should be created in the RIC + supervision.checkAllRics(); // The created policy should be put in the RIC + + // Wait until synch is completed + await().untilAsserted(() -> RicState.SYNCHRONIZING.equals(rics.getRic(ric1Name).getState())); + await().untilAsserted(() -> RicState.AVAILABLE.equals(rics.getRic(ric1Name).getState())); + await().untilAsserted(() -> RicState.AVAILABLE.equals(rics.getRic("ric2").getState())); + + Policies ricPolicies = getA1Client(ric1Name).getPolicies(); + assertThat(ricPolicies.size()).isEqualTo(1); + Policy ricPolicy = ricPolicies.get(policyId); + assertThat(ricPolicy.json()).isEqualTo(policy.json()); + + // Both types should be in the Policy Management Service's storage after the + // synch + assertThat(ric1.getSupportedPolicyTypes()).hasSize(2); + assertThat(ric2.getSupportedPolicyTypes()).hasSize(2); + } + + @Test + void testGetRic() throws Exception { + String ricId = "ric1"; + String managedElementId = "kista_1"; + addRic(ricId, managedElementId); + + String url = "/ric?managed_element_id=" + managedElementId; + String rsp = restClient().get(url).block(); + RicInfo ricInfo = gson.fromJson(rsp, RicInfo.class); + assertThat(ricInfo.ricId).isEqualTo(ricId); + + url = "/ric?ric_id=" + ricId; + rsp = restClient().get(url).block(); + ricInfo = gson.fromJson(rsp, RicInfo.class); + assertThat(ricInfo.ricId).isEqualTo(ricId); + + // test GET RIC for ManagedElement that does not exist + url = "/ric?managed_element_id=" + "junk"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + + url = "/ric"; + testErrorCode(restClient().get(url), HttpStatus.BAD_REQUEST); + } + + private String putPolicyUrl(String serviceName, String ricId, String policyTypeName, String policyInstanceId, + boolean isTransient) { + String url; + if (policyTypeName.isEmpty()) { + url = "/policy?policy_id=" + policyInstanceId + "&ric_id=" + ricId + "&service_id=" + serviceName; + } else { + url = "/policy?policy_id=" + policyInstanceId + "&ric_id=" + ricId + "&service_id=" + serviceName + + "&policytype_id=" + policyTypeName; + } + if (isTransient) { + url += "&transient=true"; + } + return url; + } + + private String putPolicyUrl(String serviceName, String ricId, String policyTypeName, String policyInstanceId) { + return putPolicyUrl(serviceName, ricId, policyTypeName, policyInstanceId, false); + } + + @Test + void testPutPolicy() throws Exception { + String serviceName = "service1"; + String ricId = "ric1"; + String policyTypeName = "type1"; + String policyInstanceId = "instance1"; + + putService(serviceName); + addPolicyType(policyTypeName, ricId); + + // PUT a transient policy + String url = putPolicyUrl(serviceName, ricId, policyTypeName, policyInstanceId, true); + final String policyBody = jsonString(); + this.rics.getRic(ricId).setState(Ric.RicState.AVAILABLE); + + restClient().put(url, policyBody).block(); + + Policy policy = policies.getPolicy(policyInstanceId); + assertThat(policy).isNotNull(); + assertThat(policy.id()).isEqualTo(policyInstanceId); + assertThat(policy.ownerServiceId()).isEqualTo(serviceName); + assertThat(policy.ric().id()).isEqualTo("ric1"); + assertThat(policy.isTransient()).isTrue(); + + // Put a non transient policy + url = putPolicyUrl(serviceName, ricId, policyTypeName, policyInstanceId); + restClient().put(url, policyBody).block(); + policy = policies.getPolicy(policyInstanceId); + assertThat(policy.isTransient()).isFalse(); + + url = "/policies"; + String rsp = restClient().get(url).block(); + assertThat(rsp).as("Response contains policy instance ID.").contains(policyInstanceId); + + url = "/policy?policy_id=" + policyInstanceId; + rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo(policyBody); + + // Test of error codes + url = putPolicyUrl(serviceName, ricId + "XX", policyTypeName, policyInstanceId); + testErrorCode(restClient().put(url, policyBody), HttpStatus.NOT_FOUND); + + url = putPolicyUrl(serviceName, ricId, policyTypeName + "XX", policyInstanceId); + addPolicyType(policyTypeName + "XX", "otherRic"); + testErrorCode(restClient().put(url, policyBody), HttpStatus.NOT_FOUND); + + url = putPolicyUrl(serviceName, ricId, policyTypeName, policyInstanceId); + this.rics.getRic(ricId).setState(Ric.RicState.SYNCHRONIZING); + testErrorCode(restClient().put(url, policyBody), HttpStatus.LOCKED); + this.rics.getRic(ricId).setState(Ric.RicState.AVAILABLE); + } + + @Test + /** + * Test that HttpStatus and body from failing REST call to A1 is passed on to + * the caller. + * + * @throws ServiceException + */ + void testErrorFromRic() throws ServiceException { + putService("service1"); + addPolicyType("type1", "ric1"); + + String url = putPolicyUrl("service1", "ric1", "type1", "id1"); + MockA1Client a1Client = a1ClientFactory.getOrCreateA1Client("ric1"); + HttpStatus httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + String responseBody = "Refused"; + byte[] responseBodyBytes = responseBody.getBytes(StandardCharsets.UTF_8); + + WebClientResponseException a1Exception = new WebClientResponseException(httpStatus.value(), "statusText", null, + responseBodyBytes, StandardCharsets.UTF_8, null); + doReturn(Mono.error(a1Exception)).when(a1Client).putPolicy(any()); + + // PUT Policy + testErrorCode(restClient().put(url, "{}"), httpStatus, responseBody); + + // DELETE POLICY + this.addPolicy("instance1", "type1", "service1", "ric1"); + doReturn(Mono.error(a1Exception)).when(a1Client).deletePolicy(any()); + testErrorCode(restClient().delete("/policy?policy_id=instance1"), httpStatus, responseBody); + + // GET STATUS + this.addPolicy("instance1", "type1", "service1", "ric1"); + doReturn(Mono.error(a1Exception)).when(a1Client).getPolicyStatus(any()); + testErrorCode(restClient().get("/policy-status?policy_id=instance1"), httpStatus, responseBody); + + // Check that empty response body is OK + a1Exception = new WebClientResponseException(httpStatus.value(), "", null, null, null, null); + doReturn(Mono.error(a1Exception)).when(a1Client).getPolicyStatus(any()); + testErrorCode(restClient().get("/policy-status?policy_id=instance1"), httpStatus); + } + + @Test + void testPutTypelessPolicy() throws Exception { + putService("service1"); + addPolicyType("", "ric1"); + String url = putPolicyUrl("service1", "ric1", "", "id1"); + restClient().put(url, jsonString()).block(); + + String rsp = restClient().get("/policies").block(); + PolicyInfoList info = gson.fromJson(rsp, PolicyInfoList.class); + assertThat(info.policies).hasSize(1); + PolicyInfo policyInfo = info.policies.iterator().next(); + assertThat(policyInfo.policyId).isEqualTo("id1"); + assertThat(policyInfo.policyTypeId).isEmpty(); + } + + @Test + void testRefuseToUpdatePolicy() throws Exception { + // Test that only the json can be changed for a already created policy + // In this case service is attempted to be changed + this.addRic("ric1"); + this.addRic("ricXXX"); + this.addPolicy("instance1", "type1", "service1", "ric1"); + this.addPolicy("instance2", "type1", "service1", "ricXXX"); + + // Try change ric1 -> ricXXX + String urlWrongRic = putPolicyUrl("service1", "ricXXX", "type1", "instance1"); + testErrorCode(restClient().put(urlWrongRic, jsonString()), HttpStatus.CONFLICT); + } + + @Test + void testGetPolicy() throws Exception { + String url = "/policy?policy_id=id"; + Policy policy = addPolicy("id", "typeName", "service1", "ric1"); + { + String rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo(policy.json()); + } + { + policies.remove(policy); + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + } + + @Test + void testDeletePolicy() throws Exception { + addPolicy("id", "typeName", "service1", "ric1"); + assertThat(policies.size()).isEqualTo(1); + + String url = "/policy?policy_id=id"; + ResponseEntity<String> entity = restClient().deleteForEntity(url).block(); + + assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT); + assertThat(policies.size()).isZero(); + + // Delete a non existing policy + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + @Test + void testGetPolicySchemas() throws Exception { + addPolicyType("type1", "ric1"); + addPolicyType("type2", "ric2"); + + String url = "/policy-schemas"; + String rsp = this.restClient().get(url).block(); + assertThat(rsp).contains("type1") // + .contains("[{\"title\":\"type2\"}"); + + PolicySchemaList info = parseSchemas(rsp); + assertThat(info.schemas).hasSize(2); + + url = "/policy-schemas?ric_id=ric1"; + rsp = restClient().get(url).block(); + assertThat(rsp).contains("type1"); + info = parseSchemas(rsp); + assertThat(info.schemas).hasSize(1); + + // Schema for type + url = "/policy-schemas?policytype_id=type1"; + rsp = restClient().get(url).block(); + assertThat(rsp).contains("type1") // + .contains("title"); + + // Both type and ric specified + url = "/policy-schemas?ric_id=ric1&policytype_id=type1"; + rsp = restClient().get(url).block(); + PolicySchemaList list = gson.fromJson(rsp, PolicySchemaList.class); + assertThat(list.schemas.size()).isEqualTo(1); + + url = "/policy-schemas?ric_id=ric1&policytype_id=type2"; + rsp = restClient().get(url).block(); + list = gson.fromJson(rsp, PolicySchemaList.class); + assertThat(list.schemas.size()).isEqualTo(0); + + // Get schema for non existing RIC + url = "/policy-schemas?ric_id=ric1XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + + // Get non existing schema + url = "/policy-schemas?policytype_id=type1XX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + String createPolicyTypesJson(String... types) { + List<String> list = new ArrayList<>(); + Collections.addAll(list, types); + PolicyTypeIdList ids = new PolicyTypeIdList(list); + return gson.toJson(ids); + } + + @Test + void testGetPolicyTypes() throws Exception { + addPolicyType("type1", "ric1"); + addPolicyType("type2", "ric2"); + + String url = "/policy-types"; + String rsp = restClient().get(url).block(); + String expResp = createPolicyTypesJson("type2", "type1"); + assertThat(rsp).isEqualTo(expResp); + + url = "/policy-types?ric_id=ric1"; + rsp = restClient().get(url).block(); + expResp = createPolicyTypesJson("type1"); + assertThat(rsp).isEqualTo(expResp); + + // Get policy types for non existing RIC + url = "/policy-types?ric_id=ric1XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + @Test + void testGetPolicies() throws Exception { + addPolicy("id1", "type1", "service1"); + + String url = "/policies"; + String rsp = restClient().get(url).block(); + logger.info(rsp); + PolicyInfoList info = gson.fromJson(rsp, PolicyInfoList.class); + assertThat(info.policies).hasSize(1); + PolicyInfo policyInfo = info.policies.iterator().next(); + assert (policyInfo.validate()); + assertThat(policyInfo.policyId).isEqualTo("id1"); + assertThat(policyInfo.policyTypeId).isEqualTo("type1"); + assertThat(policyInfo.serviceId).isEqualTo("service1"); + } + + @Test + void testGetPoliciesFilter() throws Exception { + addPolicy("id1", "type1", "service1"); + addPolicy("id2", "type1", "service2"); + addPolicy("id3", "type2", "service1"); + + String url = "/policies?policytype_id=type1"; + String rsp = restClient().get(url).block(); + logger.info(rsp); + assertThat(rsp).contains("id1") // + .contains("id2") // + .doesNotContain("id3"); + + url = "/policies?policytype_id=type1&service_id=service2"; + rsp = restClient().get(url).block(); + logger.info(rsp); + assertThat(rsp).doesNotContain("id1") // + .contains("id2") // + .doesNotContain("id3"); + + // Test get policies for non existing type + url = "/policies?policytype_id=type1XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + + // Test get policies for non existing RIC + url = "/policies?ric_id=XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + @Test + void testGetPolicyIdsFilter() throws Exception { + addPolicy("id1", "type1", "service1", "ric1"); + addPolicy("id2", "type1", "service2", "ric1"); + addPolicy("id3", "type2", "service1", "ric1"); + + String url = "/policy-ids?policytype_id=type1"; + String rsp = restClient().get(url).block(); + logger.info(rsp); + assertThat(rsp).contains("id1") // + .contains("id2") // + .doesNotContain("id3"); + + url = "/policy-ids?policytype_id=type1&service_id=service1&ric=ric1"; + rsp = restClient().get(url).block(); + PolicyIdList respList = gson.fromJson(rsp, PolicyIdList.class); + assertThat(respList.policyIds.iterator().next()).isEqualTo("id1"); + + // Test get policy ids for non existing type + url = "/policy-ids?policytype_id=type1XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + + // Test get policy ids for non existing RIC + url = "/policy-ids?ric_id=XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + @Test + void testPutAndGetService() throws Exception { + // PUT + String serviceName = "name"; + putService(serviceName, 0, HttpStatus.CREATED); + putService(serviceName, 0, HttpStatus.OK); + + // GET one service + String url = "/services?service_id=name"; + String rsp = restClient().get(url).block(); + ServiceStatusList info = gson.fromJson(rsp, ServiceStatusList.class); + assertThat(info.statusList).hasSize(1); + ServiceStatus status = info.statusList.iterator().next(); + assertThat(status.keepAliveIntervalSeconds).isZero(); + assertThat(status.serviceId).isEqualTo(serviceName); + + // GET (all) + url = "/services"; + rsp = restClient().get(url).block(); + assertThat(rsp).as("Response contains service name").contains(serviceName); + logger.info(rsp); + + // Keep alive + url = "/services/keepalive?service_id=name"; + ResponseEntity<?> entity = restClient().putForEntity(url).block(); + assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); + + // DELETE service + assertThat(services.size()).isEqualTo(1); + url = "/services?service_id=name"; + restClient().delete(url).block(); + assertThat(services.size()).isZero(); + + // Keep alive, no registered service + testErrorCode(restClient().put("/services/keepalive?service_id=name", ""), HttpStatus.NOT_FOUND); + + // PUT service with bad payload + testErrorCode(restClient().put("/services", "crap"), HttpStatus.BAD_REQUEST, false); + testErrorCode(restClient().put("/services", "{}"), HttpStatus.BAD_REQUEST, false); + testErrorCode(restClient().put("/services", createServiceJson(serviceName, -123)), HttpStatus.BAD_REQUEST, + false); + testErrorCode(restClient().put("/services", createServiceJson(serviceName, 0, "missing.portandprotocol.com")), + HttpStatus.BAD_REQUEST, false); + + // GET non existing service + testErrorCode(restClient().get("/services?service_id=XXX"), HttpStatus.NOT_FOUND); + } + + @Test + void testServiceSupervision() throws Exception { + putService("service1", 1, HttpStatus.CREATED); + addPolicyType("type1", "ric1"); + + String url = putPolicyUrl("service1", "ric1", "type1", "instance1"); + final String policyBody = jsonString(); + restClient().put(url, policyBody).block(); + + assertThat(policies.size()).isEqualTo(1); + assertThat(services.size()).isEqualTo(1); + + // Timeout after ~1 second + await().untilAsserted(() -> assertThat(policies.size()).isZero()); + assertThat(services.size()).isZero(); + } + + @Test + void testGetPolicyStatus() throws Exception { + addPolicy("id", "typeName", "service1", "ric1"); + assertThat(policies.size()).isEqualTo(1); + + String url = "/policy-status?policy_id=id"; + String rsp = restClient().get(url).block(); + assertThat(rsp).isEqualTo("OK"); + + // GET non existing policy status + url = "/policy-status?policy_id=XXX"; + testErrorCode(restClient().get(url), HttpStatus.NOT_FOUND); + } + + private Policy addPolicy(String id, String typeName, String service, String ric) throws ServiceException { + addRic(ric); + Policy policy = ImmutablePolicy.builder() // + .id(id) // + .json(jsonString()) // + .ownerServiceId(service) // + .ric(rics.getRic(ric)) // + .type(addPolicyType(typeName, ric)) // + .lastModified(Instant.now()) // + .isTransient(false) // + .build(); + policies.put(policy); + return policy; + } + + private Policy addPolicy(String id, String typeName, String service) throws ServiceException { + return addPolicy(id, typeName, service, "ric"); + } + + private String createServiceJson(String name, long keepAliveIntervalSeconds) { + return createServiceJson(name, keepAliveIntervalSeconds, "https://examples.javacodegeeks.com/core-java/"); + } + + private String createServiceJson(String name, long keepAliveIntervalSeconds, String url) { + ServiceRegistrationInfo service = new ServiceRegistrationInfo(name, keepAliveIntervalSeconds, url); + + String json = gson.toJson(service); + return json; + } + + private void putService(String name) { + putService(name, 0, null); + } + + private void putService(String name, long keepAliveIntervalSeconds, @Nullable HttpStatus expectedStatus) { + String url = "/services"; + String body = createServiceJson(name, keepAliveIntervalSeconds); + ResponseEntity<String> resp = restClient().putForEntity(url, body).block(); + if (expectedStatus != null) { + assertEquals(expectedStatus, resp.getStatusCode(), ""); + } + } + + private String baseUrl() { + return "https://localhost:" + port + Consts.V2_API_ROOT; + } + + private String jsonString() { + return "{\"servingCellNrcgi\":\"1\"}"; + } + + @Test + void testConcurrency() throws Exception { + final Instant startTime = Instant.now(); + List<Thread> threads = new ArrayList<>(); + List<ConcurrencyTestRunnable> tests = new ArrayList<>(); + a1ClientFactory.setResponseDelay(Duration.ofMillis(1)); + addRic("ric"); + addPolicyType("type1", "ric"); + addPolicyType("type2", "ric"); + + for (int i = 0; i < 10; ++i) { + AsyncRestClient restClient = restClient(); + ConcurrencyTestRunnable test = + new ConcurrencyTestRunnable(restClient, supervision, a1ClientFactory, rics, policyTypes); + Thread thread = new Thread(test, "TestThread_" + i); + thread.start(); + threads.add(thread); + tests.add(test); + } + for (Thread t : threads) { + t.join(); + } + for (ConcurrencyTestRunnable test : tests) { + assertThat(test.isFailed()).isFalse(); + } + assertThat(policies.size()).isZero(); + logger.info("Concurrency test took " + Duration.between(startTime, Instant.now())); + } + + 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(); + + return new AsyncRestClient(baseUrl(), config); + } + + private AsyncRestClient restClient() { + return restClient(false); + } + + private void testErrorCode(Mono<?> request, HttpStatus expStatus) { + testErrorCode(request, expStatus, "", true); + } + + private void testErrorCode(Mono<?> request, HttpStatus expStatus, boolean expectApplicationProblemJsonMediaType) { + testErrorCode(request, expStatus, "", expectApplicationProblemJsonMediaType); + } + + private void testErrorCode(Mono<?> request, HttpStatus expStatus, String responseContains) { + testErrorCode(request, expStatus, responseContains, true); + } + + private void testErrorCode(Mono<?> request, HttpStatus expStatus, String responseContains, + boolean expectApplicationProblemJsonMediaType) { + StepVerifier.create(request) // + .expectSubscription() // + .expectErrorMatches( + t -> checkWebClientError(t, expStatus, responseContains, expectApplicationProblemJsonMediaType)) // + .verify(); + } + + private boolean checkWebClientError(Throwable throwable, HttpStatus expStatus, String responseContains, + boolean expectApplicationProblemJsonMediaType) { + assertTrue(throwable instanceof WebClientResponseException); + WebClientResponseException responseException = (WebClientResponseException) throwable; + assertThat(responseException.getStatusCode()).isEqualTo(expStatus); + assertThat(responseException.getResponseBodyAsString()).contains(responseContains); + if (expectApplicationProblemJsonMediaType) { + assertThat(responseException.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_PROBLEM_JSON); + } + return true; + } + + private MockA1Client getA1Client(String ricId) throws ServiceException { + return a1ClientFactory.getOrCreateA1Client(ricId); + } + + private PolicyType createPolicyType(String policyTypeName) { + return ImmutablePolicyType.builder() // + .id(policyTypeName) // + .schema("{\"title\":\"" + policyTypeName + "\"}") // + .build(); + } + + private PolicyType addPolicyType(String policyTypeName, String ricId) { + PolicyType type = createPolicyType(policyTypeName); + policyTypes.put(type); + addRic(ricId).addSupportedPolicyType(type); + return type; + } + + private Ric addRic(String ricId) { + return addRic(ricId, null); + } + + private Ric addRic(String ricId, String managedElement) { + if (rics.get(ricId) != null) { + return rics.get(ricId); + } + List<String> mes = new ArrayList<>(); + if (managedElement != null) { + mes.add(managedElement); + } + RicConfig conf = ImmutableRicConfig.builder() // + .ricId(ricId) // + .baseUrl(ricId) // + .managedElementIds(mes) // + .controllerName("") // + .build(); + Ric ric = new Ric(conf); + ric.setState(Ric.RicState.AVAILABLE); + this.rics.put(ric); + return ric; + } + + private static PolicySchemaList parseSchemas(String jsonString) { + return gson.fromJson(jsonString, PolicySchemaList.class); + } +} diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ConcurrencyTestRunnable.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ConcurrencyTestRunnable.java index 7a882adf..0e8803a5 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ConcurrencyTestRunnable.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/ConcurrencyTestRunnable.java @@ -20,6 +20,7 @@ package org.onap.ccsdk.oran.a1policymanagementservice; +import java.time.Instant; import java.util.concurrent.atomic.AtomicInteger; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClient; @@ -49,15 +50,16 @@ class ConcurrencyTestRunnable implements Runnable { private final MockA1ClientFactory a1ClientFactory; private final Rics rics; private final PolicyTypes types; + private boolean failed = false; - ConcurrencyTestRunnable(String baseUrl, RicSupervision supervision, MockA1ClientFactory a1ClientFactory, Rics rics, - PolicyTypes types) { + ConcurrencyTestRunnable(AsyncRestClient client, RicSupervision supervision, MockA1ClientFactory a1ClientFactory, + Rics rics, PolicyTypes types) { this.count = nextCount.incrementAndGet(); this.supervision = supervision; this.a1ClientFactory = a1ClientFactory; this.rics = rics; this.types = types; - this.webClient = new AsyncRestClient(baseUrl); + this.webClient = client; } private void printStatusInfo() { @@ -94,9 +96,14 @@ class ConcurrencyTestRunnable implements Runnable { } catch (Exception e) { logger.error("Concurrency test exception " + e.toString()); printStatusInfo(); + failed = true; } } + public boolean isFailed() { + return this.failed; + } + private Policy createPolicyObject(String id) { Ric ric = this.rics.get("ric"); PolicyType type = this.types.get("type1"); @@ -105,8 +112,8 @@ class ConcurrencyTestRunnable implements Runnable { .json("{}") // .type(type) // .ric(ric) // - .ownerServiceName("") // - .lastModified("") // + .ownerServiceId("") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); } @@ -124,17 +131,17 @@ class ConcurrencyTestRunnable implements Runnable { } private void listTypes() { - String uri = "/policy_types"; + String uri = "/policy-types"; webClient.getForEntity(uri).block(); } private void putPolicy(String name) { - String putUrl = "/policy?type=type1&id=" + name + "&ric=ric&service=service1"; + String putUrl = "/policy?policytype_id=type1&policy_id=" + name + "&ric_id=ric&service_id=service1"; webClient.putForEntity(putUrl, "{}").block(); } private void deletePolicy(String name) { - String deleteUrl = "/policy?id=" + name; + String deleteUrl = "/policy?policy_id=" + name; webClient.delete(deleteUrl).block(); } } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/MockPolicyManagementService.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/MockPolicyManagementService.java index aa917cb4..6ccf162c 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/MockPolicyManagementService.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/MockPolicyManagementService.java @@ -29,6 +29,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.file.Files; +import java.time.Instant; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -134,13 +135,13 @@ class MockPolicyManagementService { try { String schema = readFile(file); String typeName = title(schema); - PolicyType type = ImmutablePolicyType.builder().name(typeName).schema(schema).build(); + PolicyType type = ImmutablePolicyType.builder().id(typeName).schema(schema).build(); policyTypes.put(type); } catch (Exception e) { logger.error("Could not load json schema ", e); } } - policyTypes.put(ImmutablePolicyType.builder().name("").schema("{}").build()); + policyTypes.put(ImmutablePolicyType.builder().id("").schema("{}").build()); } } @@ -187,10 +188,10 @@ class MockPolicyManagementService { Policy policy = ImmutablePolicy.builder() // .id("typelessPolicy") // .json(json) // - .ownerServiceName("MockPolicyManagementService") // + .ownerServiceId("MockPolicyManagementService") // .ric(ric) // .type(unnamedPolicyType) // - .lastModified("now") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); this.policies.put(policy); diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java index 86244e0d..685c5611 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactoryTest.java @@ -70,7 +70,7 @@ class A1ClientFactoryTest { private static ImmutableRicConfig ricConfig(String controllerName) { return ImmutableRicConfig.builder() // - .name(RIC_NAME) // + .ricId(RIC_NAME) // .baseUrl("baseUrl") // .managedElementIds(new Vector<>()) // .controllerName(controllerName) // @@ -118,7 +118,7 @@ class A1ClientFactoryTest { .expectError() // .verify(); - assertEquals(A1ProtocolType.UNKNOWN, ric.getProtocolVersion(), "Protocol negotiation failed for " + ric.name()); + assertEquals(A1ProtocolType.UNKNOWN, ric.getProtocolVersion(), "Protocol negotiation failed for " + ric.id()); } private A1Client createClient(A1ProtocolType version) throws ServiceException { diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java index d096e0c6..855a917f 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientHelper.java @@ -20,6 +20,7 @@ package org.onap.ccsdk.oran.a1policymanagementservice.clients; +import java.time.Instant; import java.util.Arrays; import java.util.Vector; @@ -47,7 +48,7 @@ public class A1ClientHelper { } protected static Ric createRic(String url) { - RicConfig cfg = ImmutableRicConfig.builder().name("ric") // + RicConfig cfg = ImmutableRicConfig.builder().ricId("ric") // .baseUrl(url) // .managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) // .controllerName("") // @@ -59,16 +60,16 @@ public class A1ClientHelper { return ImmutablePolicy.builder() // .id(policyId) // .json(json) // - .ownerServiceName("service") // + .ownerServiceId("service") // .ric(createRic(nearRtRicUrl)) // .type(createPolicyType(type)) // - .lastModified("now") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); } protected static PolicyType createPolicyType(String name) { - return ImmutablePolicyType.builder().name(name).schema("schema").build(); + return ImmutablePolicyType.builder().id(name).schema("schema").build(); } protected static String getCreateSchema(String policyType, String policyTypeId) { diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java index fe6274c9..d6d12ba1 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1ClientTest.java @@ -67,7 +67,7 @@ class OscA1ClientTest { @BeforeEach void init() { RicConfig ricConfig = ImmutableRicConfig.builder() // - .name("name") // + .ricId("name") // .baseUrl("RicBaseUrl") // .managedElementIds(new ArrayList<>()) // .controllerName("") // diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParserTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParserTest.java index 086af148..d0417a0a 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParserTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParserTest.java @@ -144,7 +144,7 @@ class ApplicationConfigParserTest { JsonObject jsonRootObject = getJsonRootObject(); JsonObject json = jsonRootObject.getAsJsonObject("config"); json.remove("ric"); - final String message = "Could not find member: 'ric' in: " + json; + final String message = "Could not find member: [ric] in: " + json; Exception actualException = assertThrows(ServiceException.class, () -> parserUnderTest.parse(jsonRootObject)); diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java index f7bf2e8b..eb2c1477 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigTest.java @@ -40,7 +40,7 @@ import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException class ApplicationConfigTest { private static final ImmutableRicConfig RIC_CONFIG_1 = ImmutableRicConfig.builder() // - .name("ric1") // + .ricId("ric1") // .baseUrl("ric1_url") // .managedElementIds(new Vector<>()) // .controllerName("") // @@ -76,7 +76,7 @@ class ApplicationConfigTest { assertEquals(RicConfigUpdate.Type.ADDED, update.getType()); assertTrue(appConfigUnderTest.getRicConfigs().contains(RIC_CONFIG_1), "Ric not added to configurations."); - assertEquals(RIC_CONFIG_1, appConfigUnderTest.getRic(RIC_CONFIG_1.name()), + assertEquals(RIC_CONFIG_1, appConfigUnderTest.getRic(RIC_CONFIG_1.ricId()), "Not correct Ric retrieved from configurations."); update = appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1)).blockFirst(); @@ -92,7 +92,7 @@ class ApplicationConfigTest { appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1)); ImmutableRicConfig changedRicConfig = ImmutableRicConfig.builder() // - .name("ric1") // + .ricId("ric1") // .baseUrl("changed_ric1_url") // .managedElementIds(new Vector<>()) // .controllerName("") // @@ -101,7 +101,7 @@ class ApplicationConfigTest { RicConfigUpdate update = appConfigUnderTest.setConfiguration(configParserResult(changedRicConfig)).blockFirst(); assertEquals(RicConfigUpdate.Type.CHANGED, update.getType()); - assertEquals(changedRicConfig, appConfigUnderTest.getRic(RIC_CONFIG_1.name()), + assertEquals(changedRicConfig, appConfigUnderTest.getRic(RIC_CONFIG_1.ricId()), "Changed Ric not retrieved from configurations."); } @@ -110,7 +110,7 @@ class ApplicationConfigTest { ApplicationConfig appConfigUnderTest = new ApplicationConfig(); ImmutableRicConfig ricConfig2 = ImmutableRicConfig.builder() // - .name("ric2") // + .ricId("ric2") // .baseUrl("ric2_url") // .managedElementIds(new Vector<>()) // .controllerName("") // diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageHandlerTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageHandlerTest.java index dfa132d8..2405e46c 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageHandlerTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageHandlerTest.java @@ -48,8 +48,6 @@ import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClient; import org.onap.ccsdk.oran.a1policymanagementservice.dmaap.DmaapRequestMessage.Operation; -import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicyType; -import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyType; import org.onap.ccsdk.oran.a1policymanagementservice.utils.LoggingUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,8 +79,7 @@ class DmaapMessageHandlerTest { } static String payloadAsString() { - PolicyType pt = ImmutablePolicyType.builder().name("name").schema("schema").build(); - return gson.toJson(pt); + return "{\"param\":\"value\"}"; } DmaapRequestMessage dmaapRequestMessage(Operation operation) { @@ -277,7 +274,7 @@ class DmaapMessageHandlerTest { @Test void putWithoutPayload_thenNotFoundResponseWithWarning() throws Exception { String message = dmaapInputMessage(Operation.PUT).toString(); - message = message.replace(",\"payload\":{\"name\":\"name\",\"schema\":\"schema\"}", ""); + message = message.replace("payload", "junk"); final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(DmaapMessageHandler.class, WARN); diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java index be2fabdf..72b20600 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RefreshConfigTaskTest.java @@ -49,6 +49,7 @@ import java.io.InputStreamReader; import java.net.URL; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.time.Instant; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -100,8 +101,8 @@ class RefreshConfigTaskTest { CbsClient cbsClient; private static final String RIC_1_NAME = "ric1"; - private static final ImmutableRicConfig CORRECT_RIC_CONIFG = ImmutableRicConfig.builder() // - .name(RIC_1_NAME) // + private static final RicConfig CORRECT_RIC_CONIFG = ImmutableRicConfig.builder() // + .ricId(RIC_1_NAME) // .baseUrl("http://localhost:8080/") // .managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) // .controllerName("") // @@ -327,7 +328,7 @@ class RefreshConfigTaskTest { private RicConfig getRicConfig(String name) { RicConfig ricConfig = ImmutableRicConfig.builder() // - .name(name) // + .ricId(name) // .baseUrl("url") // .managedElementIds(Collections.emptyList()) // .controllerName("controllerName") // @@ -337,16 +338,16 @@ class RefreshConfigTaskTest { private Policy getPolicy(Ric ric) { ImmutablePolicyType type = ImmutablePolicyType.builder() // - .name("type") // + .id("type") // .schema("{}") // .build(); Policy policy = ImmutablePolicy.builder() // .id("id") // .type(type) // - .lastModified("lastModified") // + .lastModified(Instant.now()) // .ric(ric) // .json("{}") // - .ownerServiceName("ownerServiceName") // + .ownerServiceId("ownerServiceId") // .isTransient(false) // .build(); return policy; diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java index 6df6e6d6..bb3b3461 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSupervisionTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -59,12 +60,12 @@ import reactor.core.publisher.Mono; class RicSupervisionTest { private static final String POLICY_TYPE_1_NAME = "type1"; private static final PolicyType POLICY_TYPE_1 = ImmutablePolicyType.builder() // - .name(POLICY_TYPE_1_NAME) // + .id(POLICY_TYPE_1_NAME) // .schema("") // .build(); private static final Ric RIC_1 = new Ric(ImmutableRicConfig.builder() // - .name("RIC_1") // + .ricId("ric_1") // .baseUrl("baseUrl1") // .managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) // .controllerName("controllerName") // @@ -74,20 +75,20 @@ class RicSupervisionTest { private static final Policy POLICY_1 = ImmutablePolicy.builder() // .id(POLICY_1_ID) // .json("") // - .ownerServiceName("service") // + .ownerServiceId("service") // .ric(RIC_1) // .type(POLICY_TYPE_1) // - .lastModified("now") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); private static final Policy POLICY_2 = ImmutablePolicy.builder() // .id("policyId2") // .json("") // - .ownerServiceName("service") // + .ownerServiceId("service") // .ric(RIC_1) // .type(POLICY_TYPE_1) // - .lastModified("now") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); @@ -284,7 +285,7 @@ class RicSupervisionTest { void whenRicIdleAndSameAmountOfPolicyTypesButNotSameTypes_thenSynchronization() { doReturn(Mono.just(a1ClientMock)).when(a1ClientFactory).createA1Client(any(Ric.class)); PolicyType policyType2 = ImmutablePolicyType.builder() // - .name("policyType2") // + .id("policyType2") // .schema("") // .build(); diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java index 0a84995b..93d252f7 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/RicSynchronizationTaskTest.java @@ -37,6 +37,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import java.time.Duration; +import java.time.Instant; import java.util.Arrays; import java.util.Collections; @@ -68,13 +69,13 @@ import reactor.core.publisher.Mono; class RicSynchronizationTaskTest { private static final String POLICY_TYPE_1_NAME = "type1"; private static final PolicyType POLICY_TYPE_1 = ImmutablePolicyType.builder() // - .name(POLICY_TYPE_1_NAME) // + .id(POLICY_TYPE_1_NAME) // .schema("") // .build(); private static final String RIC_1_NAME = "ric1"; private static final Ric RIC_1 = new Ric(ImmutableRicConfig.builder() // - .name(RIC_1_NAME) // + .ricId(RIC_1_NAME) // .baseUrl("baseUrl1") // .managedElementIds(Collections.emptyList()) // .controllerName("controllerName") // @@ -84,10 +85,10 @@ class RicSynchronizationTaskTest { return ImmutablePolicy.builder() // .id(policyId) // .json("") // - .ownerServiceName("service") // + .ownerServiceId("service") // .ric(RIC_1) // .type(POLICY_TYPE_1) // - .lastModified("now") // + .lastModified(Instant.now()) // .isTransient(isTransient) // .build(); } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java index 5fb26977..3e7bea64 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/tasks/ServiceSupervisionTest.java @@ -33,6 +33,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import java.time.Duration; +import java.time.Instant; import java.util.Collections; import org.awaitility.Durations; @@ -71,23 +72,23 @@ class ServiceSupervisionTest { private Service service; private Policies policies; private RicConfig ricConfig = ImmutableRicConfig.builder() // - .name(RIC_NAME) // + .ricId(RIC_NAME) // .baseUrl("baseUrl") // .managedElementIds(Collections.emptyList()) // .controllerName("") // .build(); private Ric ric = new Ric(ricConfig); private PolicyType policyType = ImmutablePolicyType.builder() // - .name("plicyTypeName") // + .id("policyTypeName") // .schema("schema") // .build(); private Policy policy = ImmutablePolicy.builder() // .id(POLICY_ID) // .json("json") // - .ownerServiceName(SERVICE_NAME) // + .ownerServiceId(SERVICE_NAME) // .ric(ric) // .type(policyType) // - .lastModified("lastModified") // + .lastModified(Instant.now()) // .isTransient(false) // .build(); diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1Client.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1Client.java index 4a781be8..14de691d 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1Client.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1Client.java @@ -51,7 +51,7 @@ public class MockA1Client implements A1Client { public Mono<List<String>> getPolicyTypeIdentities() { List<String> result = new Vector<>(); for (PolicyType p : this.policyTypes.getAll()) { - result.add(p.name()); + result.add(p.id()); } return mono(result); } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1ClientFactory.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1ClientFactory.java index 61407a40..d474daa6 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1ClientFactory.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/utils/MockA1ClientFactory.java @@ -50,16 +50,16 @@ public class MockA1ClientFactory extends A1ClientFactory { @Override public Mono<A1Client> createA1Client(Ric ric) { - return Mono.just(getOrCreateA1Client(ric.name())); + return Mono.just(getOrCreateA1Client(ric.id())); } - public MockA1Client getOrCreateA1Client(String ricName) { - if (!clients.containsKey(ricName)) { - logger.debug("Creating client for RIC: {}", ricName); + public MockA1Client getOrCreateA1Client(String ricId) { + if (!clients.containsKey(ricId)) { + logger.debug("Creating client for RIC: {}", ricId); MockA1Client client = spy(new MockA1Client(policyTypes, asynchDelay)); - clients.put(ricName, client); + clients.put(ricId, client); } - return clients.get(ricName); + return clients.get(ricId); } public void setPolicyTypes(PolicyTypes policyTypes) { |