fb039d765b78c8a8ec3bf40aa78d3893a3fa2ccb
[usecase-ui/server.git] /
1 /**
2  * Copyright 2025 Deutsche Telekom.
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.onap.usecaseui.server.service.csmf.impl;
18
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.getRequestedFor;
24 import static com.github.tomakehurst.wiremock.client.WireMock.post;
25 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
26 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
27 import static com.github.tomakehurst.wiremock.client.WireMock.verify;
28 import static org.junit.jupiter.api.Assertions.assertEquals;
29 import static org.junit.jupiter.api.Assertions.assertNotNull;
30
31 import java.nio.charset.StandardCharsets;
32 import java.nio.file.Files;
33 import java.nio.file.Paths;
34
35 import org.junit.jupiter.api.BeforeEach;
36 import org.junit.jupiter.api.Test;
37 import org.onap.usecaseui.server.bean.csmf.OrderInfo;
38 import org.onap.usecaseui.server.bean.csmf.OrderList;
39 import org.onap.usecaseui.server.bean.csmf.ServiceCreateResult;
40 import org.onap.usecaseui.server.bean.csmf.SlicingOrder;
41 import org.onap.usecaseui.server.bean.csmf.SlicingOrderDetail;
42 import org.onap.usecaseui.server.bean.nsmf.common.ServiceResult;
43 import org.onap.usecaseui.server.config.AAIClientConfig;
44 import org.onap.usecaseui.server.config.SOClientConfig;
45 import org.onap.usecaseui.server.constant.csmf.CsmfParamConstant;
46 import org.onap.usecaseui.server.service.csmf.SlicingService;
47 import org.onap.usecaseui.server.service.csmf.config.SlicingProperties;
48 import org.onap.usecaseui.server.service.lcm.ServiceLcmService;
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.autoconfigure.EnableAutoConfiguration;
55 import org.springframework.boot.context.properties.EnableConfigurationProperties;
56 import org.springframework.boot.test.context.SpringBootTest;
57 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
58 import org.springframework.boot.test.mock.mockito.MockBean;
59 import org.springframework.http.HttpHeaders;
60 import org.wiremock.spring.EnableWireMock;
61
62 import lombok.SneakyThrows;
63
64 @EnableAutoConfiguration
65 @EnableWireMock
66 @EnableConfigurationProperties
67 @SpringBootTest(
68     webEnvironment = WebEnvironment.RANDOM_PORT,
69     classes = {
70         AAIClientConfig.class,
71         SOClientConfig.class,
72         SlicingServiceImpl.class,
73         SlicingProperties.class,
74         DefaultServiceLcmService.class,
75     },
76     properties = {
77         "spring.main.web-application-type=none", // only temporary
78         "uui-server.client.aai.baseUrl=${wiremock.server.baseUrl}",
79         "uui-server.client.aai.username=AAI",
80         "uui-server.client.aai.password=AAI",
81         "uui-server.client.so.baseUrl=${wiremock.server.baseUrl}",
82         "uui-server.client.so.username=InfraPortalClient",
83         "uui-server.client.so.password=password1",
84         "uui-server.slicing.service-invariant-uuid=someServiceInvariantUuid",
85         "uui-server.slicing.service-uuid=someServiceUuid",
86         "uui-server.slicing.global-subscriber-id=someGlobalSubscriberId",
87         "uui-server.slicing.service-type=someServiceType",
88     })
89 public class SlicingServiceImplIntegrationTest {
90
91     @MockBean ServiceLcmService serviceLcmService;
92     @Autowired AAISliceClient aaiSliceClient;
93     @Autowired SOSliceService soSliceService;
94     @Autowired SlicingProperties slicingProperties;
95
96     SlicingService slicingService;
97
98     @Value("${uui-server.client.so.username}")
99     String soUsername;
100
101     @Value("${uui-server.client.so.password}")
102     String soPassword;
103
104     @Value("${uui-server.client.aai.username}")
105     String aaiUsername;
106
107     @Value("${uui-server.client.aai.password}")
108     String aaiPassword;
109
110     @Value("${uui-server.client.aai.apiVersion}")
111     String apiVersion;
112
113     @BeforeEach
114     void setup() {
115       slicingService = new SlicingServiceImpl(serviceLcmService,aaiSliceClient,soSliceService, slicingProperties);
116     }
117
118     @Test
119     @SneakyThrows
120     void thatSORequestsAreCorrect() {
121         byte[] requestBytes = Files.readAllBytes(Paths.get("src/test/resources/__files/requests/submitOrdersRequest.json"));
122         String expectedRequestBody = new String(requestBytes, StandardCharsets.UTF_8);
123         stubFor(
124           post("/api/so-serviceInstances/v3")
125             .withBasicAuth(soUsername, soPassword)
126             .withHeader(HttpHeaders.ACCEPT, equalTo("application/json"))
127             .withHeader("X-TransactionId", equalTo("9999"))
128             .withHeader("X-FromAppId", equalTo("onap-cli"))
129             .withRequestBody(equalToJson(expectedRequestBody))
130             .willReturn(
131                 aResponse().withBodyFile("submitOrdersResponse.json")
132             ));
133
134         SlicingOrder slicingOrder = new SlicingOrder();
135         SlicingOrderDetail detail = new SlicingOrderDetail();
136         detail.setLatency(10);
137         detail.setMaxNumberofUEs(10);
138         slicingOrder.setSlicing_order_info(detail);
139         ServiceResult serviceResult = slicingService.createSlicingService(slicingOrder);
140         ServiceCreateResult result = (ServiceCreateResult) serviceResult.getResult_body();
141         assertEquals("someServiceId", result.getService_id());
142         assertEquals("someOperationId", result.getOperation_id());
143     }
144
145     @Test
146     void thatSlicingOrdersCanBeListed() {
147         stubFor(
148             get("/aai/%s/business/customers/customer/%s/service-subscriptions/service-subscription/%s/service-instances?service-role=communication-service".formatted(apiVersion, "5GCustomer", "5G"))
149             .withBasicAuth(aaiUsername, aaiPassword)
150             .withHeader(HttpHeaders.ACCEPT, equalTo("application/json"))
151             .withHeader("X-TransactionId", equalTo("7777"))
152             .withHeader("X-FromAppId", equalTo("uui"))
153             .willReturn(
154                 aResponse().withBodyFile("serviceInstancesResponse.json")
155             ));
156
157         ServiceResult result = slicingService.querySlicingOrderList(CsmfParamConstant.ALL, "1","10");
158
159         verify(getRequestedFor(urlEqualTo("/aai/%s/business/customers/customer/%s/service-subscriptions/service-subscription/%s/service-instances?service-role=communication-service".formatted(apiVersion, "5GCustomer", "5G"))));
160         assertNotNull(result);
161         OrderList orderList = (OrderList) result.getResult_body();
162         assertEquals(2, orderList.getRecord_number());
163         OrderInfo orderInfo1 = orderList.getSlicing_order_list().get(0);
164         assertEquals("97740f7b-e205-48e9-819b-2ad997d78286", orderInfo1.getOrder_id());
165         assertEquals("1", orderInfo1.getOrder_index());
166         assertEquals("5G-smth", orderInfo1.getOrder_name());
167         assertEquals("Assigned", orderInfo1.getOrder_status());
168         assertEquals("General_Revenue-Bearing", orderInfo1.getService_snssai());
169         OrderInfo orderInfo2 = orderList.getSlicing_order_list().get(1);
170         assertEquals("97732f7b-e205-48e9-819b-2ad997d78286", orderInfo2.getOrder_id());
171         assertEquals("2", orderInfo2.getOrder_index());
172         assertEquals("5G-smth-else", orderInfo2.getOrder_name());
173         assertEquals("Assigned", orderInfo2.getOrder_status());
174         assertEquals("General_Revenue-Bearing", orderInfo2.getService_snssai());
175     }
176 }