Skip to content
Snippets Groups Projects
Commit 5d1afedf authored by trantzas's avatar trantzas
Browse files

Merge branch '23-increase-test-coverage-in-tmf638' into 'develop'

Resolve "Increase test coverage in TMF638"

See merge request !18
parents 46e9246f 6f05a2c6
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 #5638 passed
/*-
* ========================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