1 /*******************************************************************************
 
   2  *  ============LICENSE_START=======================================================
 
   4  *  ================================================================================
 
   5  *   Copyright (C) 2022 Wipro Limited.
 
   6  *   ==============================================================================
 
   7  *     Licensed under the Apache License, Version 2.0 (the "License");
 
   8  *     you may not use this file except in compliance with the License.
 
   9  *     You may obtain a copy of the License at
 
  11  *          http://www.apache.org/licenses/LICENSE-2.0
 
  13  *     Unless required by applicable law or agreed to in writing, software
 
  14  *     distributed under the License is distributed on an "AS IS" BASIS,
 
  15  *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  *     See the License for the specific language governing permissions and
 
  17  *     limitations under the License.
 
  18  *     ============LICENSE_END=========================================================
 
  20  *******************************************************************************/
 
  22 package org.onap.slice.analysis.ms.service;
 
  24 import static org.junit.Assert.assertEquals;
 
  25 import static org.junit.Assert.assertSame;
 
  26 import static org.junit.Assert.assertTrue;
 
  28 import com.fasterxml.jackson.databind.ObjectMapper;
 
  31 import java.nio.file.Files;
 
  32 import java.nio.file.Paths;
 
  33 import java.util.ArrayList;
 
  34 import java.util.List;
 
  36 import org.json.JSONObject;
 
  37 import org.junit.Before;
 
  38 import org.junit.Rule;
 
  39 import org.junit.Test;
 
  40 import org.junit.rules.ExpectedException;
 
  41 import org.junit.runner.RunWith;
 
  42 import org.mockito.InjectMocks;
 
  43 import org.mockito.Mock;
 
  44 import org.mockito.Mockito;
 
  45 import org.mockito.MockitoAnnotations;
 
  46 import org.onap.slice.analysis.ms.aai.AaiService;
 
  47 import org.onap.slice.analysis.ms.models.AggregatedConfig;
 
  48 import org.onap.slice.analysis.ms.models.Configuration;
 
  49 import org.onap.slice.analysis.ms.models.SliceConfigRequest;
 
  50 import org.onap.slice.analysis.ms.models.SliceConfigResponse;
 
  51 import org.onap.slice.analysis.ms.restclients.DesRestClient;
 
  52 import org.powermock.api.mockito.PowerMockito;
 
  53 import org.powermock.core.classloader.annotations.PowerMockIgnore;
 
  54 import org.powermock.core.classloader.annotations.PrepareForTest;
 
  55 import org.powermock.modules.junit4.PowerMockRunner;
 
  56 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
  57 import org.slf4j.Logger;
 
  58 import org.slf4j.LoggerFactory;
 
  59 import org.springframework.boot.test.context.SpringBootTest;
 
  60 import org.springframework.http.HttpStatus;
 
  61 import org.springframework.http.ResponseEntity;
 
  62 import org.springframework.test.context.junit4.SpringRunner;
 
  64 @RunWith(PowerMockRunner.class)
 
  65 @PowerMockRunnerDelegate(SpringRunner.class)
 
  66 @PrepareForTest({SliceUtilization.class, Configuration.class})
 
  67 @PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"})
 
  68 @SpringBootTest(classes = SliceUtilizationTest.class)
 
  69 public class SliceUtilizationTest {
 
  71     ObjectMapper objectMapper = new ObjectMapper();
 
  73     Configuration configuration = Configuration.getInstance();
 
  76     SliceUtilization sliceUtilization;
 
  79     AaiService aaiService;
 
  82     DesRestClient desRestClient;
 
  85     public ExpectedException exception = ExpectedException.none();
 
  89         MockitoAnnotations.initMocks(this);
 
  93     public void getPmDataTest() throws Exception {
 
  94         configuration.setDesUrl("http://des:1681/datalake/v1/exposure/pm_data");
 
  95         configuration.setPmDataDurationInWeeks(4);
 
  96         PowerMockito.mockStatic(SliceUtilization.class);
 
  97         PowerMockito.mockStatic(Configuration.class);
 
  98         PowerMockito.when(Configuration.getInstance()).thenReturn(configuration);
 
 101             pmData = new String(Files.readAllBytes(Paths.get("src/test/resources/pm_data.json")));
 
 102         } catch (Exception e) {
 
 106         Mockito.when(desRestClient.sendPostRequest(Mockito.any(), Mockito.any(), Mockito.any()))
 
 107                 .thenReturn(new ResponseEntity<>(pmData, HttpStatus.OK));
 
 108         JSONObject actualResponse = sliceUtilization.getPMData("001-1100");
 
 109         assertTrue(actualResponse.has("result"));
 
 114     public void calculateSliceUtilizationTest() throws Exception {
 
 116         PowerMockito.mockStatic(SliceUtilization.class);
 
 117         List<JSONObject> pmDataList = new ArrayList<>();
 
 120             pmData = new String(Files.readAllBytes(Paths.get("src/test/resources/pm_data.json")));
 
 121             JSONObject pmDataObj = new JSONObject(pmData);
 
 122             pmDataList.add(pmDataObj);
 
 123             pmDataList.add(pmDataObj);
 
 124             pmDataList.add(pmDataObj);
 
 125         } catch (Exception e) {
 
 129         AggregatedConfig actualResponse = sliceUtilization.calculateSliceUtilization(pmDataList);
 
 130         assertEquals(190857028, (int) actualResponse.getDLThptPerSlice());
 
 131         assertEquals(119285978, (int) actualResponse.getULThptPerSlice());
 
 135     public void getSliceUtilizationDataTest() throws Exception {
 
 137         PowerMockito.mockStatic(SliceUtilization.class);
 
 138         SliceConfigRequest sliceConfigRequest = new SliceConfigRequest();
 
 139         List<String> sliceIdentifiersList = new ArrayList<>();
 
 140         sliceIdentifiersList.add("14559ead-f4fe-4c1c-a94c-8015fad3ea35");
 
 141         sliceIdentifiersList.add("14559ead-f4fe-4c1c-a94c-8015fad3ea36");
 
 142         sliceConfigRequest.setSliceIdentifiers(sliceIdentifiersList);
 
 143         List<String> configParamsList = new ArrayList<>();
 
 144         configParamsList.add("dLThptPerSlice");
 
 145         configParamsList.add("uLThptPerSlice");
 
 146         sliceConfigRequest.setConfigParams(configParamsList);
 
 147         List<String> snssaiList = new ArrayList<>();
 
 148         snssaiList.add("01-06E442");
 
 149         snssaiList.add("01-B989BD");
 
 150         configuration.setDesUrl("http://des:1681/datalake/v1/exposure/pm_data");
 
 151         configuration.setPmDataDurationInWeeks(4);
 
 153         PowerMockito.mockStatic(SliceUtilization.class);
 
 154         PowerMockito.mockStatic(Configuration.class);
 
 155         PowerMockito.when(Configuration.getInstance()).thenReturn(configuration);
 
 159             Mockito.when(aaiService.getSnssaiList(Mockito.any())).thenReturn(snssaiList);
 
 161             String pmData = new String(Files.readAllBytes(Paths.get("src/test/resources/pm_data.json")));
 
 162             Mockito.when(desRestClient.sendPostRequest(Mockito.any(), Mockito.any(), Mockito.any()))
 
 163                     .thenReturn(new ResponseEntity<>(pmData, HttpStatus.OK));
 
 164         } catch (Exception e) {
 
 168         SliceConfigResponse actualResponse = sliceUtilization.getSliceUtilizationData(sliceConfigRequest);
 
 169         String actualResponseString = objectMapper.writeValueAsString(actualResponse);
 
 170         SliceConfigResponse sliceConfigResponse = objectMapper
 
 171                 .readValue(new File("src/test/resources/sliceConfigResponse.json"), SliceConfigResponse.class);
 
 172         assertEquals(objectMapper.writeValueAsString(sliceConfigResponse), actualResponseString);