Conditional test cases
[music.git] / src / test / java / org / onap / music / unittests / TstRestMusicAdminAPI.java
1 /*
2  * ============LICENSE_START========================================== org.onap.music
3  * =================================================================== Copyright (c) 2017 AT&T
4  * Intellectual Property ===================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
6  * in compliance with the License. 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 distributed under the License
11  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12  * or implied. See the License for the specific language governing permissions and limitations under
13  * the License.
14  * 
15  * ============LICENSE_END=============================================
16  * ====================================================================
17  */
18
19 package org.onap.music.unittests;
20
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23 import static org.junit.Assert.assertNotEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
26
27
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.UUID;
32
33 import javax.servlet.http.HttpServletResponse;
34 import javax.ws.rs.core.MultivaluedMap;
35 import javax.ws.rs.core.Response;
36 import javax.ws.rs.core.UriInfo;
37
38 import org.apache.curator.test.TestingServer;
39 import org.junit.AfterClass;
40 import org.junit.BeforeClass;
41 import org.junit.FixMethodOrder;
42 import org.junit.Ignore;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.junit.runners.MethodSorters;
46 import org.mindrot.jbcrypt.BCrypt;
47 import org.mockito.InjectMocks;
48 import org.mockito.Mock;
49 import org.mockito.Mockito;
50 import org.mockito.MockitoAnnotations;
51 import org.onap.music.authentication.MusicAuthentication;
52 import org.onap.music.conductor.conditionals.JsonConditional;
53 import org.onap.music.conductor.conditionals.RestMusicConditionalAPI;
54 import org.onap.music.datastore.MusicDataStoreHandle;
55 import org.onap.music.datastore.PreparedQueryObject;
56 import org.onap.music.datastore.jsonobjects.JsonDelete;
57 import org.onap.music.datastore.jsonobjects.JsonInsert;
58 import org.onap.music.datastore.jsonobjects.JsonKeySpace;
59 import org.onap.music.datastore.jsonobjects.JsonLeasedLock;
60 import org.onap.music.datastore.jsonobjects.JsonOnboard;
61 import org.onap.music.datastore.jsonobjects.JsonTable;
62 import org.onap.music.main.MusicCore;
63 import org.onap.music.main.MusicUtil;
64 import org.onap.music.rest.RestMusicAdminAPI;
65 import org.onap.music.rest.RestMusicHealthCheckAPI;
66
67 import com.datastax.driver.core.DataType;
68 import com.datastax.driver.core.ResultSet;
69 import com.datastax.driver.core.Row;
70 import com.sun.jersey.core.util.Base64;
71
72 public class TstRestMusicAdminAPI {
73
74     RestMusicAdminAPI admin = new RestMusicAdminAPI();
75     static PreparedQueryObject testObject;
76
77     @Mock
78     HttpServletResponse http;
79
80     @Mock
81     UriInfo info;
82     
83     static String appName = "TestApp";
84     static String userId = "TestUser";
85     static String password = "TestPassword";
86     static String adminName = "username";
87     static String adminPassword = "password";
88     static String adminAuthData = adminName +":"+adminPassword;
89     static String wrongAdminAuthData = adminName+"123"+":"+adminPassword;
90     static String authData = userId+":"+password;
91     static String wrongAuthData = userId+":"+"pass";
92     static String authorization = new String(Base64.encode(authData.getBytes()));
93     static String wrongAuthorization = new String(Base64.encode(wrongAuthData.getBytes()));
94     static String adminAuthorization = new String(Base64.encode(adminAuthData.getBytes()));
95     static String worngAdminAuthorization = new String(Base64.encode(wrongAdminAuthData.getBytes()));
96     
97     static boolean isAAF = false;
98     static UUID uuid = UUID.fromString("abc66ccc-d857-4e90-b1e5-df98a3d40ce6");
99     static String keyspaceName = "testCassa";
100     static String tableName = "employees";
101     static String tableNameConditional = "Conductor";
102     static String xLatestVersion = "X-latestVersion";
103     static String onboardUUID = null;
104     static String lockId = null;
105     static String lockName = "testCassa.employees.sample3";
106
107     @BeforeClass
108     public static void init() throws Exception {
109                 System.out.println("Testing RestMusicAdmin class");
110                 //PowerMockito.mockStatic(MusicAuthentication.class);
111         try {
112                 MusicDataStoreHandle.mDstoreHandle = CassandraCQL.connectToEmbeddedCassandra();
113                         createAdminTable();
114                 } catch (Exception e) {
115                         e.printStackTrace();
116                         throw new Exception("Unable to initialize before TestRestMusicData test class. " + e.getMessage());
117                 }
118     }
119
120     @AfterClass
121     public static void tearDownAfterClass() throws Exception {
122         testObject = new PreparedQueryObject();
123         testObject.appendQueryString("DROP KEYSPACE IF EXISTS " + keyspaceName);
124         MusicCore.eventualPut(testObject);
125     }    
126
127     @Ignore
128     @Test
129     public void test6_onboard() throws Exception {
130         System.out.println("Testing application onboarding");
131                 
132         JsonOnboard jsonOnboard = new JsonOnboard();
133         jsonOnboard.setAppname("TestApp2");
134         jsonOnboard.setIsAAF("false"); jsonOnboard.setUserId("TestUser2");
135         jsonOnboard.setPassword("TestPassword2");
136
137         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
138         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
139         /*resultMap.containsKey("success"); onboardUUID =
140                         resultMap.get("Generated AID").toString();
141         assertEquals("Your application TestApp2 has been onboarded with MUSIC.",
142                         resultMap.get("Success")); */
143         assertEquals(200, response.getStatus());
144     }
145     
146     @Test
147     public void test6_onboardCantReachAAF() throws Exception {
148         System.out.println("Testing application onboarding without reaching aaf");        
149         JsonOnboard jsonOnboard = new JsonOnboard();
150         jsonOnboard.setAppname("TestApp2");
151         jsonOnboard.setIsAAF("false"); jsonOnboard.setUserId("TestUser2");
152         jsonOnboard.setPassword("TestPassword2");
153
154         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
155         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
156         //TODO FIX when we can authenticate
157         assertEquals(401, response.getStatus());
158     }
159
160     @Ignore
161         @Test
162     public void test6_onboard_duplicate() throws Exception {
163         JsonOnboard jsonOnboard = new JsonOnboard();
164         jsonOnboard.setAppname("TestApp2");
165         jsonOnboard.setIsAAF("false");
166         jsonOnboard.setUserId("TestUser2");
167         jsonOnboard.setPassword("TestPassword2");
168         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
169         assertEquals(204, response.getStatus());
170     }
171
172     // Missing appname
173         @Ignore
174     @Test
175     public void test6_onboard1() throws Exception {
176         JsonOnboard jsonOnboard = new JsonOnboard();
177         jsonOnboard.setIsAAF("false");
178         jsonOnboard.setUserId("TestUser2");
179         jsonOnboard.setPassword("TestPassword2");
180         Map<String, Object> resultMap = (Map<String, Object>) admin.onboardAppWithMusic(jsonOnboard,adminAuthorization).getEntity();
181 //        assertTrue(resultMap.containsKey("error"));
182         //System.out.println("--->" + resultMap.toString());
183         //assertEquals("Unauthorized: Please check the request parameters. Some of the required values appName(ns), userId, password, isAAF are missing.", resultMap.get("Exception"));
184     }
185
186
187     @Test
188     public void test7_onboardSearch() throws Exception {
189         System.out.println("Testing application onboarding search w/o reaching aaf");        
190         JsonOnboard jsonOnboard = new JsonOnboard();
191         jsonOnboard.setAppname("TestApp2");
192         jsonOnboard.setIsAAF("false");
193         jsonOnboard.setAid(onboardUUID);
194         Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
195         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
196         //TODO FIX when we can authenticate
197         //should be 401 error
198         assertEquals(204, response.getStatus());
199     }
200
201     // Missing appname
202     @Ignore
203     @Test
204     public void test7_onboardSearch1() throws Exception {
205         JsonOnboard jsonOnboard = new JsonOnboard();
206         jsonOnboard.setIsAAF("false");
207         jsonOnboard.setAid(onboardUUID);
208         Map<String, Object> resultMap = (Map<String, Object>) admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization).getEntity();
209         System.out.println("--->" + resultMap.toString());
210         resultMap.containsKey("success");
211         assertEquals(null, resultMap.get(onboardUUID));
212     }
213     
214     @Ignore
215     @Test
216     public void test7_onboardSearch_empty() throws Exception {
217         JsonOnboard jsonOnboard = new JsonOnboard();
218         Response response =  admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
219       //  assertEquals(400, response.getStatus());
220     }
221
222     @Ignore
223     @Test
224     public void test7_onboardSearch_invalidAid() throws Exception {
225         JsonOnboard jsonOnboard = new JsonOnboard();
226         jsonOnboard.setAppname("TestApp2");
227         jsonOnboard.setIsAAF("false");
228         jsonOnboard.setAid("abc66ccc-d857-4e90-b1e5-df98a3d40ce6");
229         Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
230        // assertEquals(400, response.getStatus());
231     }
232
233     @Ignore
234     @Test
235     public void test8_onboardUpdate() throws Exception {
236         JsonOnboard jsonOnboard = new JsonOnboard();
237         jsonOnboard.setIsAAF("false");
238         jsonOnboard.setUserId("TestUser3");
239         jsonOnboard.setPassword("TestPassword3");
240         jsonOnboard.setAid(onboardUUID);
241         Map<String, Object> resultMap = (Map<String, Object>) admin.updateOnboardApp(jsonOnboard,adminAuthorization).getEntity();
242         System.out.println("--->" + resultMap.toString());
243         resultMap.containsKey("success");
244         assertNotNull(resultMap);
245     }
246     
247     @Test
248     public void test8_onboardUpdateNoAAF() throws Exception {
249         System.out.println("Testing update application onboarding search w/o reaching aaf");
250         JsonOnboard jsonOnboard = new JsonOnboard();
251         jsonOnboard.setIsAAF("false");
252         jsonOnboard.setUserId("TestUser3");
253         jsonOnboard.setPassword("TestPassword3");
254         jsonOnboard.setAid(onboardUUID);
255         Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
256         
257         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
258         //Should be 401 error
259         assertEquals(204, response.getStatus());
260     }
261
262     // Aid null
263     @Ignore
264     @Test
265     public void test8_onboardUpdate1() throws Exception {
266         JsonOnboard jsonOnboard = new JsonOnboard();
267         jsonOnboard.setIsAAF("false");
268         jsonOnboard.setUserId("TestUser3");
269         jsonOnboard.setPassword("TestPassword3");
270         Map<String, Object> resultMap = (Map<String, Object>) admin.updateOnboardApp(jsonOnboard,adminAuthorization).getEntity();
271         System.out.println("--->" + resultMap.toString());
272         assertNotNull(resultMap);
273     }
274
275     // Appname not null
276     @Ignore
277     @Test
278     public void test8_onboardUpdate2() throws Exception {
279         JsonOnboard jsonOnboard = new JsonOnboard();
280         jsonOnboard.setAppname("TestApp2");
281         jsonOnboard.setIsAAF("false");
282         jsonOnboard.setUserId("TestUser3");
283         jsonOnboard.setPassword("TestPassword3");
284         jsonOnboard.setAid(onboardUUID);
285         Map<String, Object> resultMap = (Map<String, Object>) admin.updateOnboardApp(jsonOnboard,adminAuthorization).getEntity();
286         assertNotNull(resultMap);
287     }
288
289     // All null
290     @Ignore
291     @Test
292     public void test8_onboardUpdate3() throws Exception {
293         JsonOnboard jsonOnboard = new JsonOnboard();
294         jsonOnboard.setAid(onboardUUID);
295         Map<String, Object> resultMap = (Map<String, Object>) admin.updateOnboardApp(jsonOnboard,adminAuthorization).getEntity();
296         assertNotNull(resultMap);
297     }
298
299     @Test
300     public void test9_onboardDelete() throws Exception {
301         JsonOnboard jsonOnboard = new JsonOnboard();
302         jsonOnboard.setAppname("TestApp2");
303         jsonOnboard.setAid(onboardUUID);
304         Map<String, Object> resultMap = (Map<String, Object>) admin.deleteOnboardApp(jsonOnboard,adminAuthorization).getEntity();
305         resultMap.containsKey("success");
306         assertNotNull(resultMap);
307     }
308     
309     @Test
310     public void test9_onboardDeleteNoAAF() throws Exception {
311         System.out.println("Testing onboard delete without aaf");
312         JsonOnboard jsonOnboard = new JsonOnboard();
313         jsonOnboard.setAppname("TestApp2");
314         jsonOnboard.setAid(onboardUUID);
315         Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
316         
317         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
318         //Should be 401 error
319         assertEquals(204, response.getStatus());
320     }
321
322     @Ignore
323     @Test
324     public void test9_onboardDelete1() throws Exception {
325         JsonOnboard jsonOnboard = new JsonOnboard();
326         Map<String, Object> resultMap = (Map<String, Object>) admin.deleteOnboardApp(jsonOnboard,adminAuthorization).getEntity();
327         assertNotNull(resultMap);
328     }
329     
330     
331     private static void createAdminTable() throws Exception {
332                 testObject = new PreparedQueryObject();
333                 testObject.appendQueryString(CassandraCQL.createAdminKeyspace);
334                 MusicCore.eventualPut(testObject);
335                 testObject = new PreparedQueryObject();
336                 testObject.appendQueryString(CassandraCQL.createAdminTable);
337                 MusicCore.eventualPut(testObject);
338
339                 testObject = new PreparedQueryObject();
340                 testObject.appendQueryString(
341                                 "INSERT INTO admin.keyspace_master (uuid, keyspace_name, application_name, is_api, "
342                                                 + "password, username, is_aaf) VALUES (?,?,?,?,?,?,?)");
343                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.uuid(), uuid));
344                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.text(),
345                                 MusicUtil.DEFAULTKEYSPACENAME));
346                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), appName));
347                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.cboolean(), "True"));
348                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), BCrypt.hashpw(password, BCrypt.gensalt())));
349                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), userId));
350                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.cboolean(), isAAF));
351                 MusicCore.eventualPut(testObject);
352
353                 testObject = new PreparedQueryObject();
354                 testObject.appendQueryString(
355                                 "select uuid from admin.keyspace_master where application_name = ? allow filtering");
356                 testObject.addValue(MusicUtil.convertToActualDataType(DataType.text(), appName));
357                 ResultSet rs = MusicCore.get(testObject);
358                 List<Row> rows = rs.all();
359                 if (rows.size() > 0) {
360                         System.out.println("#######UUID is:" + rows.get(0).getUUID("uuid"));
361                 }
362         }
363    
364 }