Add tests to improve code-coverage stats in Sonar 39/3339/2
authorLott, Christopher (cl778h) <cl778h@att.com>
Mon, 20 Apr 2020 23:25:08 +0000 (19:25 -0400)
committerLott, Christopher (cl778h) <cl778h@att.com>
Tue, 21 Apr 2020 12:22:06 +0000 (08:22 -0400)
Silence a few Sonar warnings also

Change-Id: Iac1e02485f099494ce1b7398a37d9336a76fe078
Signed-off-by: Lott, Christopher (cl778h) <cl778h@att.com>
14 files changed:
dashboard/webapp-backend/.gitignore
dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/AppStatsManager.java
dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/DashboardUserManager.java
dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/config/WebSecurityConfiguration.java
dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/AdminController.java
dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java
dashboard/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/model/RicInstance.java
dashboard/webapp-backend/src/main/resources/application.yaml
dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/config/WebSecurityMockConfiguration.java
dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/AdminControllerTest.java
dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/DefaultContextTest.java
dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/E2ManagerControllerTest.java
dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/controller/PortalRestCentralServiceTest.java
dashboard/webapp-backend/src/test/java/org/oransc/ric/portal/dashboard/model/ModelTest.java

index 02dbd44..33c1962 100644 (file)
@@ -32,3 +32,4 @@
 /application-tlab2.properties
 /application.properties
 /dashboard-users.json
+/dashboard-stats.json
index 98b58da..d9d0b2e 100644 (file)
@@ -118,7 +118,7 @@ public class AppStatsManager {
         * @return List of App stat objects by instance key, possibly empty
         */
        public List<AppStats> getStatsByInstance(String instanceKey) {
-               List<AppStats> statsByInstance = new ArrayList<AppStats>();
+               List<AppStats> 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);
                }
index 6358256..bf66995 100644 (file)
@@ -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
index 471002a..0a3f022 100644 (file)
@@ -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);
        }
 
        /*
index 1a1a75d..3369f15 100644 (file)
@@ -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<String> 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.")
index c34aa2f..4c800d9 100644 (file)
@@ -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
index 780bffc..451d17e 100644 (file)
@@ -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);
+       }
+
 }
index 5b936e3..a838556 100644 (file)
@@ -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:
index f348ecb..2c111db 100644 (file)
@@ -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);
        }
 
 }
index aa92e20..4deafe7 100644 (file)
@@ -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<String> 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<StatsDetailsTransport> bogusEntity = new HttpEntity<>(bogusDetails);
+               ResponseEntity<String> 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<String> 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<String> voidResponse = testRestTemplateAdminRole().exchange(uri99, HttpMethod.DELETE, null,
+                               String.class);
+               Assertions.assertTrue(voidResponse.getStatusCode().is4xxClientError());
        }
 
        @Test
index 43a77f1..dba0a32 100644 (file)
@@ -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:
+        * <UL>
+        * <LI>{@link PortalRestCentralServiceTest#createUserTest()}
+        * <LI>{@link PortalRestCentralServiceTest#updateUserTest()}
+        * </UL>
+        * 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");
        }
 
 }
index 28de9da..fb86630 100644 (file)
@@ -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<Void> 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<ResetRequest> entity = new HttpEntity<>(reset);
-               return testRestTemplateAdminRole().exchange(uri, HttpMethod.PUT, entity, Void.class);
-       }
-
-       @Test
-       public void resetTest() {
-               ResponseEntity<Void> 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<ResetRequest> entity = new HttpEntity<>(reset);
+               ResponseEntity<Void> 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);
index 7617bc2..48aa084 100644 (file)
@@ -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<Object> 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<Object> 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<Object> 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<Object> requestEntity = getEntityWithAuthHeaders(user);
                ResponseEntity<String> 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");
index 17fb48f..88bcf99 100644 (file)
@@ -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<RicInstanceKeyName>());
+               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());
+       }
+
 }