diff options
author | Lasse Kaihlavirta <l.kaihlavirt@partner.samsung.com> | 2021-03-24 08:56:10 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2021-03-24 08:56:10 +0000 |
commit | 29e0ba3179409458b96089dd37452d4a11cc32d3 (patch) | |
tree | 615dfa2bb37b0cc6a1c5605b15b5253a2404d224 /src/test/java/org/onap/a1pesimulator/controller/RanA1ControllerTest.java | |
parent | 14433f2704a39d737e79543fe66db53d6d288697 (diff) | |
parent | 5ea372baed3b743dbf3ddeffb8fe1a0acdf376d6 (diff) |
Merge changes Idbdec7b3,I643dadac,I2f54e1d5,I2ead5203
* changes:
Provide initial a1-pe-sim docs
Initial code check-in for A1 Policy Enforcement Simulator
Add basic .gitignore
Add linters setup
Diffstat (limited to 'src/test/java/org/onap/a1pesimulator/controller/RanA1ControllerTest.java')
-rw-r--r-- | src/test/java/org/onap/a1pesimulator/controller/RanA1ControllerTest.java | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/src/test/java/org/onap/a1pesimulator/controller/RanA1ControllerTest.java b/src/test/java/org/onap/a1pesimulator/controller/RanA1ControllerTest.java new file mode 100644 index 0000000..5b846c4 --- /dev/null +++ b/src/test/java/org/onap/a1pesimulator/controller/RanA1ControllerTest.java @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2021 Samsung Electronics + * 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 + */ + +package org.onap.a1pesimulator.controller; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.onap.a1pesimulator.TestHelpers.FIRST_UE_CELL_ID; +import static org.onap.a1pesimulator.TestHelpers.FIRST_UE_HANDOVER_CELL; +import static org.onap.a1pesimulator.TestHelpers.FIRST_UE_ID; +import static org.onap.a1pesimulator.controller.URLHelper.getHealthCheckEndpoint; +import static org.onap.a1pesimulator.controller.URLHelper.getPolicyPath; +import static org.onap.a1pesimulator.controller.URLHelper.getPolicyTypePath; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.collect.Lists; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.a1pesimulator.data.ue.UserEquipment; +import org.onap.a1pesimulator.service.ue.RanUeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +@SpringBootTest +@AutoConfigureMockMvc +@RunWith(SpringRunner.class) +public class RanA1ControllerTest { + + private static final String FIRST_POLICY_TYPE_ID = "1000"; + private static final Policy.Preference FIRST_POLICY_PREFERENCE = Policy.Preference.AVOID; + private static final String FIRST_POLICY_ORIGINAL_ID = "ue1"; + private static final String TEST_POLICY_SCHEMA = + "{\n" + " \"name\": \"samsung_policy_type\",\n" + " \"description\": \"samsung policy type;\",\n" + + " \"policy_type_id\": 1000,\n" + " \"create_schema\": {\n" + + " \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n" + + " \"title\": \"Samsung_demo\",\n" + " \"description\": \"Samsung demo policy type\",\n" + + " \"type\": \"object\",\n" + " \"additionalProperties\": false,\n" + " \"required\": [\n" + + " \"scope\",\n" + " \"resources\"\n" + " ]\n" + " }\n" + "}"; + + @Autowired + private MockMvc mvc; + + @Autowired + private ObjectMapper mapper; + + @Autowired + RanUeService ranUeService; + + @Test + public void testHealthcheck() throws Exception { + this.mvc.perform(get(getHealthCheckEndpoint())); + } + + @Test + public void testGetPolicyTypes() throws Exception { + String firstPolicyURL = URLHelper.getPolicyTypePath("1000"); + mvc.perform(put(firstPolicyURL).content(TEST_POLICY_SCHEMA)).andExpect(status().isCreated()); + + String[] policyTypes = mapper.readValue(getFromController(getPolicyTypePath()), String[].class); + + assertEquals(FIRST_POLICY_TYPE_ID, policyTypes[0]); + } + + @Test + public void testGetPolicy() throws Exception { + // Remove escaping + Policy policy = mapper.readValue(getFromController(getPolicyPath("3", "1")), Policy.class); + + assertEquals(FIRST_POLICY_ORIGINAL_ID, policy.getScope().getUeId()); + assertEquals(FIRST_POLICY_PREFERENCE, policy.getResources().get(0).getPreference()); + } + + @Test + public void testPutPolicyAndTriggerHandover() throws Exception { + String policyURL = getPolicyPath("3", "1"); + + mvc.perform(put(policyURL).content(getHandoverPolicy())).andExpect(status().isAccepted()); + + // Remove escaping + Policy policy = mapper.readValue(getFromController(policyURL), Policy.class); + + assertEquals(FIRST_UE_ID, policy.getScope().getUeId()); + + assertEquals(FIRST_POLICY_PREFERENCE, policy.getResources().get(0).getPreference()); + assertEquals(FIRST_UE_CELL_ID, policy.getResources().get(0).getCellIdList().get(0)); + + UserEquipment userEquipment = ranUeService.getUserEquipment(FIRST_UE_ID).orElse(null); + + assertNotNull(userEquipment); + assertEquals(FIRST_UE_HANDOVER_CELL, userEquipment.getCellId()); + + mvc.perform(put(policyURL).content(getOriginalPolicy())).andExpect(status().isAccepted()); + } + + @Test + public void testPutPolicyAndCantHandover() throws Exception { + String policyURL = getPolicyPath("3", "1"); + + // trigger cellId==null in the onPolicy + mvc.perform(put(policyURL).content(getHandoverPolicyWithoutCellId())).andExpect(status().isAccepted()); + + // trigger canHandover==false in the onPolicy + mvc.perform(put(policyURL).content(getOriginalPolicy())).andExpect(status().isAccepted()); + } + + @Test + public void shouldDeletePolicyInstanceAndReturn200() throws Exception { + String url = getPolicyPath("3", "1"); + mvc.perform(delete(url)).andExpect(status().isAccepted()); + } + + @Test + public void shouldReturn404WhenPolicyInstanceNotExists() throws Exception { + String url = getPolicyPath("10", "321123"); + mvc.perform(delete(url)).andExpect(status().isNotFound()); + } + + private String getFromController(String url) throws Exception { + return this.mvc.perform(get(url)).andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); + } + + private String getOriginalPolicy() throws JsonProcessingException { + return mapper.writeValueAsString( + Policy.builder().scope(Policy.Scope.builder().ueId(FIRST_POLICY_ORIGINAL_ID).build()).resources( + Lists.newArrayList(Policy.Resources.builder().cellIdList(Lists.newArrayList(FIRST_UE_CELL_ID)) + .preference(Policy.Preference.AVOID).build())).build()); + } + + private String getHandoverPolicy() throws JsonProcessingException { + return mapper.writeValueAsString(Policy.builder().scope(Policy.Scope.builder().ueId(FIRST_UE_ID).build()) + .resources(Lists.newArrayList(Policy.Resources.builder().cellIdList( + Lists.newArrayList(FIRST_UE_CELL_ID)).preference( + Policy.Preference.AVOID).build())).build()); + } + + private String getHandoverPolicyWithoutCellId() throws JsonProcessingException { + return mapper.writeValueAsString(Policy.builder().scope(Policy.Scope.builder().ueId(FIRST_UE_ID).build()) + .resources(Lists.newArrayList( + Policy.Resources.builder().cellIdList(Lists.newArrayList()) + .preference(Policy.Preference.AVOID).build())) + .build()); + } + + @Data + @Builder + @JsonSerialize + @NoArgsConstructor + @AllArgsConstructor + private static class Policy { + + private Scope scope; + private List<Resources> resources; + + @Data + @Builder + @JsonSerialize + @NoArgsConstructor + @AllArgsConstructor + private static class Scope { + + private String ueId; + } + + @Data + @Builder + @JsonSerialize + @NoArgsConstructor + @AllArgsConstructor + private static class Resources { + + private List<String> cellIdList; + private Preference preference; + } + + public enum Preference { + SHALL("SHALL"), PREFER("PREFER"), AVOID("AVOID"), FORBID("FORBID"); + public final String value; + + Preference(String stateName) { + this.value = stateName; + } + } + + } +} |