Skip to content
Snippets Groups Projects
Commit ccd9329d authored by Nikolaos Kyriakoulis's avatar Nikolaos Kyriakoulis
Browse files

Added tests for methods of Api and Service in tmf.api.sim638

parent 46e9246f
No related branches found
No related tags found
2 merge requests!36Merging 2024Q2_RC into main, creating 2024Q2 Release,!18Resolve "Increase test coverage in TMF638"
Pipeline #5258 failed
/*-
* ========================LICENSE_START=================================
* org.etsi.osl.tmf.api
* %%
* Copyright (C) 2019 - 2024 openslice.io
* %%
* 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.etsi.osl.services.api.sim638;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.etsi.osl.tmf.sim638.api.*;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import java.io.IOException;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class CommonTests {
@Test
public void testApiException() {
int errorCode = 404;
String errorMessage = "Not Found";
ApiException exception = new ApiException(errorCode, errorMessage);
assertEquals(errorMessage, exception.getMessage());
}
@Test
public void testApiOriginFilter() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
FilterChain chain = mock(FilterChain.class);
ApiOriginFilter filter = new ApiOriginFilter();
filter.doFilter(request, response, chain);
verify(response).addHeader("Access-Control-Allow-Origin", "*");
verify(response).addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
verify(response).addHeader("Access-Control-Allow-Headers", "Content-Type");
verify(chain).doFilter(request, response);
}
@Test
public void testApiResponseMessage() {
int[] codes = {ApiResponseMessage.ERROR, ApiResponseMessage.WARNING, ApiResponseMessage.INFO, ApiResponseMessage.OK, ApiResponseMessage.TOO_BUSY, 6};
String[] types = {"error", "warning", "info", "ok", "too busy", "unknown"};
String[] messages = {"An error occured", "This is a warning", "Given info", "ok", "System is too busy", "unknown code"};
for (int i = 0; i < codes.length; i++) {
int code = codes[i];
String type = types[i];
String message = messages[i];
ApiResponseMessage responseMessage = new ApiResponseMessage(code, message);
assertEquals(message, responseMessage.getMessage());
assertEquals(code, responseMessage.getCode());
assertEquals(type, responseMessage.getType());
}
ApiResponseMessage responseMessage = new ApiResponseMessage();
responseMessage.setMessage("Error");
assertEquals("Error", responseMessage.getMessage());
responseMessage.setType("ok");
assertEquals("ok", responseMessage.getType());
responseMessage.setCode(ApiResponseMessage.OK);
assertEquals(ApiResponseMessage.OK, responseMessage.getCode());
}
@Test
public void testHubApiController() {
ObjectMapper objectMapper = new ObjectMapper();
HttpServletRequest request = new MockHttpServletRequest();
HubApiController controller = new HubApiController(objectMapper, request);
Optional<ObjectMapper> returnedObjectMapper = controller.getObjectMapper();
Optional<HttpServletRequest> returnedRequest = controller.getRequest();
assertTrue(returnedObjectMapper.isPresent());
assertTrue(returnedRequest.isPresent());
assertEquals(objectMapper, returnedObjectMapper.get());
assertEquals(request, returnedRequest.get());
}
@Test
public void testListenerApiController() {
ObjectMapper objectMapper = new ObjectMapper();
HttpServletRequest request = new MockHttpServletRequest();
ListenerApiController controller = new ListenerApiController(objectMapper, request);
Optional<ObjectMapper> returnedObjectMapper = controller.getObjectMapper();
Optional<HttpServletRequest> returnedRequest = controller.getRequest();
assertTrue(returnedObjectMapper.isPresent());
assertTrue(returnedRequest.isPresent());
assertEquals(objectMapper, returnedObjectMapper.get());
assertEquals(request, returnedRequest.get());
}
@Test
public void testNotFoundException() {
int errorCode = 404;
String errorMessage = "Not Found";
NotFoundException exception = new NotFoundException(errorCode, errorMessage);
assertEquals(errorMessage, exception.getMessage());
}
}
package org.etsi.osl.services.api.sim638;
import java.text.FieldPosition;
import java.util.Date;
import org.etsi.osl.tmf.sim638.api.RFC3339DateFormat;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class RFC3339DateFormatTest {
@Test
public void testFormat() {
RFC3339DateFormat rfc3339DateFormat = new RFC3339DateFormat();
Date date = new Date(1637484321000L);
StringBuffer stringBuffer = new StringBuffer();
FieldPosition fieldPosition = new FieldPosition(0);
StringBuffer formattedDate = rfc3339DateFormat.format(date, stringBuffer, fieldPosition);
assertEquals("2021-11-21T08:45:21.000Z", formattedDate.toString());
}
}
package org.etsi.osl.services.api.sim638;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.io.IOUtils;
import org.etsi.osl.tmf.JsonUtils;
import org.etsi.osl.tmf.OpenAPISpringBoot;
import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef;
import org.etsi.osl.tmf.scm633.model.ServiceSpecification;
import org.etsi.osl.tmf.scm633.model.ServiceSpecificationCreate;
import org.etsi.osl.tmf.sim638.api.ServiceApiController;
import org.etsi.osl.tmf.sim638.model.Service;
import org.etsi.osl.tmf.sim638.model.ServiceCreate;
import org.etsi.osl.tmf.sim638.service.ServiceRepoService;
import org.etsi.osl.tmf.so641.model.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
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.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.Principal;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@Transactional
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.MOCK , classes = OpenAPISpringBoot.class)
//@AutoConfigureTestDatabase //this automatically uses h2
@AutoConfigureMockMvc
@ActiveProfiles("testing")
//@TestPropertySource(
// locations = "classpath:application-testing.yml")
public class ServiceApiControllerTest {
@Autowired
private MockMvc mvc;
@Autowired
ServiceRepoService serviceRepoService;
@Autowired
private WebApplicationContext context;
@Autowired
private ObjectMapper objectMapper;
private ServiceApiController mockServiceApiController;
private ServiceRepoService mockServiceRepoService;
@Before
public void setup() throws Exception {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
// Mocks
mockServiceRepoService = mock(ServiceRepoService.class);
ObjectMapper mockObjectMapper = mock(ObjectMapper.class);
mockServiceApiController = new ServiceApiController(mockObjectMapper, null);
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testDeleteService() throws Exception {
String response = createService();
Service responsesService = JsonUtils.toJsonObj(response, Service.class);
String id = responsesService.getId();
mvc.perform(MockMvcRequestBuilders.delete("/serviceInventory/v4/service/" + id )
.with( SecurityMockMvcRequestPostProcessors.csrf())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().is(501) );
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testListService() throws Exception {
String response = mvc.perform(MockMvcRequestBuilders.get("/serviceInventory/v4/service" )
.with( SecurityMockMvcRequestPostProcessors.csrf())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk() )
.andReturn().getResponse().getContentAsString();
List<Service> serviceList = objectMapper.readValue(response, new TypeReference<List<Service>>() {});
assertThat(serviceList.size()).isEqualTo(serviceRepoService.findAll().size());
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testRetrieveService() throws Exception {
String response = createService();
Service responsesService = JsonUtils.toJsonObj(response, Service.class);
String id = responsesService.getId();
String response2 = mvc.perform(MockMvcRequestBuilders.get("/serviceInventory/v4/service/" + id)
.with( SecurityMockMvcRequestPostProcessors.csrf())
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk() )
.andReturn().getResponse().getContentAsString();
Service responsesService2 = JsonUtils.toJsonObj(response2, Service.class);
assertThat(responsesService2.getId()).isEqualTo(responsesService.getId());
assertThat(responsesService2.getCategory()).isEqualTo(responsesService.getCategory());
assertThat(responsesService2.getName()).isEqualTo(responsesService.getName());
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testCreateServiceHandleException() {
ServiceCreate serviceCreate = new ServiceCreate();
serviceCreate.setName("Test name");
when(mockServiceRepoService.addService(any()))
.thenThrow(new RuntimeException("Test exception"));
ResponseEntity<Service> response = mockServiceApiController.createService(mock(Principal.class), serviceCreate);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testListServiceHandleException(){
when(mockServiceRepoService.findAll())
.thenThrow(new RuntimeException("Test exception"));
ResponseEntity<List<Service>> response = mockServiceApiController.listService(mock(Principal.class), null, null, null);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testRetrieveServiceHandleException(){
when(mockServiceRepoService.findByUuid(any()))
.thenThrow(new RuntimeException("Test exception"));
ResponseEntity<Service> response = mockServiceApiController.retrieveService(mock(Principal.class), "test id", "");
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
}
private String createService() throws Exception {
int servicesCount = serviceRepoService.findAll().size();
File sspec = new File("src/test/resources/testServiceSpec.json");
InputStream in = new FileInputStream(sspec);
String sspectext = IOUtils.toString(in, "UTF-8");
ServiceSpecificationCreate sspeccr = JsonUtils.toJsonObj(sspectext, ServiceSpecificationCreate.class);
sspeccr.setName("Spec1");
ServiceSpecification responsesSpec = createServiceSpec( sspeccr);
ServiceOrderCreate serviceOrder = new ServiceOrderCreate();
serviceOrder.setCategory("Test Category");
serviceOrder.setDescription("A Test Service");
serviceOrder.setRequestedStartDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
serviceOrder.setRequestedCompletionDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
ServiceOrderItem soi = new ServiceOrderItem();
serviceOrder.getOrderItem().add(soi);
soi.setState(ServiceOrderStateType.ACKNOWLEDGED);
ServiceRestriction serviceRestriction = new ServiceRestriction();
ServiceSpecificationRef aServiceSpecificationRef = new ServiceSpecificationRef();
aServiceSpecificationRef.setId(responsesSpec.getId());
aServiceSpecificationRef.setName(responsesSpec.getName());
serviceRestriction.setServiceSpecification(aServiceSpecificationRef);
serviceRestriction.setName("aServiceRestriction");
soi.setService(serviceRestriction);
String response = mvc
.perform(MockMvcRequestBuilders.post("/serviceInventory/v4/service")
.with( SecurityMockMvcRequestPostProcessors.csrf())
.contentType(MediaType.APPLICATION_JSON).content(JsonUtils.toJson(serviceOrder)))
.andExpect(status().isOk()).andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
Service responseService = JsonUtils.toJsonObj(response, Service.class);
assertThat( serviceRepoService.findAll().size() ).isEqualTo( servicesCount + 1 );
assertThat(responseService.getCategory()).isEqualTo("Test Category");
assertThat(responseService.getDescription()).isEqualTo("A Test Service");
return response;
}
private ServiceSpecification createServiceSpec( ServiceSpecificationCreate serviceSpecificationCreate) throws Exception {
String response = mvc
.perform(MockMvcRequestBuilders.post("/serviceCatalogManagement/v4/serviceSpecification")
.with( SecurityMockMvcRequestPostProcessors.csrf())
.contentType(MediaType.APPLICATION_JSON).content(JsonUtils.toJson(serviceSpecificationCreate)))
.andExpect(status().isOk()).andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
ServiceSpecification responsesSpec = JsonUtils.toJsonObj(response, ServiceSpecification.class);
return responsesSpec;
}
}
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment