From: Lott, Christopher (cl778h) Date: Mon, 20 Apr 2020 23:25:08 +0000 (-0400) Subject: Add tests to improve code-coverage stats in Sonar X-Git-Tag: 2.0.2~7^2 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=05c8688cd695a381eadaaa05f2027cf3f68feb5c;p=portal%2Fric-dashboard.git Add tests to improve code-coverage stats in Sonar Silence a few Sonar warnings also Change-Id: Iac1e02485f099494ce1b7398a37d9336a76fe078 Signed-off-by: Lott, Christopher (cl778h) --- diff --git a/dashboard/webapp-backend/.gitignore b/dashboard/webapp-backend/.gitignore index 02dbd440..33c1962e 100644 --- a/dashboard/webapp-backend/.gitignore +++ b/dashboard/webapp-backend/.gitignore @@ -32,3 +32,4 @@ /application-tlab2.properties /application.properties /dashboard-users.json +/dashboard-stats.json diff --git a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/AppStatsManager.java b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/AppStatsManager.java index 98b58da3..d9d0b2e0 100644 --- a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/AppStatsManager.java +++ b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/AppStatsManager.java @@ -118,7 +118,7 @@ public class AppStatsManager { * @return List of App stat objects by instance key, possibly empty */ public List getStatsByInstance(String instanceKey) { - List statsByInstance = new ArrayList(); + List statsByInstance = new ArrayList<>(); for (AppStats st : this.stats) { if (st.getInstanceKey().equals(instanceKey)) { logger.debug("getStatsByInstance: match on instance key {}", instanceKey); @@ -167,8 +167,9 @@ public class AppStatsManager { if (st.getInstanceKey().equals(instanceKey) && st.getStatsDetails().getAppName().equals(statsSetupRequest.getAppName()) && st.getStatsDetails().getMetricUrl().equals(statsSetupRequest.getMetricUrl())) { - String msg = "App exists with name " + statsSetupRequest.getAppName() + " and url " - + statsSetupRequest.getMetricUrl() + " on instance key " + instanceKey; + // Log the existing object to avoid using tainted (user-supplied) data + String msg = "App exists with name " + st.getStatsDetails().getAppName() + " and url " + + st.getStatsDetails().getMetricUrl() + " on instance key " + st.getInstanceKey(); logger.warn(msg); throw new StatsManagerException(msg); } @@ -191,7 +192,7 @@ public class AppStatsManager { public synchronized void updateStats(String instanceKey, StatsDetailsTransport statsSetupRequest) throws StatsManagerException, IOException { logger.debug("updateStats: appId {}, instanceKey {}", statsSetupRequest.getAppId(), instanceKey); - boolean editStatsObjectFound = false; + boolean statsObjectFound = false; for (AppStats st : stats) { if (st.getInstanceKey().equals(instanceKey) @@ -199,12 +200,12 @@ public class AppStatsManager { AppStats newAppStat = new AppStats(instanceKey, statsSetupRequest); stats.remove(st); stats.add(newAppStat); - editStatsObjectFound = true; + statsObjectFound = true; saveStats(); break; } } - if (!editStatsObjectFound) { + if (!statsObjectFound) { String msg = "Stats to be updated does not exist "; logger.warn(msg); throw new StatsManagerException(msg); @@ -213,13 +214,13 @@ public class AppStatsManager { public synchronized AppStats deleteStats(String instanceKey, int appId) throws StatsManagerException, IOException { logger.debug("deleteStats: appId {}, instanceKey {}", appId, instanceKey); - boolean deleteStatsObjectFound = false; + boolean statsObjectFound = false; AppStats stat = null; for (AppStats st : stats) { if (st.getInstanceKey().equals(instanceKey) && st.getStatsDetails().getAppId() == appId) { stat = st; stats.remove(stat); - deleteStatsObjectFound = true; + statsObjectFound = true; try { saveStats(); break; @@ -229,8 +230,10 @@ public class AppStatsManager { } } - if (!deleteStatsObjectFound) { + if (!statsObjectFound) { String msg = "deleteStats: no match on app id {} of instance key {}"; + // Replace log pattern-breaking characters + instanceKey = instanceKey.replaceAll("[\n|\r|\t]", "_"); logger.warn(msg, appId, instanceKey); throw new StatsManagerException(msg); } diff --git a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardUserManager.java b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardUserManager.java index 6358256f..bf66995c 100644 --- a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardUserManager.java +++ b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardUserManager.java @@ -30,6 +30,7 @@ import org.onap.portalsdk.core.onboarding.exception.PortalAPIException; import org.onap.portalsdk.core.restful.domain.EcompUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -41,6 +42,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * * Migrate to a database someday? */ +@Profile("!test") public class DashboardUserManager { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); @@ -72,7 +74,7 @@ public class DashboardUserManager { } /** - * Constructur that accepts a file path + * Constructor that accepts a file path * * @param userFilePath * File path diff --git a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/WebSecurityConfiguration.java b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/WebSecurityConfiguration.java index 471002ad..0a3f022e 100644 --- a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/WebSecurityConfiguration.java +++ b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/WebSecurityConfiguration.java @@ -61,9 +61,9 @@ public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Value("${portalapi.appname}") private String appName; @Value("${portalapi.username}") - private String userName; + private String portalApiUsername; @Value("${portalapi.password}") - private String password; + private String portalApiPassword; @Value("${portalapi.decryptor}") private String decryptor; @Value("${portalapi.usercookie}") @@ -114,7 +114,7 @@ public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { public PortalAuthManager portalAuthManagerBean() throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException { logger.debug("portalAuthManagerBean"); - return new PortalAuthManager(appName, userName, password, decryptor, userCookie); + return new PortalAuthManager(appName, portalApiUsername, portalApiPassword, decryptor, userCookie); } /* diff --git a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/AdminController.java b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/AdminController.java index 1a1a75d1..3369f156 100644 --- a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/AdminController.java +++ b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/AdminController.java @@ -39,7 +39,6 @@ import org.oransc.ric.portal.dashboard.model.SuccessTransport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.annotation.Secured; @@ -72,9 +71,6 @@ public class AdminController { public static final String XAPPMETRICS_METHOD = "metrics"; public static final String STATAPPMETRIC_METHOD = "appmetric"; - @Value("${metrics.url.ml}") - private String mlAppMetricsUrl; - @Autowired private DashboardUserManager dashboardUserManager; @@ -152,11 +148,10 @@ public class AdminController { @PutMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/" + STATAPPMETRIC_METHOD) @Secured({ DashboardConstants.ROLE_ADMIN }) - public ResponseEntity updateStats(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey, + public void updateStats(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey, @RequestBody StatsDetailsTransport statsSetupRequest) throws StatsManagerException, IOException { logger.debug("updateStats for instance {} request {}", instanceKey, statsSetupRequest); appStatsManager.updateStats(instanceKey, statsSetupRequest); - return ResponseEntity.ok(null); } @ApiOperation(value = "Deletes xApp metric status.") diff --git a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java index c34aa2fc..4c800d94 100644 --- a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java +++ b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java @@ -93,7 +93,8 @@ public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptio } /** - * Logs a warning if an invalid RIC instance key is used. + * Logs the error and generates a response when a REST controller method takes + * an UnknownInstanceException, an invalid RIC instance key was used. * * @param ex * The exception @@ -109,7 +110,8 @@ public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptio } /** - * Logs a warning if a StatsManagerException is thrown. + * Logs the error and generates a response when a REST controller method takes + * an StatsManagerException. * * @param ex * The exception diff --git a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/model/RicInstance.java b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/model/RicInstance.java index 780bffc5..451d17ed 100644 --- a/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/model/RicInstance.java +++ b/dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/model/RicInstance.java @@ -20,6 +20,8 @@ package org.oransc.ric.portal.dashboard.model; +import java.util.Objects; + /** * POJO for RIC instance details. */ @@ -39,11 +41,13 @@ public class RicInstance extends RicInstanceKeyName { super(); } + @Override public RicInstance key(String key) { super.key(key); return this; } + @Override public RicInstance name(String name) { super.name(name); return this; @@ -108,4 +112,16 @@ public class RicInstance extends RicInstanceKeyName { return result; } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RicInstance other = (RicInstance) obj; + return Objects.equals(appUrlPrefix, other.appUrlPrefix) && Objects.equals(pltUrlPrefix, other.pltUrlPrefix); + } + } diff --git a/dashboard/webapp-backend/src/main/resources/application.yaml b/dashboard/webapp-backend/src/main/resources/application.yaml index 5b936e3a..a838556f 100644 --- a/dashboard/webapp-backend/src/main/resources/application.yaml +++ b/dashboard/webapp-backend/src/main/resources/application.yaml @@ -30,8 +30,8 @@ server: # paths to files that store details; # use a persistent volume in a K8S deployment -userfile: users.json -statsfile: stats.json +userfile: dashboard-users.json +statsfile: dashboard-stats.json # Dashboard properties related to Portal portalapi: @@ -48,12 +48,6 @@ portalapi: # Instance-specific URL prefixes must be supplied at deployment time -# A1 Mediator -a1med: - url: - # uses pltUrlPrefix - suffix: /a1mediator - # App Manager appmgr: url: diff --git a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/WebSecurityMockConfiguration.java b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/WebSecurityMockConfiguration.java index f348ecb2..2c111db5 100644 --- a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/WebSecurityMockConfiguration.java +++ b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/WebSecurityMockConfiguration.java @@ -57,9 +57,9 @@ public class WebSecurityMockConfiguration extends WebSecurityConfigurerAdapter { @Value("${portalapi.appname}") private String appName; @Value("${portalapi.username}") - private String userName; + private String portalApiUsername; @Value("${portalapi.password}") - private String password; + private String portalApiPassword; @Value("${portalapi.decryptor}") private String decryptor; @Value("${portalapi.usercookie}") @@ -99,9 +99,8 @@ public class WebSecurityMockConfiguration extends WebSecurityConfigurerAdapter { @Bean public PortalAuthManager portalAuthManagerBean() throws Exception { logger.debug("portalAuthManagerBean"); - return new PortalAuthManager(IPortalRestCentralService.CREDENTIALS_APP, - IPortalRestCentralService.CREDENTIALS_USER, IPortalRestCentralService.CREDENTIALS_PASS, decryptor, - userCookie); + return new PortalAuthManager(IPortalRestCentralService.CREDENTIALS_APP, portalApiUsername, portalApiPassword, + decryptor, userCookie); } } diff --git a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/AdminControllerTest.java b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/AdminControllerTest.java index aa92e202..4deafe7e 100644 --- a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/AdminControllerTest.java +++ b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/AdminControllerTest.java @@ -22,11 +22,13 @@ package org.oransc.ric.portal.dashboard.controller; import java.lang.invoke.MethodHandles; import java.net.URI; import java.util.List; + +import org.junit.Assert; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; -import org.junit.jupiter.api.MethodOrderer; import org.onap.portalsdk.core.restful.domain.EcompUser; import org.oransc.ric.portal.dashboard.DashboardConstants; import org.oransc.ric.portal.dashboard.config.RICInstanceMockConfiguration; @@ -40,6 +42,7 @@ import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClientException; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class AdminControllerTest extends AbstractControllerTest { @@ -119,6 +122,12 @@ public class AdminControllerTest extends AbstractControllerTest { statsDetails.setMetricUrl("https://www.example2-next.com"); AppStats stNext = testRestTemplateAdminRole().postForObject(uri, statsDetails, AppStats.class); Assertions.assertTrue(st.getStatsDetails().getAppId() < stNext.getStatsDetails().getAppId()); + try { + testRestTemplateAdminRole().postForObject(uri, statsDetails, AppStats.class); + Assert.assertTrue(false); + } catch (RestClientException ex) { + logger.info("Caught exception on create as expected: {}", ex.toString()); + } } @Order(3) @@ -142,6 +151,14 @@ public class AdminControllerTest extends AbstractControllerTest { ResponseEntity stringResponse = testRestTemplateAdminRole().exchange(uri, HttpMethod.PUT, entity, String.class); Assertions.assertTrue(stringResponse.getStatusCode().is2xxSuccessful()); + + StatsDetailsTransport bogusDetails = new StatsDetailsTransport(); + bogusDetails.setAppId(-1); + bogusDetails.setAppName("bogus"); + HttpEntity bogusEntity = new HttpEntity<>(bogusDetails); + ResponseEntity voidResponse = testRestTemplateAdminRole().exchange(uri, HttpMethod.PUT, bogusEntity, + String.class); + Assertions.assertTrue(voidResponse.getStatusCode().is4xxClientError()); } @Order(4) @@ -163,6 +180,13 @@ public class AdminControllerTest extends AbstractControllerTest { ResponseEntity stringResponse = testRestTemplateAdminRole().exchange(uri, HttpMethod.DELETE, null, String.class); Assertions.assertTrue(stringResponse.getStatusCode().is2xxSuccessful()); + + URI uri99 = buildUri(null, AdminController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, + RICInstanceMockConfiguration.INSTANCE_KEY_1, AdminController.STATAPPMETRIC_METHOD, + DashboardConstants.APP_ID, "999999"); + ResponseEntity voidResponse = testRestTemplateAdminRole().exchange(uri99, HttpMethod.DELETE, null, + String.class); + Assertions.assertTrue(voidResponse.getStatusCode().is4xxClientError()); } @Test diff --git a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/DefaultContextTest.java b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/DefaultContextTest.java index 43a77f19..dba0a32b 100644 --- a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/DefaultContextTest.java +++ b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/DefaultContextTest.java @@ -22,34 +22,48 @@ package org.oransc.ric.portal.dashboard.controller; import java.lang.invoke.MethodHandles; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; 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; /** * Tests whether the default (not mock) configuration classes run to completion. */ @ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("default") +// This way of setting the active profile should not be necessary. See: +// https://github.com/spring-projects/spring-boot/issues/19788 +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = "spring.profiles.active:default") public class DefaultContextTest { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - // If this test is annotated and run by maven, two cases in - // PortalRestCentralServiceTest fail. I traced it down to a second - // occurrence of the Dashboard user manager bean, which I can only speculate - // gets instantiated when the active profile is not "test". Because I cannot - // explain nor fix the behavior, this remains commented out. - // @Test + /** + * I expect the server to loaded then be torn down again. And when a single test + * is run, that is the behavior. But if all the tests are run, this test is + * reached while working thru the package and it appears that the "default" + * profile is added to the active "test" profile. Junit continues on thru the + * remaining tests, the non-mock configuration bean is used to authenticate + * Portal API requests, but because it has no username and password (the entries + * in application.yaml are blank), access is denied and these tests fail: + *
    + *
  • {@link PortalRestCentralServiceTest#createUserTest()} + *
  • {@link PortalRestCentralServiceTest#updateUserTest()} + *
+ * Maybe: + * + * I worked around the problem by using the application.yaml credentials. + * I also annotated this class above trying to limit the active profile, + * but I'm not confident it is working nor that it's needed. + */ + @Test public void contextLoads() { // Silence Sonar warning about missing assertion. Assertions.assertTrue(logger.isWarnEnabled()); - logger.info("Context loads on default profile"); + logger.info("DefaultContextTest#contextLoads on default profile"); } } diff --git a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/E2ManagerControllerTest.java b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/E2ManagerControllerTest.java index 28de9da3..fb866309 100644 --- a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/E2ManagerControllerTest.java +++ b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/E2ManagerControllerTest.java @@ -23,9 +23,11 @@ import java.lang.invoke.MethodHandles; import java.net.URI; import java.util.List; -import org.junit.After; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.oransc.ric.portal.dashboard.DashboardConstants; import org.oransc.ric.portal.dashboard.config.E2ManagerMockConfiguration; import org.oransc.ric.portal.dashboard.config.RICInstanceMockConfiguration; @@ -41,28 +43,13 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class E2ManagerControllerTest extends AbstractControllerTest { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private ResponseEntity reset() { - URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, - RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.NODEB_PREFIX, "ignored", - E2ManagerController.RESET_METHOD); - logger.info("Invoking {}", uri); - ResetRequest reset = new ResetRequest(); - HttpEntity entity = new HttpEntity<>(reset); - return testRestTemplateAdminRole().exchange(uri, HttpMethod.PUT, entity, Void.class); - } - - @Test - public void resetTest() { - ResponseEntity voidResponse = reset(); - logger.debug("resetTest: response {}", voidResponse); - Assertions.assertTrue(voidResponse.getStatusCode().is2xxSuccessful()); - } - @Test + @Order(1) public void versionTest() { URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.VERSION_METHOD); logger.info("Invoking {}", uri); @@ -71,6 +58,7 @@ public class E2ManagerControllerTest extends AbstractControllerTest { } @Test + @Order(2) public void healthTest() { URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.HEALTH_METHOD); @@ -80,6 +68,7 @@ public class E2ManagerControllerTest extends AbstractControllerTest { } @Test + @Order(3) public void ranDetailsTest() { URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.RAN_METHOD); @@ -91,6 +80,7 @@ public class E2ManagerControllerTest extends AbstractControllerTest { } @Test + @Order(4) public void nodebListTest() { URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.NODEB_LIST_METHOD); @@ -102,6 +92,7 @@ public class E2ManagerControllerTest extends AbstractControllerTest { } @Test + @Order(5) public void nodebStatusTest() { URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.NODEB_PREFIX, @@ -111,8 +102,24 @@ public class E2ManagerControllerTest extends AbstractControllerTest { Assertions.assertNotNull(response.getRanName()); } + // This empties the list of RAN elements + @Test + @Order(6) + public void resetTest() { + URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, + RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.NODEB_PREFIX, "ignored", + E2ManagerController.RESET_METHOD); + logger.info("Invoking {}", uri); + ResetRequest reset = new ResetRequest(); + HttpEntity entity = new HttpEntity<>(reset); + ResponseEntity voidResponse = testRestTemplateAdminRole().exchange(uri, HttpMethod.PUT, entity, Void.class); + logger.debug("resetTest: response {}", voidResponse); + Assertions.assertTrue(voidResponse.getStatusCode().is2xxSuccessful()); + } + // Aka big--button test, run this last - @After + @Test + @Order(7) public void nodebShutdownPutTest() { URI uri = buildUri(null, E2ManagerController.CONTROLLER_PATH, DashboardConstants.RIC_INSTANCE_KEY, RICInstanceMockConfiguration.INSTANCE_KEY_1, E2ManagerController.NODEB_SHUTDOWN_METHOD); diff --git a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/PortalRestCentralServiceTest.java b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/PortalRestCentralServiceTest.java index 7617bc2d..48aa0844 100644 --- a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/PortalRestCentralServiceTest.java +++ b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/PortalRestCentralServiceTest.java @@ -34,6 +34,7 @@ import org.onap.portalsdk.core.restful.domain.EcompUser; import org.oransc.ric.portal.dashboard.DashboardConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -43,6 +44,12 @@ public class PortalRestCentralServiceTest extends AbstractControllerTest { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + // Get values from configuration, probably blank + @Value("${portalapi.username}") + private String portalApiUsername; + @Value("${portalapi.password}") + private String portalApiPassword; + @Test public void getAnalyticsTest() { // paths are hardcoded here exactly like the EPSDK-FW library :( @@ -65,8 +72,8 @@ public class PortalRestCentralServiceTest extends AbstractControllerTest { private HttpEntity getEntityWithAuthHeaders(Object body) { HttpHeaders headers = new HttpHeaders(); - headers.set(IPortalRestCentralService.CREDENTIALS_USER, IPortalRestCentralService.CREDENTIALS_USER); - headers.set(IPortalRestCentralService.CREDENTIALS_PASS, IPortalRestCentralService.CREDENTIALS_PASS); + headers.set(IPortalRestCentralService.CREDENTIALS_USER, portalApiUsername); + headers.set(IPortalRestCentralService.CREDENTIALS_PASS, portalApiPassword); HttpEntity entity = new HttpEntity<>(body, headers); return entity; } @@ -84,9 +91,10 @@ public class PortalRestCentralServiceTest extends AbstractControllerTest { return user; } + /** See comments in {@link DefaultContextTest} */ @Test public void createUserTest() { - final String loginId = "login1"; + final String loginId = "login-" + Long.toString(System.currentTimeMillis()); URI create = buildUri(null, PortalApiConstants.API_PREFIX, "user"); logger.info("createUserTest invoking {}", create); HttpEntity requestEntity = getEntityWithAuthHeaders(createEcompUser(loginId)); @@ -95,15 +103,16 @@ public class PortalRestCentralServiceTest extends AbstractControllerTest { Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); } + /** See comments in {@link DefaultContextTest} */ @Test public void updateUserTest() { - final String loginId = "login2"; + final String loginId = "login-" + Long.toString(System.currentTimeMillis()); URI create = buildUri(null, PortalApiConstants.API_PREFIX, "user"); EcompUser user = createEcompUser(loginId); logger.info("updateUserTest invoking {}", create); HttpEntity requestEntity = getEntityWithAuthHeaders(user); ResponseEntity response = restTemplate.exchange(create, HttpMethod.POST, requestEntity, String.class); - logger.info("updateUserTest response {}", response); + logger.info("updateUserTest create response {}", response); Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); URI update = buildUri(null, PortalApiConstants.API_PREFIX, "user", loginId); user.setEmail("user@company.org"); diff --git a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/model/ModelTest.java b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/model/ModelTest.java index 17fb48f3..88bcf990 100644 --- a/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/model/ModelTest.java +++ b/dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/model/ModelTest.java @@ -37,6 +37,27 @@ public class ModelTest extends AbstractModelTest { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private void checkAppStats(AppStats m) { + Assert.assertEquals(s1, m.getInstanceKey()); + Assert.assertTrue(i1 == m.getStatsDetails().getAppId()); + Assert.assertEquals(s2, m.getStatsDetails().getAppName()); + Assert.assertEquals(s3, m.getStatsDetails().getMetricUrl()); + } + + @Test + public void testAppStats() { + StatsDetailsTransport n = new StatsDetailsTransport(); + n.setAppId(i1); + n.setAppName(s2); + n.setMetricUrl(s3); + AppStats m = new AppStats(); + m = new AppStats(s1, n); + m.setInstanceKey(s1); + m.setStatsDetails(n); + checkAppStats(m); + logger.info(m.toString()); + } + private void checkAppTransport(AppTransport m) { Assert.assertEquals(s1, m.getName()); Assert.assertEquals(s2, m.getVersion()); @@ -183,4 +204,42 @@ public class ModelTest extends AbstractModelTest { logger.info(m.toString()); } + private void checkRicRegionTransport(RicRegionTransport m) { + Assert.assertEquals(s1, m.getName()); + Assert.assertFalse(m.getInstances().isEmpty()); + } + + @Test + public void testRicRegionTransport() { + RicRegionTransport m = new RicRegionTransport().name(s1); + m.instances(new ArrayList()); + m.getInstances().add(new RicInstanceKeyName(s1, s2)); + checkRicRegionTransport(m); + Assert.assertTrue(m.equals(m)); + Assert.assertFalse(m.equals(null)); + Assert.assertFalse(m.equals(new RicRegionTransport())); + Assert.assertNotEquals(1, m.hashCode()); + logger.info(m.toString()); + } + + private void checkStatsDetailsTransport(StatsDetailsTransport m) { + Assert.assertTrue(i1 == m.getAppId()); + Assert.assertEquals(s1, m.getAppName()); + Assert.assertEquals(s2, m.getMetricUrl()); + } + + @Test + public void testStatDetailsTransport() { + StatsDetailsTransport m = new StatsDetailsTransport(); + m.setAppId(i1); + m.setAppName(s1); + m.setMetricUrl(s2); + checkStatsDetailsTransport(m); + Assert.assertTrue(m.equals(m)); + Assert.assertFalse(m.equals(null)); + Assert.assertFalse(m.equals(new StatsDetailsTransport())); + Assert.assertNotEquals(1, m.hashCode()); + logger.info(m.toString()); + } + }