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
8 * http://www.apache.org/licenses/LICENSE-2.0
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
15 * ============LICENSE_END=============================================
16 * ====================================================================
19 package org.onap.music.unittests;
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;
28 import java.util.HashMap;
29 import java.util.List;
31 import java.util.UUID;
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;
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;
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;
72 public class TstRestMusicAdminAPI {
74 RestMusicAdminAPI admin = new RestMusicAdminAPI();
75 static PreparedQueryObject testObject;
78 HttpServletResponse http;
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()));
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";
108 public static void init() throws Exception {
109 System.out.println("Testing RestMusicAdmin class");
110 //PowerMockito.mockStatic(MusicAuthentication.class);
112 MusicDataStoreHandle.mDstoreHandle = CassandraCQL.connectToEmbeddedCassandra();
114 } catch (Exception e) {
116 throw new Exception("Unable to initialize before TestRestMusicData test class. " + e.getMessage());
121 public static void tearDownAfterClass() throws Exception {
122 testObject = new PreparedQueryObject();
123 testObject.appendQueryString("DROP KEYSPACE IF EXISTS " + keyspaceName);
124 MusicCore.eventualPut(testObject);
129 public void test6_onboard() throws Exception {
130 System.out.println("Testing application onboarding");
132 JsonOnboard jsonOnboard = new JsonOnboard();
133 jsonOnboard.setAppname("TestApp2");
134 jsonOnboard.setIsAAF("false"); jsonOnboard.setUserId("TestUser2");
135 jsonOnboard.setPassword("TestPassword2");
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());
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");
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());
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());
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"));
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());
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));
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());
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());
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);
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);
257 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
258 //Should be 401 error
259 assertEquals(204, response.getStatus());
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);
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);
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);
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);
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);
317 System.out.println("Status: " + response.getStatus() + ". Entity " + response.getEntity());
318 //Should be 401 error
319 assertEquals(204, response.getStatus());
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);
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);
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);
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"));