1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
5 package org.arvados.sdk;
8 import java.io.FileInputStream;
9 import java.math.BigDecimal;
10 import java.util.ArrayList;
11 import java.util.Calendar;
12 import java.util.Date;
13 import java.util.GregorianCalendar;
14 import java.util.HashMap;
15 import java.util.List;
19 import org.junit.Test;
21 import static org.junit.Assert.*;
24 * Unit test for Arvados.
26 public class ArvadosTest {
33 public void testCallUsersList() throws Exception {
34 Arvados arv = new Arvados("arvados", "v1");
36 Map<String, Object> params = new HashMap<String, Object>();
38 Map response = arv.call("users", "list", params);
39 assertEquals("Expected kind to be users.list", "arvados#userList", response.get("kind"));
41 List items = (List)response.get("items");
42 assertNotNull("expected users list items", items);
43 assertTrue("expected at least one item in users list", items.size()>0);
45 Map firstUser = (Map)items.get(0);
46 assertNotNull ("Expcted at least one user", firstUser);
48 assertEquals("Expected kind to be user", "arvados#user", firstUser.get("kind"));
49 assertNotNull("Expected uuid for first user", firstUser.get("uuid"));
53 * Test users.get <uuid> api
57 public void testCallUsersGet() throws Exception {
58 Arvados arv = new Arvados("arvados", "v1");
60 // call user.system and get uuid of this user
61 Map<String, Object> params = new HashMap<String, Object>();
63 Map response = arv.call("users", "list", params);
65 assertNotNull("expected users list", response);
66 List items = (List)response.get("items");
67 assertNotNull("expected users list items", items);
69 Map firstUser = (Map)items.get(0);
70 String userUuid = (String)firstUser.get("uuid");
72 // invoke users.get with the system user uuid
73 params = new HashMap<String, Object>();
74 params.put("uuid", userUuid);
76 response = arv.call("users", "get", params);
78 assertNotNull("Expected uuid for first user", response.get("uuid"));
79 assertEquals("Expected system user uuid", userUuid, response.get("uuid"));
83 * Test users.create api
87 public void testCreateUser() throws Exception {
88 Arvados arv = new Arvados("arvados", "v1");
90 Map<String, Object> params = new HashMap<String, Object>();
91 params.put("user", "{}");
92 Map response = arv.call("users", "create", params);
94 assertEquals("Expected kind to be user", "arvados#user", response.get("kind"));
96 Object uuid = response.get("uuid");
97 assertNotNull("Expected uuid for first user", uuid);
100 params = new HashMap<String, Object>();
101 params.put("uuid", uuid);
102 response = arv.call("users", "delete", params);
104 // invoke users.get with the system user uuid
105 params = new HashMap<String, Object>();
106 params.put("uuid", uuid);
108 Exception caught = null;
110 arv.call("users", "get", params);
111 } catch (Exception e) {
115 assertNotNull ("expected exception", caught);
116 assertTrue ("Expected 404", caught.getMessage().contains("Path not found"));
120 public void testCreateUserWithMissingRequiredParam() throws Exception {
121 Arvados arv = new Arvados("arvados", "v1");
123 Map<String, Object> params = new HashMap<String, Object>();
125 Exception caught = null;
127 arv.call("users", "create", params);
128 } catch (Exception e) {
132 assertNotNull ("expected exception", caught);
133 assertTrue ("Expected POST method requires content object user",
134 caught.getMessage().contains("ERROR: POST method requires content object user"));
138 * Test users.create api
142 public void testCreateAndUpdateUser() throws Exception {
143 Arvados arv = new Arvados("arvados", "v1");
145 Map<String, Object> params = new HashMap<String, Object>();
146 params.put("user", "{}");
147 Map response = arv.call("users", "create", params);
149 assertEquals("Expected kind to be user", "arvados#user", response.get("kind"));
151 Object uuid = response.get("uuid");
152 assertNotNull("Expected uuid for first user", uuid);
155 params = new HashMap<String, Object>();
156 params.put("user", "{}");
157 params.put("uuid", uuid);
158 response = arv.call("users", "update", params);
160 assertEquals("Expected kind to be user", "arvados#user", response.get("kind"));
162 uuid = response.get("uuid");
163 assertNotNull("Expected uuid for first user", uuid);
166 params = new HashMap<String, Object>();
167 params.put("uuid", uuid);
168 response = arv.call("users", "delete", params);
172 * Test unsupported api version api
176 public void testUnsupportedApiName() throws Exception {
177 Exception caught = null;
179 Arvados arv = new Arvados("not_arvados", "v1");
180 } catch (Exception e) {
184 assertNotNull ("expected exception", caught);
185 assertTrue ("Expected 404 when unsupported api is used", caught.getMessage().contains("404 Not Found"));
189 * Test unsupported api version api
193 public void testUnsupportedVersion() throws Exception {
194 Exception caught = null;
196 Arvados arv = new Arvados("arvados", "v2");
197 } catch (Exception e) {
201 assertNotNull ("expected exception", caught);
202 assertTrue ("Expected 404 when unsupported version is used", caught.getMessage().contains("404 Not Found"));
206 * Test unsupported api version api
210 public void testCallForNoSuchResrouce() throws Exception {
211 Arvados arv = new Arvados("arvados", "v1");
213 Exception caught = null;
215 arv.call("abcd", "list", null);
216 } catch (Exception e) {
220 assertNotNull ("expected exception", caught);
221 assertTrue ("Expected ERROR: 404 not found", caught.getMessage().contains("ERROR: resource not found"));
225 * Test unsupported api version api
229 public void testCallForNoSuchResrouceMethod() throws Exception {
230 Arvados arv = new Arvados("arvados", "v1");
232 Exception caught = null;
234 arv.call("users", "abcd", null);
235 } catch (Exception e) {
239 assertNotNull ("expected exception", caught);
240 assertTrue ("Expected ERROR: 404 not found", caught.getMessage().contains("ERROR: method not found"));
244 * Test pipeline_tempates.create api
248 public void testCreateAndGetPipelineTemplate() throws Exception {
249 Arvados arv = new Arvados("arvados", "v1");
251 File file = new File(getClass().getResource( "/first_pipeline.json" ).toURI());
252 byte[] data = new byte[(int)file.length()];
254 FileInputStream is = new FileInputStream(file);
257 }catch(Exception e) {
261 Map<String, Object> params = new HashMap<String, Object>();
262 params.put("pipeline_template", new String(data));
263 Map response = arv.call("pipeline_templates", "create", params);
264 assertEquals("Expected kind to be user", "arvados#pipelineTemplate", response.get("kind"));
265 String uuid = (String)response.get("uuid");
266 assertNotNull("Expected uuid for pipeline template", uuid);
269 params = new HashMap<String, Object>();
270 params.put("uuid", uuid);
271 response = arv.call("pipeline_templates", "get", params);
273 assertEquals("Expected kind to be user", "arvados#pipelineTemplate", response.get("kind"));
274 assertEquals("Expected uuid for pipeline template", uuid, response.get("uuid"));
277 params = new HashMap<String, Object>();
278 params.put("uuid", uuid);
279 response = arv.call("pipeline_templates", "delete", params);
283 * Test users.list api
287 public void testArvadosWithTokenPassed() throws Exception {
288 String token = System.getenv().get("ARVADOS_API_TOKEN");
289 String host = System.getenv().get("ARVADOS_API_HOST");
290 String hostInsecure = System.getenv().get("ARVADOS_API_HOST_INSECURE");
292 Arvados arv = new Arvados("arvados", "v1", token, host, hostInsecure);
294 Map<String, Object> params = new HashMap<String, Object>();
296 Map response = arv.call("users", "list", params);
297 assertEquals("Expected kind to be users.list", "arvados#userList", response.get("kind"));
301 * Test users.list api
305 public void testCallUsersListWithLimit() throws Exception {
306 Arvados arv = new Arvados("arvados", "v1");
308 Map<String, Object> params = new HashMap<String, Object>();
310 Map response = arv.call("users", "list", params);
311 assertEquals("Expected users.list in response", "arvados#userList", response.get("kind"));
313 List items = (List)response.get("items");
314 assertNotNull("expected users list items", items);
315 assertTrue("expected at least one item in users list", items.size()>0);
317 int numUsersListItems = items.size();
319 // make the request again with limit
320 params = new HashMap<String, Object>();
321 params.put("limit", numUsersListItems-1);
323 response = arv.call("users", "list", params);
325 assertEquals("Expected kind to be users.list", "arvados#userList", response.get("kind"));
327 items = (List)response.get("items");
328 assertNotNull("expected users list items", items);
329 assertTrue("expected at least one item in users list", items.size()>0);
331 int numUsersListItems2 = items.size();
332 assertEquals ("Got more users than requested", numUsersListItems-1, numUsersListItems2);
336 public void testGetLinksWithFilters() throws Exception {
337 Arvados arv = new Arvados("arvados", "v1");
339 Map<String, Object> params = new HashMap<String, Object>();
341 Map response = arv.call("links", "list", params);
342 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
344 String[][] filters = new String[1][];
345 String[] condition = new String[3];
346 condition[0] = "name";
348 condition[2] = "can_manage";
349 filters[0] = condition;
350 params.put("filters", filters);
352 response = arv.call("links", "list", params);
354 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
355 assertFalse("Expected no can_manage in response", response.toString().contains("\"name\":\"can_manage\""));
359 public void testGetLinksWithFiltersAsList() throws Exception {
360 Arvados arv = new Arvados("arvados", "v1");
362 Map<String, Object> params = new HashMap<String, Object>();
364 Map response = arv.call("links", "list", params);
365 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
367 List<List> filters = new ArrayList<List>();
368 List<String> condition = new ArrayList<String>();
369 condition.add("name");
370 condition.add("is_a");
371 condition.add("can_manage");
372 filters.add(condition);
373 params.put("filters", filters);
375 response = arv.call("links", "list", params);
377 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
378 assertFalse("Expected no can_manage in response", response.toString().contains("\"name\":\"can_manage\""));
382 public void testGetLinksWithTimestampFilters() throws Exception {
383 Arvados arv = new Arvados("arvados", "v1");
385 Map<String, Object> params = new HashMap<String, Object>();
387 Map response = arv.call("links", "list", params);
388 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
390 // get links created "tomorrow". Expect none in response
391 Calendar calendar = new GregorianCalendar();
392 calendar.setTime(new Date());
393 calendar.add(Calendar.DAY_OF_MONTH, 1);
395 Object[][] filters = new Object[1][];
396 Object[] condition = new Object[3];
397 condition[0] = "created_at";
399 condition[2] = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH)+1) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
400 filters[0] = condition;
401 params.put("filters", filters);
403 response = arv.call("links", "list", params);
405 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
406 int items_avail = ((BigDecimal)response.get("items_available")).intValue();
407 assertEquals("Expected zero links", items_avail, 0);
411 public void testGetLinksWithWhereClause() throws Exception {
412 Arvados arv = new Arvados("arvados", "v1");
414 Map<String, Object> params = new HashMap<String, Object>();
416 Map<String, String> where = new HashMap<String, String>();
417 where.put("where", "updated_at > '2014-05-01'");
419 params.put("where", where);
421 Map response = arv.call("links", "list", params);
423 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
427 public void testGetAvailableResources() throws Exception {
428 Arvados arv = new Arvados("arvados", "v1");
429 Set<String> resources = arv.getAvailableResourses();
430 assertNotNull("Expected resources", resources);
431 assertTrue("Excected users in resrouces", resources.contains("users"));
435 public void testGetAvailableMethodsResources() throws Exception {
436 Arvados arv = new Arvados("arvados", "v1");
437 Set<String> methods = arv.getAvailableMethodsForResourse("users");
438 assertNotNull("Expected resources", methods);
439 assertTrue("Excected create method for users", methods.contains("create"));
443 public void testGetAvailableParametersForUsersGetMethod() throws Exception {
444 Arvados arv = new Arvados("arvados", "v1");
445 Map<String,List<String>> parameters = arv.getAvailableParametersForMethod("users", "get");
446 assertNotNull("Expected parameters", parameters);
447 assertTrue("Excected uuid parameter for get method for users", parameters.get("required").contains("uuid"));
451 public void testGetAvailableParametersForUsersCreateMethod() throws Exception {
452 Arvados arv = new Arvados("arvados", "v1");
453 Map<String,List<String>> parameters = arv.getAvailableParametersForMethod("users", "create");
454 assertNotNull("Expected parameters", parameters);
455 assertTrue("Excected user parameter for get method for users", parameters.get("required").contains("user"));
459 public void testGetAvailableParametersForUsersListMethod() throws Exception {
460 Arvados arv = new Arvados("arvados", "v1");
461 Map<String,List<String>> parameters = arv.getAvailableParametersForMethod("users", "list");
462 assertNotNull("Expected parameters", parameters);
463 assertTrue("Excected no required parameter for list method for users", parameters.get("required").size() == 0);
464 assertTrue("Excected some optional parameters for list method for users", parameters.get("optional").contains("filters"));