Initial source code
[oam/tr069-adapter.git] / acs / application-booter / src / test / java / org / commscope / tr069adapter / acs / cpe / test / inform / TransferCompleteTest.java
1 /*\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : tr-069-adapter\r
4  * =================================================================================================\r
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
6  * =================================================================================================\r
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
9  * may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
14  * either express or implied. See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ===============LICENSE_END=======================================================================\r
17  */\r
18 \r
19 package org.commscope.tr069adapter.acs.cpe.test.inform;\r
20 \r
21 import static org.junit.Assert.assertEquals;\r
22 import static org.junit.Assert.fail;\r
23 \r
24 import javax.servlet.http.Cookie;\r
25 \r
26 import org.apache.activemq.broker.BrokerService;\r
27 import org.apache.commons.httpclient.HttpStatus;\r
28 import org.commscope.tr069adapter.acs.booter.ACSServiceBooter;\r
29 import org.commscope.tr069adapter.acs.common.DeviceInform;\r
30 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
31 import org.commscope.tr069adapter.acs.common.utils.AcsConstants;\r
32 import org.commscope.tr069adapter.acs.cpe.handler.DeviceValidator;\r
33 import org.commscope.tr069adapter.acs.cpe.rpc.Inform;\r
34 import org.commscope.tr069adapter.acs.requestprocessor.DeviceOperationInterface;\r
35 import org.commscope.tr069adapter.acs.requestprocessor.dao.DeviceRPCRequestRepository;\r
36 import org.commscope.tr069adapter.acs.requestprocessor.dto.SessionDTO;\r
37 import org.commscope.tr069adapter.acs.requestprocessor.impl.SessionManager;\r
38 import org.commscope.tr069adapter.acs.requestprocessor.impl.TR069EventNotificationService;\r
39 import org.junit.After;\r
40 import org.junit.Test;\r
41 import org.junit.runner.RunWith;\r
42 import org.mockito.Mockito;\r
43 import org.springframework.beans.factory.annotation.Autowired;\r
44 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\r
45 import org.springframework.boot.test.context.SpringBootTest;\r
46 import org.springframework.boot.test.mock.mockito.MockBean;\r
47 import org.springframework.http.MediaType;\r
48 import org.springframework.mock.web.MockHttpServletResponse;\r
49 import org.springframework.test.context.ContextConfiguration;\r
50 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r
51 import org.springframework.test.web.servlet.MockMvc;\r
52 import org.springframework.test.web.servlet.MvcResult;\r
53 import org.springframework.test.web.servlet.RequestBuilder;\r
54 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r
55 \r
56 @SpringBootTest(classes = {ACSServiceBooter.class})\r
57 @RunWith(SpringJUnit4ClassRunner.class)\r
58 @AutoConfigureMockMvc\r
59 @ContextConfiguration\r
60 public class TransferCompleteTest {\r
61 \r
62   @Autowired\r
63   private MockMvc mockMvc;\r
64 \r
65   @MockBean\r
66   private DeviceValidator deviceValidator;\r
67 \r
68   @MockBean\r
69   protected DeviceRPCRequestRepository deviceRPCRequestRepository;\r
70 \r
71   @MockBean\r
72   private TR069EventNotificationService tr069EventNotificationService;\r
73 \r
74   @MockBean\r
75   private DeviceOperationInterface deviceOperationInterface;\r
76 \r
77   @MockBean\r
78   private SessionManager sessionManager;\r
79 \r
80   @Autowired\r
81   BrokerService broker;\r
82 \r
83   @Test\r
84   public void processInformPnPTest() throws Exception {\r
85 \r
86     String exampleInform =\r
87         "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns3:Envelope xmlns:ns1=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:ns4=\"urn:dslforum-org:cwmp-1-0\" xmlns:ns3=\"http://schemas.xmlsoap.org/soap/envelope/\"><ns3:Header><ns4:ID ns3:mustUnderstand=\"1\">0</ns4:ID></ns3:Header><ns3:Body><ns4:TransferComplete><CommandKey>0005B9AAAA22</CommandKey><FaultStruct><FaultCode>0</FaultCode><FaultString></FaultString></FaultStruct><StartTime>2019-07-08T18:15:43.032Z</StartTime><CompleteTime>2019-07-08T18:15:43.032Z</CompleteTime></ns4:TransferComplete></ns3:Body></ns3:Envelope>";\r
88 \r
89     try {\r
90 \r
91       SessionDTO session = new SessionDTO();\r
92       session.setDeviceId("0005B9AAAA22");\r
93       session.setSessionId("sessionId");\r
94       session.setCurrentOperationId(10000L);\r
95 \r
96       TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
97       tr069DeviceDetails.setDeviceId("0005B9AAAA22");\r
98       tr069DeviceDetails.setConnectionRequestURL("dummyURL");\r
99       tr069DeviceDetails.setSoftwareVersion("10.2.1");\r
100       tr069DeviceDetails.setSoftwareVersion("xxx");\r
101 \r
102       Mockito.when(sessionManager.getSessionBySessionId(Mockito.anyString())).thenReturn(session);\r
103       Mockito.when(sessionManager.getLockedSession(Mockito.anyString())).thenReturn(session);\r
104       Mockito.when(sessionManager.updateSession(Mockito.any(SessionDTO.class))).thenReturn(session);\r
105       Mockito.when(sessionManager.generateUniqueSessionID()).thenReturn("newSessionId");\r
106 \r
107       Mockito.when(deviceOperationInterface.getDeviceDetails(Mockito.anyString()))\r
108           .thenReturn(tr069DeviceDetails);\r
109 \r
110       Mockito.doNothing().when(tr069EventNotificationService)\r
111           .sendDeviceInformToNBI(Mockito.any(DeviceInform.class));\r
112 \r
113       Mockito\r
114           .when(deviceValidator.isDeviceAuthorized(Mockito.any(Inform.class), Mockito.anyString()))\r
115           .thenReturn(new Boolean(true));\r
116 \r
117       Mockito.when(deviceValidator.validateDevice(Mockito.anyString(), Mockito.anyString(),\r
118           Mockito.anyString())).thenReturn(new Boolean(true));\r
119 \r
120       Mockito.when(deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(Mockito.anyString(),\r
121           Mockito.anyInt())).thenReturn(null);\r
122 \r
123       RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/CPEMgmt/acs")\r
124           .accept(MediaType.TEXT_PLAIN).content(exampleInform).header("Authorization", "basic")\r
125           .contentType(MediaType.TEXT_PLAIN);\r
126 \r
127       MvcResult result = mockMvc.perform(requestBuilder).andReturn();\r
128 \r
129       MockHttpServletResponse response = result.getResponse();\r
130       assertEquals(HttpStatus.SC_OK, response.getStatus());\r
131 \r
132       Cookie cookie = response.getCookie(AcsConstants.ACS_SESSIONID);\r
133       requestBuilder =\r
134           MockMvcRequestBuilders.post("/CPEMgmt/acs").accept(MediaType.TEXT_PLAIN).content("")\r
135               .header("Authorization", "basic").cookie(cookie).contentType(MediaType.TEXT_PLAIN);\r
136 \r
137       result = mockMvc.perform(requestBuilder).andReturn();\r
138 \r
139       response = result.getResponse();\r
140       assertEquals(HttpStatus.SC_NO_CONTENT, response.getStatus());\r
141     } catch (Exception e) {\r
142       fail(e.getMessage());\r
143     }\r
144   }\r
145 \r
146   @After\r
147   public void stopBroker() throws Exception {\r
148     try {\r
149       System.out.println("Tearing down the broker");\r
150       broker.stop();\r
151       broker.waitUntilStopped();\r
152       broker = null;\r
153     } catch (Exception e) {\r
154       e.printStackTrace();\r
155     }\r
156   }\r
157 \r
158 }\r