b6869c7d23663a2d4ac708e74fbf7aacf16fb7e8
[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.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;
27
28 import java.nio.charset.StandardCharsets;
29 import java.nio.file.Files;
30 import java.nio.file.Paths;
31 import java.util.List;
32
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.AAISliceService;
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;
60
61 import lombok.SneakyThrows;
62
63 @EnableWireMock
64 @EnableConfigurationProperties
65 @SpringBootTest(
66     webEnvironment = WebEnvironment.RANDOM_PORT,
67     classes = {
68         AAIClientConfig.class,
69         SOClientConfig.class,
70         SlicingServiceImpl.class,
71         SlicingProperties.class,
72         DefaultServiceLcmService.class,
73     },
74     properties = {
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",
86     })
87 public class SlicingServiceImplIntegrationTest {
88
89     @MockBean ServiceLcmService serviceLcmService;
90     @Autowired AAISliceService aaiSliceService;
91     @Autowired SOSliceService soSliceService;
92     @Autowired SlicingProperties slicingProperties;
93
94     SlicingService slicingService;
95
96     @Value("${uui-server.client.so.username}")
97     String soUsername;
98
99     @Value("${uui-server.client.so.password}")
100     String soPassword;
101
102     @Value("${uui-server.client.aai.username}")
103     String aaiUsername;
104
105     @Value("${uui-server.client.aai.password}")
106     String aaiPassword;
107
108     @BeforeEach
109     void setup() {
110       slicingService = new SlicingServiceImpl(serviceLcmService,aaiSliceService,soSliceService, slicingProperties);
111     }
112
113     @Test
114     @SneakyThrows
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);
118         stubFor(
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))
125             .willReturn(
126                 aResponse().withBodyFile("submitOrdersResponse.json")
127             ));
128
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());
138     }
139
140     @Test
141     void thatSlicingOrdersCanBeListed() {
142         stubFor(
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"))
148             .willReturn(
149                 aResponse().withBodyFile("serviceInstancesResponse.json")
150             ));
151
152         ServiceResult result = slicingService.querySlicingOrderList(CsmfParamConstant.ALL, "1","10");
153
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());
169     }
170 }