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