57d218ecc9eaa61e36d0c37c06370942bd0a68d6
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / PnfTopologyOperationRPCTest.java
1 package org.onap.sdnc.northbound;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Mockito.mock;
5 import static org.mockito.Mockito.when;
6 import static org.onap.sdnc.northbound.GenericResourceApiProvider.APP_NAME;
7 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NO_SERVICE_LOGIC_ACTIVE;
8 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NULL_OR_EMPTY_ERROR_PARAM;
9 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfDetailsBuilder;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfResponseInformation;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationInput;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationOutput;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceInformationBuilder;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceResponseInformation;
18
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.Mockito;
23 import org.mockito.runners.MockitoJUnitRunner;
24 import org.onap.sdnc.northbound.util.PropBuilder;
25 import org.opendaylight.mdsal.binding.api.DataBroker;
26 import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
27 import org.opendaylight.mdsal.binding.api.WriteTransaction;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationInput;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationOutput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
32 import org.opendaylight.yangtools.yang.common.RpcResult;
33
34 @RunWith(MockitoJUnitRunner.class)
35 public class PnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
36
37     private static final String SVC_OPERATION = "pnf-topology-operation";
38
39     @Before
40     public void setUp() throws Exception {
41         super.setUp();
42         svcClient.setScvOperation(SVC_OPERATION);
43     }
44
45     @Test
46     public void should_fail_when_service_info_not_present() throws Exception {
47
48         PnfTopologyOperationInput input = pnfTopologyOperationInput().build();
49
50         PnfTopologyOperationOutput output =
51             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
52
53         assertEquals("404", output.getResponseCode());
54         assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
55         assertEquals("Y", output.getAckFinalIndicator());
56     }
57
58
59     /*
60     @Test
61     public void should_fail_when_invalid_pnf_id() throws Exception {
62
63         PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
64             .setServiceInformation(build(serviceInformationBuilder().
65                 setServiceInstanceId("test-service-instance-id")
66             ))
67         );
68
69         PnfTopologyOperationOutput output =
70             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
71
72         assertEquals("404", output.getResponseCode());
73         assertEquals("invalid input, null or empty pnf-id", output.getResponseMessage());
74         assertEquals("Y", output.getAckFinalIndicator());
75     }*/
76
77
78     @Test
79     public void should_fail_when_client_execution_failed() throws Exception {
80
81         svcClient.mockHasGraph(true);
82         svcClient.mockExecute(new RuntimeException("test exception"));
83
84         PnfTopologyOperationInput input = pnfTopologyOperationInput()
85             .setServiceInformation(serviceInformationBuilder()
86                 .setServiceInstanceId("test-service-instance-id").build()
87             )
88             .setPnfDetails(pnfDetailsBuilder()
89                 .setPnfId("test-pnf-id").build()
90             ).build();
91
92         PnfTopologyOperationOutput output =
93             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
94
95         assertEquals("500", output.getResponseCode());
96         assertEquals("test exception", output.getResponseMessage());
97         assertEquals("Y", output.getAckFinalIndicator());
98     }
99
100     @Test
101     public void should_fail_when_client_has_no_graph() throws Exception {
102
103         svcClient.mockHasGraph(false);
104
105         PnfTopologyOperationInput input = pnfTopologyOperationInput()
106             .setServiceInformation(serviceInformationBuilder()
107                 .setServiceInstanceId("test-service-instance-id").build()
108             )
109             .setPnfDetails(pnfDetailsBuilder()
110                 .setPnfId("test-pnf-id").build()
111             ).build();
112
113         PnfTopologyOperationOutput output =
114             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
115
116         assertEquals("503", output.getResponseCode());
117         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
118         assertEquals("Y", output.getAckFinalIndicator());
119     }
120
121     @Test
122     public void should_fail_when_failed_to_update_mdsal() throws Exception {
123
124         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
125         svcClient.mockExecute(svcResultProp);
126         svcClient.mockHasGraph(true);
127         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
128         when(mockWriteTransaction.commit()).thenThrow(new TransactionChainClosedException("test exception"));
129
130         DataBroker spyDataBroker = Mockito.spy(dataBroker);
131         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
132         genericResourceApiProvider.setDataBroker(spyDataBroker);
133
134         PnfTopologyOperationInput input = pnfTopologyOperationInput()
135             .setServiceInformation(serviceInformationBuilder()
136                 .setServiceInstanceId("test-service-instance-id").build()
137             )
138             .setPnfDetails(pnfDetailsBuilder()
139                 .setPnfId("test-pnf-id").build()
140             ).build();
141
142         PnfTopologyOperationOutput output =
143             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
144
145         assertEquals("500", output.getResponseCode());
146         assertEquals("test exception", output.getResponseMessage());
147         assertEquals("Y", output.getAckFinalIndicator());
148     }
149
150     @Test
151     public void should_complete_with_success_when_no_errors() throws Exception {
152
153         svcClient.mockHasGraph(true);
154         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
155         svcClient.mockExecute(svcResultProp);
156
157         PnfTopologyOperationInput input = pnfTopologyOperationInput()
158             .setSdncRequestHeader(sdncRequestHeader()
159                 .setSvcRequestId("test-svc-request-id")
160                 .setSvcAction(SvcAction.Assign).build()
161             )
162             .setRequestInformation(requestInformation()
163                 .setRequestId("test-request-id")
164                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
165             )
166             .setServiceInformation(serviceInformationBuilder()
167                 .setServiceInstanceId("test-service-instance-id").build()
168             )
169             .setPnfDetails(pnfDetailsBuilder()
170                 .setPnfId("test-pnf-id").build()
171             ).build();
172
173         PnfTopologyOperationOutput output =
174             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
175
176         assertEquals("200", output.getResponseCode());
177         assertEquals("OK", output.getResponseMessage());
178         assertEquals("Y", output.getAckFinalIndicator());
179
180         PnfTopologyOperationOutput expectedPnfTopologyOperationOutput = createExpectedOutput(svcResultProp,
181             input);
182         assertEquals(expectedPnfTopologyOperationOutput, output);
183     }
184
185     private PnfTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
186         PnfTopologyOperationInput pnfTopologyOperationInput) {
187         return
188             pnfTopologyOperationOutput()
189                 .setSvcRequestId(pnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
190                 .setResponseCode(svcResultProp.get(svcClient.errorCode))
191                 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
192                 .setResponseMessage(svcResultProp.get(svcClient.errorMessage))
193                 .setServiceResponseInformation(serviceResponseInformation()
194                     .setInstanceId(pnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
195                     .setObjectPath(svcResultProp.get(svcClient.serviceObjectPath)).build()
196                 )
197                 .setPnfResponseInformation(pnfResponseInformation()
198                     .setInstanceId(pnfTopologyOperationInput.getPnfDetails().getPnfId())
199                     .setObjectPath(svcResultProp.get(svcClient.pnfObjectPath)).build()
200                 ).build();
201     }
202 }