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.main.MusicCore;
47 import org.onap.music.rest.RestMusicAdminAPI;
48 import com.sun.jersey.core.util.Base64;
50 public class TstRestMusicAdminAPI {
52 RestMusicAdminAPI admin = new RestMusicAdminAPI();
53 static PreparedQueryObject testObject;
56 MusicAAFAuthentication authMock;
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()));
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";
83 public static void init() throws Exception {
84 System.out.println("Testing RestMusicAdmin class");
85 //PowerMockito.mockStatic(MusicAuthentication.class);
87 //MusicDataStoreHandle.mDstoreHandle = CassandraCQL.connectToEmbeddedCassandra();
88 } catch (Exception e) {
90 throw new Exception("Unable to initialize before TestRestMusicData test class. " + e.getMessage());
95 public void beforeEach() throws NoSuchFieldException {
96 authenticateAdminTrue();
100 public void afterEach() {
101 testObject = new PreparedQueryObject();
102 testObject.appendQueryString("DELETE * FROM admin.keyspace_master;");
103 MusicCore.eventualPut(testObject);
107 public static void tearDownAfterClass() throws Exception {
108 testObject = new PreparedQueryObject();
109 testObject.appendQueryString("DROP KEYSPACE IF EXISTS " + keyspaceName);
110 MusicCore.eventualPut(testObject);
114 public void test6_onboard() throws Exception {
115 System.out.println("Testing application onboarding");
117 JsonOnboard jsonOnboard = new JsonOnboard();
118 jsonOnboard.setAppname("TestApp2");
119 jsonOnboard.setIsAAF("false"); jsonOnboard.setUserId("TestUser2");
120 jsonOnboard.setPassword("TestPassword2");
122 Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
124 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
125 assertEquals(200, response.getStatus());
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");
136 Response response = admin.onboardAppWithMusic(jsonOnboard,wrongAdminAuthorization);
137 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
138 assertEquals(401, response.getStatus());
142 public void test6_onboard_duplicate() throws Exception {
143 System.out.println("Testing a duplicate onboarding call");
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());
157 public void test6_onboard_noAppName() throws Exception {
158 System.out.println("Testing onboard missing app name");
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());
167 assertEquals(400, response.getStatus());
172 public void test7_onboardSearch_notOnboarded() throws Exception {
173 System.out.println("Testing application onboarding search for app that isn't onboarded");
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());
186 public void test7_onboardSearch() throws Exception {
187 System.out.println("Testing application onboarding search no matching app");
190 JsonOnboard jsonOnboard = new JsonOnboard();
191 jsonOnboard.setAppname("TestApp2");
192 jsonOnboard.setIsAAF("false");
193 jsonOnboard.setAid(onboardUUID);
195 Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
196 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
198 assertEquals(200, response.getStatus());
202 public void test7_onboardSearch_wrongCredentials() throws Exception {
203 System.out.println("Testing application onboarding search w/ wrong credentials");
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());
212 assertEquals(401, response.getStatus());
217 public void test7_onboardSearch_noAppName() throws Exception {
218 System.out.println("Testing application onboarding search w/o appname");
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());
227 assertEquals(200, response.getStatus());
231 public void test7_onboardSearch_empty() throws Exception {
232 System.out.println("Testing onboard search no app information");
234 JsonOnboard jsonOnboard = new JsonOnboard();
235 Response response = admin.getOnboardedInfoSearch(jsonOnboard,adminAuthorization);
236 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
238 assertEquals(400, response.getStatus());
242 public void test8_onboardUpdate() throws Exception {
243 System.out.println("Testing application onboarding update");
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());
254 assertEquals(200, response.getStatus());
257 @Ignore //not working correctly
259 public void test8_onboardUpdate_withAppName() throws Exception {
260 System.out.println("Testing application onboarding update w appname");
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());
272 assertEquals(200, response.getStatus());
276 public void test8_onboardUpdate_noUUID() throws Exception {
277 System.out.println("Testing application onboarding update null uuid");
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());
288 assertEquals(400, response.getStatus());
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);
301 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
302 assertEquals(401, response.getStatus());
307 public void test8_onboardUpdate_noAppInfo() throws Exception {
308 System.out.println("Testing update application onboarding update no app information");
311 JsonOnboard jsonOnboard = new JsonOnboard();
312 jsonOnboard.setAid(onboardUUID);
313 Response response = admin.updateOnboardApp(jsonOnboard,adminAuthorization);
315 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
316 assertEquals(400, response.getStatus());
320 public void test9_onboardDelete() throws Exception {
321 System.out.println("Testing update application onboarding delete");
324 JsonOnboard jsonOnboard = new JsonOnboard();
325 jsonOnboard.setAppname("TestApp2");
326 jsonOnboard.setAid(onboardUUID);
327 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
329 //only 1 app matches keyspace
330 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
331 assertEquals(200, response.getStatus());
334 @Ignore //not working as expected
336 public void test9_onboardDelete_noAID() throws Exception {
337 System.out.println("Testing update application onboarding delete no AID");
340 JsonOnboard jsonOnboard = new JsonOnboard();
341 jsonOnboard.setAppname("TestApp2");
342 jsonOnboard.setAid(null);
343 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
345 //only 1 app matches name
346 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
347 assertEquals(200, response.getStatus());
351 public void test9_onboardDelete_noAIDManyMatch() throws Exception {
352 System.out.println("Testing update application onboarding delete no AID many apps in namespace");
356 JsonOnboard jsonOnboard = new JsonOnboard();
357 jsonOnboard.setAppname("TestApp2");
358 jsonOnboard.setAid(null);
359 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
361 //multiple apps matches name
362 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
363 assertEquals(400, response.getStatus());
367 public void test9_onboardDelete_noAID_noApp() throws Exception {
368 System.out.println("Testing update application onboarding delete no AID, app not onboarded");
370 JsonOnboard jsonOnboard = new JsonOnboard();
371 jsonOnboard.setAppname("TestApp2");
372 jsonOnboard.setAid(null);
373 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
375 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
376 assertEquals(400, response.getStatus());
380 public void test9_onboardDelete_noAppToDelete() throws Exception {
381 System.out.println("Testing update application onboarding delete no app information");
384 JsonOnboard jsonOnboard = new JsonOnboard();
385 jsonOnboard.setAppname(null);
386 jsonOnboard.setAid(null);
387 Response response = admin.deleteOnboardApp(jsonOnboard,adminAuthorization);
389 //only 1 app matches keyspace
390 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
391 assertEquals(400, response.getStatus());
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);
402 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
403 assertEquals(401, response.getStatus());
407 public void test10_delete() throws Exception {
408 System.out.println("Testing GUI delete call");
411 assertTrue(admin.delete(adminAuthorization, onboardUUID));
415 public void test11_getAll() {
416 System.out.println("Testing GUI getall call");
418 System.out.println("admin.getall(adminAuthorization)");
422 * Inject our mocked class and accept admin credentials
423 * @throws NoSuchFieldException
425 public void authenticateAdminTrue() throws NoSuchFieldException {
426 authMock = Mockito.mock(MusicAAFAuthentication.class);
427 FieldSetter.setField(admin, admin.getClass().getDeclaredField("authenticator"), authMock);
429 Mockito.when(authMock.authenticateAdmin(Mockito.matches(adminAuthorization))).thenReturn(true);
433 * onboard the application and store generate uuid into {@link onboardUUID}
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");
444 Response response = admin.onboardAppWithMusic(jsonOnboard,adminAuthorization);
445 Map<String, String> respMap = (Map<String, String>) response.getEntity();
446 onboardUUID = respMap.get("Generated AID");