2 * ============LICENSE_START==========================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 * ============LICENSE_END=============================================
20 * ====================================================================
23 package org.onap.music.unittests;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertTrue;
29 import java.util.UUID;
31 import javax.ws.rs.core.Response;
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;
51 public class TstRestMusicAdminAPI {
53 RestMusicAdminAPI admin = new RestMusicAdminAPI();
54 static PreparedQueryObject testObject;
57 MusicAAFAuthentication authMock;
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()));
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";
84 public static void init() throws Exception {
85 System.out.println("Testing RestMusicAdmin class");
86 //PowerMockito.mockStatic(MusicAuthentication.class);
88 //MusicDataStoreHandle.mDstoreHandle = CassandraCQL.connectToEmbeddedCassandra();
89 } catch (Exception e) {
91 throw new Exception("Unable to initialize before TestRestMusicData test class. " + e.getMessage());
96 public void beforeEach() throws NoSuchFieldException {
97 authenticateAdminTrue();
101 public void afterEach() {
102 testObject = new PreparedQueryObject();
103 testObject.appendQueryString("DELETE * FROM admin.keyspace_master;");
104 MusicCore.eventualPut(testObject);
108 public static void tearDownAfterClass() throws Exception {
109 testObject = new PreparedQueryObject();
110 testObject.appendQueryString("DROP KEYSPACE IF EXISTS " + keyspaceName);
111 MusicCore.eventualPut(testObject);
116 public void test6_onboard() throws Exception {
117 System.out.println("Testing application onboarding");
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");
125 Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
127 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
128 assertEquals(200, response.getStatus());
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");
140 Response response = admin.onboardAppWithMusic(jsonOnboard,wrongAdminAuthorization);
141 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
142 assertEquals(401, response.getStatus());
147 public void test6_onboard_duplicate() throws Exception {
148 System.out.println("Testing a duplicate onboarding call");
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());
163 public void test6_onboard_noAppName() throws Exception {
164 System.out.println("Testing onboard missing app name");
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());
174 assertEquals(400, response.getStatus());
179 public void test7_onboardSearch_notOnboarded() throws Exception {
180 System.out.println("Testing application onboarding search for app that isn't onboarded");
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());
194 public void test7_onboardSearch() throws Exception {
195 System.out.println("Testing application onboarding search no matching app");
198 JsonOnboard jsonOnboard = new JsonOnboard();
199 jsonOnboard.setAppname("TestApp2");
200 jsonOnboard.setIsAAF("false");
201 jsonOnboard.setAid(onboardUUID);
203 Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
204 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
206 assertEquals(200, response.getStatus());
210 public void test7_onboardSearch_wrongCredentials() throws Exception {
211 System.out.println("Testing application onboarding search w/ wrong credentials");
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());
220 assertEquals(401, response.getStatus());
225 public void test7_onboardSearch_noAppName() throws Exception {
226 System.out.println("Testing application onboarding search w/o appname");
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());
235 assertEquals(200, response.getStatus());
240 public void test7_onboardSearch_empty() throws Exception {
241 System.out.println("Testing onboard search no app information");
243 JsonOnboard jsonOnboard = new JsonOnboard();
244 Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
245 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
247 assertEquals(400, response.getStatus());
252 public void test8_onboardUpdate() throws Exception {
253 System.out.println("Testing application onboarding update");
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());
264 assertEquals(200, response.getStatus());
267 @Ignore //not working correctly
269 public void test8_onboardUpdate_withAppName() throws Exception {
270 System.out.println("Testing application onboarding update w appname");
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());
282 assertEquals(200, response.getStatus());
286 public void test8_onboardUpdate_noUUID() throws Exception {
287 System.out.println("Testing application onboarding update null uuid");
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());
298 assertEquals(400, response.getStatus());
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);
311 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
312 assertEquals(401, response.getStatus());
317 public void test8_onboardUpdate_noAppInfo() throws Exception {
318 System.out.println("Testing update application onboarding update no app information");
321 JsonOnboard jsonOnboard = new JsonOnboard();
322 jsonOnboard.setAid(onboardUUID);
323 Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
325 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
326 assertEquals(400, response.getStatus());
331 public void test9_onboardDelete() throws Exception {
332 System.out.println("Testing update application onboarding delete");
335 JsonOnboard jsonOnboard = new JsonOnboard();
336 jsonOnboard.setAppname("TestApp2");
337 jsonOnboard.setAid(onboardUUID);
338 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
340 //only 1 app matches keyspace
341 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
342 assertEquals(200, response.getStatus());
345 @Ignore //not working as expected
347 public void test9_onboardDelete_noAID() throws Exception {
348 System.out.println("Testing update application onboarding delete no AID");
351 JsonOnboard jsonOnboard = new JsonOnboard();
352 jsonOnboard.setAppname("TestApp2");
353 jsonOnboard.setAid(null);
354 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
356 //only 1 app matches name
357 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
358 assertEquals(200, response.getStatus());
363 public void test9_onboardDelete_noAIDManyMatch() throws Exception {
364 System.out.println("Testing update application onboarding delete no AID many apps in namespace");
368 JsonOnboard jsonOnboard = new JsonOnboard();
369 jsonOnboard.setAppname("TestApp2");
370 jsonOnboard.setAid(null);
371 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
373 //multiple apps matches name
374 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
375 assertEquals(400, response.getStatus());
380 public void test9_onboardDelete_noAID_noApp() throws Exception {
381 System.out.println("Testing update application onboarding delete no AID, app not onboarded");
383 JsonOnboard jsonOnboard = new JsonOnboard();
384 jsonOnboard.setAppname("TestApp2");
385 jsonOnboard.setAid(null);
386 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
388 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
389 assertEquals(400, response.getStatus());
393 public void test9_onboardDelete_noAppToDelete() throws Exception {
394 System.out.println("Testing update application onboarding delete no app information");
397 JsonOnboard jsonOnboard = new JsonOnboard();
398 jsonOnboard.setAppname(null);
399 jsonOnboard.setAid(null);
400 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
402 //only 1 app matches keyspace
403 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
404 assertEquals(400, response.getStatus());
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);
415 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
416 assertEquals(401, response.getStatus());
421 public void test10_delete() throws Exception {
422 System.out.println("Testing GUI delete call");
424 MusicResponse response = admin.delete(adminAuthorization, onboardUUID);
425 assertEquals(200, response.getStatus());
426 //assertTrue(admin.delete(adminAuthorization, onboardUUID));
430 public void test11_getAll() {
431 System.out.println("Testing GUI getall call");
433 System.out.println("admin.getall(adminAuthorization)");
437 * Inject our mocked class and accept admin credentials
438 * @throws NoSuchFieldException
440 public void authenticateAdminTrue() throws NoSuchFieldException {
441 authMock = Mockito.mock(MusicAAFAuthentication.class);
442 FieldSetter.setField(admin, admin.getClass().getDeclaredField("authenticator"), authMock);
444 Mockito.when(authMock.authenticateAdmin(Mockito.matches(adminAuthorization))).thenReturn(true);
448 * onboard the application and store generate uuid into {@link onboardUUID}
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");
459 Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
460 Map<String, String> respMap = (Map<String, String>) response.getEntity();
461 onboardUUID = respMap.get("Generated AID");