From: Lott, Christopher (cl778h) Date: Wed, 17 Jul 2019 18:28:11 +0000 (-0400) Subject: Move mock configurations to test area X-Git-Tag: R2~53 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F26%2F526%2F2;p=portal%2Fric-dashboard.git Move mock configurations to test area Add new DashboardTestServer class to support development. Demote mockito dependencies to test scope. Change-Id: I9dab0f9af61cad901892620d769e275091f953b8 Signed-off-by: Lott, Christopher (cl778h) --- diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 5a3198d1..b6eb3f20 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -20,7 +20,7 @@ RIC Dashboard Release Notes =========================== -Version 1.2.0, 12 July 2019 +Version 1.2.0, 17 July 2019 --------------------------- * Split URL properties into prefix/suffix parts * Add jacoco plugin to back-end for code coverage @@ -28,6 +28,7 @@ Version 1.2.0, 12 July 2019 * Clean code of issues reported by Sonar * Drop mock RAN names feature that supported R1 testing * Extend mock endpoints to simulate delay seen in tests +* Move mock configuration classes into test area Version 1.0.5, 5 July 2019 -------------------------- diff --git a/webapp-backend/README.md b/webapp-backend/README.md index 2909dede..8a142d78 100644 --- a/webapp-backend/README.md +++ b/webapp-backend/README.md @@ -1,12 +1,19 @@ # RIC Dashboard Web Application Backend +## Launch server + +Run `mvn -Dspring.config.name=application-abc spring-boot:run` to run a server configured +by the file 'application-abc.properties' in the local directory. + ## Development server -Run `mvn -Dspring.profiles.active=mock spring-boot:run` for a dev server. Navigate to `http://localhost:8080/swagger-ui.html`. +Set an environment variable via JVM argument "-Dorg.oransc.ric.portal.dashboard=mock" +and run the JUnit test case DashboardServerTest for a development server to run standalone +with mock configuration and data that simulates the behavior of remote endpoints. -## Alternate configuration +## Swagger API documentation -Run `mvn -Dspring.config.name=application-abc spring-boot:run` to read configuration from the file 'application-abc.properties' in the local directory. +View the server's API documentation at URL `http://localhost:8080/swagger-ui.html`. ## License diff --git a/webapp-backend/pom.xml b/webapp-backend/pom.xml index d7e12ec7..e96777fe 100644 --- a/webapp-backend/pom.xml +++ b/webapp-backend/pom.xml @@ -83,12 +83,13 @@ limitations under the License. springfox-swagger-ui ${springfox.version} + org.mockito mockito-core + test - org.springframework.boot spring-boot-starter-test diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardApplication.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardApplication.java index 9dfa5846..05778dc5 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardApplication.java +++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardApplication.java @@ -28,9 +28,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -// Using this package limits the annotation scan to the dashboard classes. -// Do not want Spring to find the autowired annotations in the generated -// classes. +// Limit scan to dashboard classes; exclude generated API classes @ComponentScan("org.oransc.ric.portal.dashboard") public class DashboardApplication { diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorConfiguration.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorConfiguration.java index 0101fc93..23fae063 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorConfiguration.java +++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorConfiguration.java @@ -38,7 +38,7 @@ import org.springframework.web.util.DefaultUriBuilderFactory; * container. */ @Configuration -@Profile("!mock") +@Profile("!test") public class A1MediatorConfiguration { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappConfiguration.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappConfiguration.java index 33a5384a..7fcb6744 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappConfiguration.java +++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappConfiguration.java @@ -38,7 +38,7 @@ import org.springframework.web.util.DefaultUriBuilderFactory; * Creates instances of the ANR xApp client APIs. */ @Configuration -@Profile("!mock") +@Profile("!test") public class AnrXappConfiguration { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerConfiguration.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerConfiguration.java index 93aadf69..6a112d89 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerConfiguration.java +++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerConfiguration.java @@ -39,7 +39,7 @@ import org.springframework.web.util.DefaultUriBuilderFactory; * container. */ @Configuration -@Profile("!mock") +@Profile("!test") public class AppManagerConfiguration { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerConfiguration.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerConfiguration.java index 4289a88c..0df61322 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerConfiguration.java +++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerConfiguration.java @@ -38,7 +38,7 @@ import org.springframework.web.util.DefaultUriBuilderFactory; * Creates an E2 manager client as a bean to be managed by the Spring container. */ @Configuration -@Profile("!mock") +@Profile("!test") public class E2ManagerConfiguration { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); diff --git a/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/DashboardTestServer.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/DashboardTestServer.java new file mode 100644 index 00000000..4b89bd5c --- /dev/null +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/DashboardTestServer.java @@ -0,0 +1,70 @@ +/*- + * ========================LICENSE_START================================= + * O-RAN-SC + * %% + * Copyright (C) 2019 AT&T Intellectual Property and Nokia + * %% + * 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.oransc.ric.portal.dashboard; + +import java.lang.invoke.MethodHandles; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import org.junit.jupiter.api.extension.ExtendWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +/** + * This class supports front-end web development. Placing this class in the test + * area allows excluding the mock configuration classes and the Mockito + * dependencies from the packaged version of the app. + * + * To launch a development server set the environment variable as listed below. + * This runs a Spring-Boot server with mock back-end beans, and keeps the server + * alive for manual testing. Supply this JVM argument: + * + *
+ * -Dorg.oransc.ric.portal.dashboard=mock
+ * 
+ */ +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) +@ActiveProfiles("test") +public class DashboardTestServer { + + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + /* + * Keeps the test server alive forever. Use a guard so this test is never run by + * Jenkins. + */ + @EnabledIfSystemProperty(named = "org.oransc.ric.portal.dashboard", matches = "mock") + @Test + public void keepServerAlive() { + logger.warn("Keeping server alive!"); + try { + synchronized (this) { + this.wait(); + } + } catch (Exception ex) { + logger.warn(ex.toString()); + } + } +} diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorMockConfiguration.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/A1MediatorMockConfiguration.java similarity index 97% rename from webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorMockConfiguration.java rename to webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/A1MediatorMockConfiguration.java index 351f1143..a4fb63fd 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/A1MediatorMockConfiguration.java +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/A1MediatorMockConfiguration.java @@ -17,7 +17,7 @@ * limitations under the License. * ========================LICENSE_END=================================== */ -package org.oransc.ric.portal.dashboard.config; +package org.oransc.ric.portal.dashboard.test.config; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; @@ -38,7 +38,7 @@ import org.springframework.http.HttpStatus; /** * Creates a mock implementation of the A1 mediator client API. */ -@Profile("mock") +@Profile("test") @Configuration public class A1MediatorMockConfiguration { diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappMockConfiguration.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/AnrXappMockConfiguration.java similarity index 98% rename from webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappMockConfiguration.java rename to webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/AnrXappMockConfiguration.java index 65960b91..d291945b 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AnrXappMockConfiguration.java +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/AnrXappMockConfiguration.java @@ -17,7 +17,7 @@ * limitations under the License. * ========================LICENSE_END=================================== */ -package org.oransc.ric.portal.dashboard.config; +package org.oransc.ric.portal.dashboard.test.config; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -45,7 +45,7 @@ import org.springframework.http.HttpStatus; /** * Creates a mock implementation of the ANR xApp client APIs. */ -@Profile("mock") +@Profile("test") @Configuration public class AnrXappMockConfiguration { diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerMockConfiguration.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/AppManagerMockConfiguration.java similarity index 98% rename from webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerMockConfiguration.java rename to webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/AppManagerMockConfiguration.java index ef1e9d5d..2df2b3d6 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/AppManagerMockConfiguration.java +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/AppManagerMockConfiguration.java @@ -17,7 +17,7 @@ * limitations under the License. * ========================LICENSE_END=================================== */ -package org.oransc.ric.portal.dashboard.config; +package org.oransc.ric.portal.dashboard.test.config; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; @@ -51,7 +51,7 @@ import org.springframework.http.HttpStatus; * Creates an implementation of the xApp manager client that answers requests * with mock data. */ -@Profile("mock") +@Profile("test") @Configuration public class AppManagerMockConfiguration { diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerMockConfiguration.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/E2ManagerMockConfiguration.java similarity index 98% rename from webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerMockConfiguration.java rename to webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/E2ManagerMockConfiguration.java index 4561dd7e..9454bfb6 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/E2ManagerMockConfiguration.java +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/config/E2ManagerMockConfiguration.java @@ -17,7 +17,7 @@ * limitations under the License. * ========================LICENSE_END=================================== */ -package org.oransc.ric.portal.dashboard.config; +package org.oransc.ric.portal.dashboard.test.config; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; @@ -45,7 +45,7 @@ import org.springframework.http.HttpStatus; /** * Creates a mock implementation of the E2 Manager client API. */ -@Profile("mock") +@Profile("test") @Configuration public class E2ManagerMockConfiguration { diff --git a/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/controller/AbstractControllerTest.java b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/controller/AbstractControllerTest.java index b06f9c4e..c4d9a4d6 100644 --- a/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/controller/AbstractControllerTest.java +++ b/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/test/controller/AbstractControllerTest.java @@ -40,7 +40,7 @@ import org.springframework.web.util.UriComponentsBuilder; @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) // Need the fake answers from the backend -@ActiveProfiles("mock") +@ActiveProfiles("test") public class AbstractControllerTest { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());