02b7f3a43f64382f1c636e2833ee24d9f806aa22
[music.git] / src / test / java / org / onap / music / unittests / TstRestMusicAdminAPI.java
1 /*
2  * ============LICENSE_START==========================================
3  * org.onap.music
4  * ===================================================================
5  *  Copyright (c) 2019 AT&T Intellectual Property
6  * ===================================================================
7  *  Licensed under the Apache License, Version 2.0 (the "License");
8  *  you may not use this file except in compliance with the License.
9  *  You may obtain a copy of the License at
10  * 
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  *  Unless required by applicable law or agreed to in writing, software
14  *  distributed under the License is distributed on an "AS IS" BASIS,
15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  *  See the License for the specific language governing permissions and
17  *  limitations under the License.
18  * 
19  * ============LICENSE_END=============================================
20  * ====================================================================
21  */
22
23 package org.onap.music.unittests;
24
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertTrue;
27
28 import java.util.Map;
29 import java.util.UUID;
30
31 import javax.ws.rs.core.Response;
32
33
34 import org.junit.After;
35 import org.junit.AfterClass;
36 import org.junit.Before;
37 import org.junit.BeforeClass;
38 import org.junit.Ignore;
39 import org.junit.Test;
40 import org.mockito.Mock;
41 import org.mockito.Mockito;
42 import org.mockito.internal.util.reflection.FieldSetter;
43 import org.onap.music.authentication.MusicAAFAuthentication;
44 import org.onap.music.datastore.PreparedQueryObject;
45 import org.onap.music.datastore.jsonobjects.JsonOnboard;
46 import org.onap.music.main.MusicCore;
47 import org.onap.music.rest.RestMusicAdminAPI;
48 import com.sun.jersey.core.util.Base64;
49
50 public class TstRestMusicAdminAPI {
51
52     RestMusicAdminAPI admin = new RestMusicAdminAPI();
53     static PreparedQueryObject testObject;
54     
55     @Mock
56     MusicAAFAuthentication authMock;
57     
58     static String appName = "TestApp";
59     static String userId = "TestUser";
60     static String password = "TestPassword";
61     static String adminName = "username";
62     static String adminPassword = "password";
63     static String adminAuthData = adminName +":"+adminPassword;
64     static String wrongAdminAuthData = adminName+"123"+":"+adminPassword;
65     static String authData = userId+":"+password;
66     static String wrongAuthData = userId+":"+"pass";
67     static String authorization = new String(Base64.encode(authData.getBytes()));
68     static String wrongAuthorization = new String(Base64.encode(wrongAuthData.getBytes()));
69     static String adminAuthorization = new String(Base64.encode(adminAuthData.getBytes()));
70     static String wrongAdminAuthorization = new String(Base64.encode(wrongAdminAuthData.getBytes()));
71     
72     static boolean isAAF = false;
73     static UUID uuid = UUID.fromString("abc66ccc-d857-4e90-b1e5-df98a3d40ce6");
74     static String keyspaceName = "testCassa";
75     static String tableName = "employees";
76     static String tableNameConditional = "Conductor";
77     static String xLatestVersion = "X-latestVersion";
78     static String onboardUUID = TestsUsingCassandra.onboardUUID;
79     static String lockId = null;
80     static String lockName = "testCassa.employees.sample3";
81
82     @BeforeClass
83     public static void init() throws Exception {
84                 System.out.println("Testing RestMusicAdmin class");
85                 //PowerMockito.mockStatic(MusicAuthentication.class);
86         try {
87                 //MusicDataStoreHandle.mDstoreHandle = CassandraCQL.connectToEmbeddedCassandra();
88                 } catch (Exception e) {
89                         e.printStackTrace();
90                         throw new Exception("Unable to initialize before TestRestMusicData test class. " + e.getMessage());
91                 }
92     }
93
94     @Before
95     public void beforeEach() throws NoSuchFieldException {
96         authenticateAdminTrue();
97     }
98     
99     @After
100     public void afterEach() {
101         testObject = new PreparedQueryObject();
102         testObject.appendQueryString("DELETE * FROM admin.keyspace_master;");
103         MusicCore.eventualPut(testObject);
104     }
105
106     @AfterClass
107     public static void tearDownAfterClass() throws Exception {
108         testObject = new PreparedQueryObject();
109         testObject.appendQueryString("DROP KEYSPACE IF EXISTS " + keyspaceName);
110         MusicCore.eventualPut(testObject);
111     }
112     
113     @Test
114     public void test6_onboard() throws Exception {
115         System.out.println("Testing application onboarding");
116         
117         JsonOnboard jsonOnboard = new JsonOnboard();
118         jsonOnboard.setAppname("TestApp2");
119         jsonOnboard.setIsAAF("false"); jsonOnboard.setUserId("TestUser2");
120         jsonOnboard.setPassword("TestPassword2");
121
122         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
123
124         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
125         assertEquals(200, response.getStatus());
126     }    
127     
128     @Test
129     public void test6_onboard_wrongCredentials() throws Exception {
130         System.out.println("Testing application onboarding wrong credentials");        
131         JsonOnboard jsonOnboard = new JsonOnboard();
132         jsonOnboard.setAppname("TestApp2");
133         jsonOnboard.setIsAAF("false"); jsonOnboard.setUserId("TestUser2");
134         jsonOnboard.setPassword("TestPassword2");
135
136         Response response = admin.onboardAppWithMusic(jsonOnboard,wrongAdminAuthorization);
137         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
138         assertEquals(401, response.getStatus());
139     }
140
141         @Test
142     public void test6_onboard_duplicate() throws Exception {
143             System.out.println("Testing a duplicate onboarding call");  
144             
145         JsonOnboard jsonOnboard = new JsonOnboard();
146         jsonOnboard.setAppname("TestApp2");
147         jsonOnboard.setIsAAF("false");
148         jsonOnboard.setUserId("TestUser2");
149         jsonOnboard.setPassword("TestPassword2");
150         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
151         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
152         assertEquals(200, response.getStatus());
153     }
154
155     // Missing appname
156     @Test
157     public void test6_onboard_noAppName() throws Exception {
158         System.out.println("Testing onboard missing app name");
159
160         JsonOnboard jsonOnboard = new JsonOnboard();
161         jsonOnboard.setIsAAF("false");
162         jsonOnboard.setUserId("TestUser2");
163         jsonOnboard.setPassword("TestPassword2");
164         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
165         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
166
167         assertEquals(400, response.getStatus());
168     }
169
170
171     @Test
172     public void test7_onboardSearch_notOnboarded() throws Exception {
173         System.out.println("Testing application onboarding search for app that isn't onboarded");
174         
175         JsonOnboard jsonOnboard = new JsonOnboard();
176         jsonOnboard.setAppname("TestApp2");
177         jsonOnboard.setIsAAF("false");
178         jsonOnboard.setAid(onboardUUID);
179         Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
180         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
181         //Application is not onboarded
182         assertEquals(400, response.getStatus());
183     }
184     
185     @Test
186     public void test7_onboardSearch() throws Exception {
187         System.out.println("Testing application onboarding search no matching app");       
188         onboardApp();
189         
190         JsonOnboard jsonOnboard = new JsonOnboard();
191         jsonOnboard.setAppname("TestApp2");
192         jsonOnboard.setIsAAF("false");
193         jsonOnboard.setAid(onboardUUID);
194         
195         Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
196         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
197
198         assertEquals(200, response.getStatus());
199     }
200     
201     @Test
202     public void test7_onboardSearch_wrongCredentials() throws Exception {
203         System.out.println("Testing application onboarding search w/ wrong credentials");    
204         
205         JsonOnboard jsonOnboard = new JsonOnboard();
206         jsonOnboard.setAppname("TestApp2");
207         jsonOnboard.setIsAAF("false");
208         jsonOnboard.setAid(onboardUUID);
209         Response response = admin.getOnboardedInfoSearch(jsonOnboard,wrongAdminAuthorization);
210         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
211
212         assertEquals(401, response.getStatus());
213     }
214
215     // Missing appname
216     @Test
217     public void test7_onboardSearch_noAppName() throws Exception {
218         System.out.println("Testing application onboarding search w/o appname");
219         onboardApp();
220         
221         JsonOnboard jsonOnboard = new JsonOnboard();
222         jsonOnboard.setIsAAF("false");
223         jsonOnboard.setAid(onboardUUID);
224         Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
225         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
226
227         assertEquals(200, response.getStatus());
228     }
229     
230     @Test
231     public void test7_onboardSearch_empty() throws Exception {
232         System.out.println("Testing onboard search no app information");
233         
234         JsonOnboard jsonOnboard = new JsonOnboard();
235         Response response =  admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
236         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
237
238         assertEquals(400, response.getStatus());
239     }
240
241     @Test
242     public void test8_onboardUpdate() throws Exception {
243         System.out.println("Testing application onboarding update");
244         onboardApp();
245         
246         JsonOnboard jsonOnboard = new JsonOnboard();
247         jsonOnboard.setIsAAF("false");
248         jsonOnboard.setUserId("TestUser3");
249         jsonOnboard.setPassword("TestPassword3");
250         jsonOnboard.setAid(onboardUUID);
251         Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
252         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
253
254         assertEquals(200, response.getStatus());
255     }
256     
257     @Ignore //not working correctly
258     @Test
259     public void test8_onboardUpdate_withAppName() throws Exception {
260         System.out.println("Testing application onboarding update w appname");
261         onboardApp();
262         
263         JsonOnboard jsonOnboard = new JsonOnboard();
264         jsonOnboard.setIsAAF("false");
265         jsonOnboard.setUserId("TestUser3");
266         jsonOnboard.setPassword("TestPassword3");
267         jsonOnboard.setAppname("TestApp2");
268         jsonOnboard.setAid(onboardUUID);
269         Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
270         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
271
272         assertEquals(200, response.getStatus());
273     }
274     
275     @Test
276     public void test8_onboardUpdate_noUUID() throws Exception {
277         System.out.println("Testing application onboarding update null uuid");
278         onboardApp();
279         
280         JsonOnboard jsonOnboard = new JsonOnboard();
281         jsonOnboard.setIsAAF("false");
282         jsonOnboard.setUserId("TestUser3");
283         jsonOnboard.setPassword("TestPassword3");
284         jsonOnboard.setAid(null);
285         Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
286         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
287
288         assertEquals(400, response.getStatus());
289     }
290     
291     @Test
292     public void test8_onboardUpdate_wrongCredentialsNoAAF() throws Exception {
293         System.out.println("Testing update application onboarding search w/ wrong credentials");
294         JsonOnboard jsonOnboard = new JsonOnboard();
295         jsonOnboard.setIsAAF("false");
296         jsonOnboard.setUserId("TestUser3");
297         jsonOnboard.setPassword("TestPassword3");
298         jsonOnboard.setAid(onboardUUID);
299         Response response = admin.updateOnboardApp(jsonOnboard,wrongAdminAuthorization);
300         
301         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
302         assertEquals(401, response.getStatus());
303     }
304
305     // All null
306     @Test
307     public void test8_onboardUpdate_noAppInfo() throws Exception {
308         System.out.println("Testing update application onboarding update no app information");
309         onboardApp();
310         
311         JsonOnboard jsonOnboard = new JsonOnboard();
312         jsonOnboard.setAid(onboardUUID);
313         Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
314         
315         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
316         assertEquals(400, response.getStatus());
317     }
318
319     @Test
320     public void test9_onboardDelete() throws Exception {
321         System.out.println("Testing update application onboarding delete");
322         onboardApp();
323         
324         JsonOnboard jsonOnboard = new JsonOnboard();
325         jsonOnboard.setAppname("TestApp2");
326         jsonOnboard.setAid(onboardUUID);
327         Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
328         
329         //only 1 app matches keyspace
330         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
331         assertEquals(200, response.getStatus());
332     }
333     
334     @Ignore //not working as expected
335     @Test
336     public void test9_onboardDelete_noAID() throws Exception {
337         System.out.println("Testing update application onboarding delete no AID");
338         onboardApp();
339         
340         JsonOnboard jsonOnboard = new JsonOnboard();
341         jsonOnboard.setAppname("TestApp2");
342         jsonOnboard.setAid(null);
343         Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
344         
345         //only 1 app matches name
346         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
347         assertEquals(200, response.getStatus());
348     }
349     
350     @Test
351     public void test9_onboardDelete_noAIDManyMatch() throws Exception {
352         System.out.println("Testing update application onboarding delete no AID many apps in namespace");
353         onboardApp();
354         onboardApp();
355         
356         JsonOnboard jsonOnboard = new JsonOnboard();
357         jsonOnboard.setAppname("TestApp2");
358         jsonOnboard.setAid(null);
359         Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
360         
361         //multiple apps matches name
362         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
363         assertEquals(400, response.getStatus());
364     }
365     
366     @Test
367     public void test9_onboardDelete_noAID_noApp() throws Exception {
368         System.out.println("Testing update application onboarding delete no AID, app not onboarded");
369         
370         JsonOnboard jsonOnboard = new JsonOnboard();
371         jsonOnboard.setAppname("TestApp2");
372         jsonOnboard.setAid(null);
373         Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
374         
375         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
376         assertEquals(400, response.getStatus());
377     }
378     
379     @Test
380     public void test9_onboardDelete_noAppToDelete() throws Exception {
381         System.out.println("Testing update application onboarding delete no app information");
382         onboardApp();
383         
384         JsonOnboard jsonOnboard = new JsonOnboard();
385         jsonOnboard.setAppname(null);
386         jsonOnboard.setAid(null);
387         Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
388         
389         //only 1 app matches keyspace
390         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
391         assertEquals(400, response.getStatus());
392     }
393     
394     @Test
395     public void test9_onboardDelete_wrongCredentials() throws Exception {
396         System.out.println("Testing onboard delete with wrong credentials");
397         JsonOnboard jsonOnboard = new JsonOnboard();
398         jsonOnboard.setAppname("TestApp2");
399         jsonOnboard.setAid(onboardUUID);
400         Response response = admin.deleteOnboardApp(jsonOnboard,wrongAdminAuthorization);
401         
402         System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
403         assertEquals(401, response.getStatus());
404     }
405     
406     @Test
407     public void test10_delete() throws Exception {
408         System.out.println("Testing GUI delete call");
409         onboardApp();
410         
411         assertTrue(admin.delete(adminAuthorization, onboardUUID));
412     }
413     
414     @Test
415     public void test11_getAll() {
416         System.out.println("Testing GUI getall call");
417         
418         System.out.println("admin.getall(adminAuthorization)");
419     }
420     
421     /**
422      * Inject our mocked class and accept admin credentials
423      * @throws NoSuchFieldException
424      */
425     public void authenticateAdminTrue() throws NoSuchFieldException {
426         authMock = Mockito.mock(MusicAAFAuthentication.class);
427         FieldSetter.setField(admin, admin.getClass().getDeclaredField("authenticator"), authMock);
428         
429         Mockito.when(authMock.authenticateAdmin(Mockito.matches(adminAuthorization))).thenReturn(true);
430     }
431     
432     /**
433      * onboard the application and store generate uuid into {@link onboardUUID}
434      * @param onboard
435      * @throws Exception
436      */
437     public void onboardApp() throws Exception {
438         JsonOnboard jsonOnboard = new JsonOnboard();
439         jsonOnboard.setAppname("TestApp2");
440         jsonOnboard.setIsAAF("false");
441         jsonOnboard.setUserId("TestUser2");
442         jsonOnboard.setPassword("TestPassword2");
443
444         Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
445         Map<String, String> respMap = (Map<String, String>) response.getEntity();
446         onboardUUID = respMap.get("Generated AID");
447     }
448    
449 }