2 * Copyright 2025 Deutsche Telekom.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.usecaseui.server.service.csmf.impl;
19 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
20 import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
21 import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson;
22 import static com.github.tomakehurst.wiremock.client.WireMock.get;
23 import static com.github.tomakehurst.wiremock.client.WireMock.post;
24 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertNotNull;
28 import java.nio.charset.StandardCharsets;
29 import java.nio.file.Files;
30 import java.nio.file.Paths;
31 import java.util.List;
33 import org.junit.jupiter.api.BeforeEach;
34 import org.junit.jupiter.api.Test;
35 import org.onap.usecaseui.server.bean.csmf.OrderInfo;
36 import org.onap.usecaseui.server.bean.csmf.OrderList;
37 import org.onap.usecaseui.server.bean.csmf.ServiceCreateResult;
38 import org.onap.usecaseui.server.bean.csmf.SlicingOrder;
39 import org.onap.usecaseui.server.bean.csmf.SlicingOrderDetail;
40 import org.onap.usecaseui.server.bean.nsmf.common.ServiceResult;
41 import org.onap.usecaseui.server.config.AAIClientConfig;
42 import org.onap.usecaseui.server.config.SOClientConfig;
43 import org.onap.usecaseui.server.constant.csmf.CsmfParamConstant;
44 import org.onap.usecaseui.server.constant.nsmf.NsmfParamConstant;
45 import org.onap.usecaseui.server.service.csmf.SlicingService;
46 import org.onap.usecaseui.server.service.csmf.config.SlicingProperties;
47 import org.onap.usecaseui.server.service.lcm.ServiceLcmService;
48 import org.onap.usecaseui.server.service.lcm.domain.aai.bean.AAICustomer;
49 import org.onap.usecaseui.server.service.lcm.impl.DefaultServiceLcmService;
50 import org.onap.usecaseui.server.service.slicingdomain.aai.AAISliceClient;
51 import org.onap.usecaseui.server.service.slicingdomain.so.SOSliceService;
52 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.beans.factory.annotation.Value;
54 import org.springframework.boot.context.properties.EnableConfigurationProperties;
55 import org.springframework.boot.test.context.SpringBootTest;
56 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
57 import org.springframework.boot.test.mock.mockito.MockBean;
58 import org.springframework.http.HttpHeaders;
59 import org.wiremock.spring.EnableWireMock;
61 import lombok.SneakyThrows;
64 @EnableConfigurationProperties
66 webEnvironment = WebEnvironment.RANDOM_PORT,
68 AAIClientConfig.class,
70 SlicingServiceImpl.class,
71 SlicingProperties.class,
72 DefaultServiceLcmService.class,
75 "spring.main.web-application-type=none", // only temporary
76 "uui-server.client.aai.baseUrl=${wiremock.server.baseUrl}",
77 "uui-server.client.aai.username=AAI",
78 "uui-server.client.aai.password=AAI",
79 "uui-server.client.so.baseUrl=${wiremock.server.baseUrl}",
80 "uui-server.client.so.username=InfraPortalClient",
81 "uui-server.client.so.password=password1",
82 "uui-server.slicing.service-invariant-uuid=someServiceInvariantUuid",
83 "uui-server.slicing.service-uuid=someServiceUuid",
84 "uui-server.slicing.global-subscriber-id=someGlobalSubscriberId",
85 "uui-server.slicing.service-type=someServiceType",
87 public class SlicingServiceImplIntegrationTest {
89 @MockBean ServiceLcmService serviceLcmService;
90 @Autowired AAISliceClient aaiSliceClient;
91 @Autowired SOSliceService soSliceService;
92 @Autowired SlicingProperties slicingProperties;
94 SlicingService slicingService;
96 @Value("${uui-server.client.so.username}")
99 @Value("${uui-server.client.so.password}")
102 @Value("${uui-server.client.aai.username}")
105 @Value("${uui-server.client.aai.password}")
110 slicingService = new SlicingServiceImpl(serviceLcmService,aaiSliceClient,soSliceService, slicingProperties);
115 void thatSORequestsAreCorrect() {
116 byte[] requestBytes = Files.readAllBytes(Paths.get("src/test/resources/__files/requests/submitOrdersRequest.json"));
117 String expectedRequestBody = new String(requestBytes, StandardCharsets.UTF_8);
119 post("/api/so-serviceInstances/v3")
120 .withBasicAuth(soUsername, soPassword)
121 .withHeader(HttpHeaders.ACCEPT, equalTo("application/json"))
122 .withHeader("X-TransactionId", equalTo("9999"))
123 .withHeader("X-FromAppId", equalTo("onap-cli"))
124 .withRequestBody(equalToJson(expectedRequestBody))
126 aResponse().withBodyFile("submitOrdersResponse.json")
129 SlicingOrder slicingOrder = new SlicingOrder();
130 SlicingOrderDetail detail = new SlicingOrderDetail();
131 detail.setLatency(10);
132 detail.setMaxNumberofUEs(10);
133 slicingOrder.setSlicing_order_info(detail);
134 ServiceResult serviceResult = slicingService.createSlicingService(slicingOrder);
135 ServiceCreateResult result = (ServiceCreateResult) serviceResult.getResult_body();
136 assertEquals("someServiceId", result.getService_id());
137 assertEquals("someOperationId", result.getOperation_id());
141 void thatSlicingOrdersCanBeListed() {
143 get(String.format("/api/aai-business/v13/customers/customer/%s/service-subscriptions/service-subscription/%s/service-instances?service-role=communication-service", "5GCustomer", "5G"))
144 .withBasicAuth(aaiUsername, aaiPassword)
145 .withHeader(HttpHeaders.ACCEPT, equalTo("application/json"))
146 .withHeader("X-TransactionId", equalTo("7777"))
147 .withHeader("X-FromAppId", equalTo("uui"))
149 aResponse().withBodyFile("serviceInstancesResponse.json")
152 ServiceResult result = slicingService.querySlicingOrderList(CsmfParamConstant.ALL, "1","10");
154 assertNotNull(result);
155 OrderList orderList = (OrderList) result.getResult_body();
156 assertEquals(2, orderList.getRecord_number());
157 OrderInfo orderInfo1 = orderList.getSlicing_order_list().get(0);
158 assertEquals("97740f7b-e205-48e9-819b-2ad997d78286", orderInfo1.getOrder_id());
159 assertEquals("1", orderInfo1.getOrder_index());
160 assertEquals("5G-smth", orderInfo1.getOrder_name());
161 assertEquals("Assigned", orderInfo1.getOrder_status());
162 assertEquals("General_Revenue-Bearing", orderInfo1.getService_snssai());
163 OrderInfo orderInfo2 = orderList.getSlicing_order_list().get(1);
164 assertEquals("97732f7b-e205-48e9-819b-2ad997d78286", orderInfo2.getOrder_id());
165 assertEquals("2", orderInfo2.getOrder_index());
166 assertEquals("5G-smth-else", orderInfo2.getOrder_name());
167 assertEquals("Assigned", orderInfo2.getOrder_status());
168 assertEquals("General_Revenue-Bearing", orderInfo2.getService_snssai());