From de7a573e413e5b32bd4c4d2b20d2488d6eca87a8 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Thu, 31 Mar 2022 12:08:56 +0200 Subject: NONRTRIC PMS using authorization token Added support for PMS sending an authorization token in each REST call(in the HTTP header). The token is read from a file. Issue-ID: CCSDK-3560 Signed-off-by: PatrikBuhr Change-Id: I92229f67d2c1486530f3c6ebb22f60bd3b359676 --- .../clients/A1ClientFactoryTest.java | 3 ++- .../clients/AsyncRestClientTest.java | 3 ++- .../clients/CcsdkA1AdapterClientTest.java | 2 +- .../controllers/v2/ApplicationTest.java | 24 +++++++++++++++++++--- .../v2/ConfigurationControllerTest.java | 3 ++- .../controllers/v2/RappSimulatorController.java | 19 ++++++++++++++++- .../dmaap/DmaapMessageConsumerTest.java | 9 ++++---- .../tasks/RefreshConfigTaskTest.java | 8 +++++--- .../tasks/RicSupervisionTest.java | 3 ++- .../tasks/RicSynchronizationTaskTest.java | 4 +++- .../utils/MockA1ClientFactory.java | 5 +++-- 11 files changed, 64 insertions(+), 19 deletions(-) (limited to 'a1-policy-management/src/test/java/org') 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 3ca35430..645f2353 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 @@ -79,7 +79,8 @@ class A1ClientFactoryTest { @BeforeEach void createFactoryUnderTest() { - factoryUnderTest = spy(new A1ClientFactory(applicationConfigMock)); + SecurityContext sec = new SecurityContext(""); + factoryUnderTest = spy(new A1ClientFactory(applicationConfigMock, sec)); this.ric = new Ric(ricConfig("")); } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientTest.java index 2e583f65..69a74b67 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientTest.java @@ -58,7 +58,8 @@ class AsyncRestClientTest { InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE); Loggers.useJdkLoggers(); mockWebServer = new MockWebServer(); - clientUnderTest = new AsyncRestClient(mockWebServer.url(BASE_URL).toString(), null, null); + clientUnderTest = + new AsyncRestClient(mockWebServer.url(BASE_URL).toString(), null, null, new SecurityContext("")); } @AfterAll diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClientTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClientTest.java index ced739ad..f49020ee 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClientTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClientTest.java @@ -84,7 +84,7 @@ class CcsdkA1AdapterClientTest { @Test void createClientWithWrongProtocol_thenErrorIsThrown() { - AsyncRestClient asyncRestClient = new AsyncRestClient("", null, null); + AsyncRestClient asyncRestClient = new AsyncRestClient("", null, null, new SecurityContext("")); assertThrows(IllegalArgumentException.class, () -> { new CcsdkA1AdapterClient(A1ProtocolType.STD_V1_1, null, null, asyncRestClient); }); diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java index 75215613..569cb577 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * ONAP : ccsdk oran * ====================================================================== - * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. + * Copyright (C) 2019-2022 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. @@ -35,6 +35,7 @@ import java.io.IOException; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; import java.time.Instant; @@ -49,6 +50,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClient; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClientFactory; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig.RicConfigUpdate; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableRicConfig; @@ -100,6 +102,7 @@ import reactor.util.annotation.Nullable; @TestPropertySource(properties = { // "server.ssl.key-store=./src/test/resources/keystore.jks", // "app.webclient.trust-store=./src/test/resources/truststore.jks", // + "app.webclient.trust-store-used=true", // "app.vardata-directory=./target/testdata", // "app.filepath=" // }) @@ -136,6 +139,9 @@ class ApplicationTest { @Autowired RefreshConfigTask refreshConfigTask; + @Autowired + SecurityContext securityContext; + private static Gson gson = new GsonBuilder().create(); /** @@ -174,6 +180,7 @@ class ApplicationTest { a1ClientFactory.reset(); this.rAppSimulator.getTestResults().clear(); this.a1ClientFactory.setPolicyTypes(policyTypes); // Default same types in RIC and in this app + this.securityContext.setAuthTokenFilePath(null); } @AfterEach @@ -831,7 +838,13 @@ class ApplicationTest { } @Test - void testServiceNotification() throws ServiceException { + void testServiceNotification() throws Exception { + + final String AUTH_TOKEN = "testToken"; + Path authFile = Files.createTempFile("pmsTestAuthToken", ".txt"); + Files.write(authFile, AUTH_TOKEN.getBytes()); + this.securityContext.setAuthTokenFilePath(authFile); + putService("junkService"); Service junkService = this.services.get("junkService"); junkService.setCallbackUrl("https://junk"); @@ -847,6 +860,11 @@ class ApplicationTest { ServiceCallbackInfo callbackInfo = receivedCallbacks.getReceivedInfo().get(0); assertThat(callbackInfo.ricId).isEqualTo("ric1"); assertThat(callbackInfo.eventType).isEqualTo(ServiceCallbackInfo.EventType.AVAILABLE); + + var headers = receivedCallbacks.receivedHeaders.get(0); + assertThat(headers).containsEntry("authorization", "Bearer " + AUTH_TOKEN); + + Files.delete(authFile); } private Policy addPolicy(String id, String typeName, String service, String ric) throws ServiceException { @@ -941,7 +959,7 @@ class ApplicationTest { .httpProxyConfig(config.httpProxyConfig()) // .build(); - AsyncRestClientFactory f = new AsyncRestClientFactory(config); + AsyncRestClientFactory f = new AsyncRestClientFactory(config, new SecurityContext("")); return f.createRestClientNoHttpProxy(baseUrl); } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationControllerTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationControllerTest.java index d1c36e62..d500ba3e 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationControllerTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ConfigurationControllerTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClient; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClientFactory; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableWebClientConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.WebClientConfig; @@ -176,7 +177,7 @@ class ConfigurationControllerTest { .httpProxyConfig(config.httpProxyConfig()) // .build(); - AsyncRestClientFactory f = new AsyncRestClientFactory(config); + AsyncRestClientFactory f = new AsyncRestClientFactory(config, new SecurityContext("")); return f.createRestClientNoHttpProxy("https://localhost:" + port); } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java index 1fa51246..d9c724fc 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RappSimulatorController.java @@ -31,6 +31,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import java.lang.invoke.MethodHandles; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.Vector; import lombok.Getter; @@ -44,6 +48,7 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; @RestController("RappCallbacksController") @@ -61,8 +66,12 @@ public class RappSimulatorController { @Getter private Vector receivedInfo = new Vector<>(); + public List> receivedHeaders = + Collections.synchronizedList(new ArrayList>()); + public void clear() { receivedInfo.clear(); + receivedHeaders.clear(); } } @@ -79,10 +88,18 @@ public class RappSimulatorController { ) public ResponseEntity serviceCallback( // - @RequestBody ServiceCallbackInfo body) { + @RequestBody ServiceCallbackInfo body, @RequestHeader Map headers) { + logHeaders(headers); logger.info("R-App callback body: {}", gson.toJson(body)); + this.testResults.receivedHeaders.add(headers); this.testResults.receivedInfo.add(body); return new ResponseEntity<>(HttpStatus.OK); } + private void logHeaders(Map headers) { + logger.debug("Header begin"); + headers.forEach((key, value) -> logger.debug(" key: {}, value: {}", key, value)); + logger.debug("Header end"); + } + } diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageConsumerTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageConsumerTest.java index 3b810ad6..08491207 100644 --- a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageConsumerTest.java +++ b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/dmaap/DmaapMessageConsumerTest.java @@ -43,6 +43,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClient; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.dmaap.DmaapRequestMessage.Operation; import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException; @@ -84,7 +85,7 @@ class DmaapMessageConsumerTest { @Test void successfulCase_dmaapNotConfigured_thenSleepAndRetryUntilConfig() throws Exception { - messageConsumerUnderTest = spy(new DmaapMessageConsumer(applicationConfigMock)); + messageConsumerUnderTest = spy(new DmaapMessageConsumer(applicationConfigMock, new SecurityContext(""))); setTaskNumberOfLoops(3); disableTaskDelay(); @@ -104,7 +105,7 @@ class DmaapMessageConsumerTest { @Test void returnErrorFromDmapp_thenSleepAndRetry() throws Exception { - messageConsumerUnderTest = spy(new DmaapMessageConsumer(applicationConfigMock)); + messageConsumerUnderTest = spy(new DmaapMessageConsumer(applicationConfigMock, new SecurityContext(""))); setTaskNumberOfLoops(2); disableTaskDelay(); @@ -129,7 +130,7 @@ class DmaapMessageConsumerTest { @Test void unParsableMessage_thenSendResponseAndContinue() throws Exception { - messageConsumerUnderTest = spy(new DmaapMessageConsumer(applicationConfigMock)); + messageConsumerUnderTest = spy(new DmaapMessageConsumer(applicationConfigMock, new SecurityContext(""))); setTaskNumberOfLoops(2); setUpMrConfig(); @@ -157,7 +158,7 @@ class DmaapMessageConsumerTest { @Test void testMessageParsing() throws ServiceException { - messageConsumerUnderTest = new DmaapMessageConsumer(applicationConfigMock); + messageConsumerUnderTest = new DmaapMessageConsumer(applicationConfigMock, new SecurityContext("")); String json = gson.toJson(dmaapRequestMessage()); { String jsonArrayOfObject = jsonArray(json); 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 1b1dad5c..f09bd05d 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 org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig.RicConfigUpdate.Type; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfigParser; @@ -89,9 +90,10 @@ class RefreshConfigTaskTest { private RefreshConfigTask createTestObject(boolean configFileExists, Rics rics, Policies policies, boolean stubConfigFileExists) { - - RefreshConfigTask obj = spy(new RefreshConfigTask(configurationFileMock, appConfig, rics, policies, - new Services(appConfig), new PolicyTypes(appConfig), new A1ClientFactory(appConfig))); + SecurityContext secContext = new SecurityContext(""); + RefreshConfigTask obj = + spy(new RefreshConfigTask(configurationFileMock, appConfig, rics, policies, new Services(appConfig), + new PolicyTypes(appConfig), new A1ClientFactory(appConfig, secContext), secContext)); if (stubConfigFileExists) { when(configurationFileMock.readFile()).thenReturn(Optional.empty()); doReturn(123L).when(configurationFileMock).getLastModified(); 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 f6c93b95..b76131df 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 @@ -43,6 +43,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1Client; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableRicConfig; import org.onap.ccsdk.oran.a1policymanagementservice.repository.Lock; @@ -335,6 +336,6 @@ class RicSupervisionTest { private RicSupervision createRicSupervision() { ApplicationConfig config = new ApplicationConfig(); - return new RicSupervision(rics, policies, a1ClientFactory, types, null, config); + return new RicSupervision(rics, policies, a1ClientFactory, types, null, config, new SecurityContext("")); } } 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 9dddcedb..a5795ac9 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 @@ -44,6 +44,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1Client; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory; import org.onap.ccsdk.oran.a1policymanagementservice.clients.AsyncRestClientFactory; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ImmutableRicConfig; import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policies; @@ -121,7 +122,8 @@ class RicSynchronizationTaskTest { private RicSynchronizationTask createTask() { ApplicationConfig config = new ApplicationConfig(); - AsyncRestClientFactory restClientFactory = new AsyncRestClientFactory(config.getWebClientConfig()); + AsyncRestClientFactory restClientFactory = + new AsyncRestClientFactory(config.getWebClientConfig(), new SecurityContext("")); return new RicSynchronizationTask(a1ClientFactoryMock, policyTypes, policies, services, restClientFactory, rics); }; 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 05df70ac..22f534cf 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 @@ -29,6 +29,7 @@ import java.util.Map; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1Client; import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory; +import org.onap.ccsdk.oran.a1policymanagementservice.clients.SecurityContext; import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig; import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes; import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric; @@ -44,7 +45,7 @@ public class MockA1ClientFactory extends A1ClientFactory { private final ApplicationConfig appConfig; public MockA1ClientFactory(ApplicationConfig config, PolicyTypes policyTypes) { - super(config); + super(config, new SecurityContext("")); this.policyTypes = policyTypes; this.appConfig = config; } @@ -70,7 +71,7 @@ public class MockA1ClientFactory extends A1ClientFactory { /** * Simulate network latency. The REST responses will be generated by separate * threads - * + * * @param delay the delay between the request and the response */ public void setResponseDelay(Duration delay) { -- cgit 1.2.3-korg