1 package org.arvados.sdk.java;
4 import java.io.FileInputStream;
5 import java.math.BigDecimal;
6 import java.util.ArrayList;
7 import java.util.Calendar;
9 import java.util.GregorianCalendar;
10 import java.util.HashMap;
11 import java.util.List;
15 import org.junit.Test;
17 import static org.junit.Assert.*;
20 * Unit test for Arvados.
22 public class ArvadosTest {
29 public void testCallUsersList() throws Exception {
30 Arvados arv = new Arvados("arvados", "v1");
32 Map<String, Object> params = new HashMap<String, Object>();
34 Map response = arv.call("users", "list", params);
35 assertEquals("Expected kind to be users.list", "arvados#userList", response.get("kind"));
37 List items = (List)response.get("items");
38 assertNotNull("expected users list items", items);
39 assertTrue("expected at least one item in users list", items.size()>0);
41 Map firstUser = (Map)items.get(0);
42 assertNotNull ("Expcted at least one user", firstUser);
44 assertEquals("Expected kind to be user", "arvados#user", firstUser.get("kind"));
45 assertNotNull("Expected uuid for first user", firstUser.get("uuid"));
49 * Test users.get <uuid> api
53 public void testCallUsersGet() throws Exception {
54 Arvados arv = new Arvados("arvados", "v1");
56 // call user.system and get uuid of this user
57 Map<String, Object> params = new HashMap<String, Object>();
59 Map response = arv.call("users", "list", params);
61 assertNotNull("expected users list", response);
62 List items = (List)response.get("items");
63 assertNotNull("expected users list items", items);
65 Map firstUser = (Map)items.get(0);
66 String userUuid = (String)firstUser.get("uuid");
68 // invoke users.get with the system user uuid
69 params = new HashMap<String, Object>();
70 params.put("uuid", userUuid);
72 response = arv.call("users", "get", params);
74 assertNotNull("Expected uuid for first user", response.get("uuid"));
75 assertEquals("Expected system user uuid", userUuid, response.get("uuid"));
79 * Test users.create api
83 public void testCreateUser() throws Exception {
84 Arvados arv = new Arvados("arvados", "v1");
86 Map<String, Object> params = new HashMap<String, Object>();
87 params.put("user", "{}");
88 Map response = arv.call("users", "create", params);
90 assertEquals("Expected kind to be user", "arvados#user", response.get("kind"));
92 Object uuid = response.get("uuid");
93 assertNotNull("Expected uuid for first user", uuid);
96 params = new HashMap<String, Object>();
97 params.put("uuid", uuid);
98 response = arv.call("users", "delete", params);
100 // invoke users.get with the system user uuid
101 params = new HashMap<String, Object>();
102 params.put("uuid", uuid);
104 Exception caught = null;
106 arv.call("users", "get", params);
107 } catch (Exception e) {
111 assertNotNull ("expected exception", caught);
112 assertTrue ("Expected 404", caught.getMessage().contains("Path not found"));
116 public void testCreateUserWithMissingRequiredParam() throws Exception {
117 Arvados arv = new Arvados("arvados", "v1");
119 Map<String, Object> params = new HashMap<String, Object>();
121 Exception caught = null;
123 arv.call("users", "create", params);
124 } catch (Exception e) {
128 assertNotNull ("expected exception", caught);
129 assertTrue ("Expected POST method requires content object user",
130 caught.getMessage().contains("ERROR: POST method requires content object user"));
134 * Test users.create api
138 public void testCreateAndUpdateUser() throws Exception {
139 Arvados arv = new Arvados("arvados", "v1");
141 Map<String, Object> params = new HashMap<String, Object>();
142 params.put("user", "{}");
143 Map response = arv.call("users", "create", params);
145 assertEquals("Expected kind to be user", "arvados#user", response.get("kind"));
147 Object uuid = response.get("uuid");
148 assertNotNull("Expected uuid for first user", uuid);
151 params = new HashMap<String, Object>();
152 params.put("user", "{}");
153 params.put("uuid", uuid);
154 response = arv.call("users", "update", params);
156 assertEquals("Expected kind to be user", "arvados#user", response.get("kind"));
158 uuid = response.get("uuid");
159 assertNotNull("Expected uuid for first user", uuid);
162 params = new HashMap<String, Object>();
163 params.put("uuid", uuid);
164 response = arv.call("users", "delete", params);
168 * Test unsupported api version api
172 public void testUnsupportedApiName() throws Exception {
173 Exception caught = null;
175 Arvados arv = new Arvados("not_arvados", "v1");
176 } catch (Exception e) {
180 assertNotNull ("expected exception", caught);
181 assertTrue ("Expected 404 when unsupported api is used", caught.getMessage().contains("404 Not Found"));
185 * Test unsupported api version api
189 public void testUnsupportedVersion() throws Exception {
190 Exception caught = null;
192 Arvados arv = new Arvados("arvados", "v2");
193 } catch (Exception e) {
197 assertNotNull ("expected exception", caught);
198 assertTrue ("Expected 404 when unsupported version is used", caught.getMessage().contains("404 Not Found"));
202 * Test unsupported api version api
206 public void testCallForNoSuchResrouce() throws Exception {
207 Arvados arv = new Arvados("arvados", "v1");
209 Exception caught = null;
211 arv.call("abcd", "list", null);
212 } catch (Exception e) {
216 assertNotNull ("expected exception", caught);
217 assertTrue ("Expected ERROR: 404 not found", caught.getMessage().contains("ERROR: resource not found"));
221 * Test unsupported api version api
225 public void testCallForNoSuchResrouceMethod() throws Exception {
226 Arvados arv = new Arvados("arvados", "v1");
228 Exception caught = null;
230 arv.call("users", "abcd", null);
231 } catch (Exception e) {
235 assertNotNull ("expected exception", caught);
236 assertTrue ("Expected ERROR: 404 not found", caught.getMessage().contains("ERROR: method not found"));
240 * Test pipeline_tempates.create api
244 public void testCreateAndGetPipelineTemplate() throws Exception {
245 Arvados arv = new Arvados("arvados", "v1");
247 File file = new File(getClass().getResource( "/first_pipeline.json" ).toURI());
248 byte[] data = new byte[(int)file.length()];
250 FileInputStream is = new FileInputStream(file);
253 }catch(Exception e) {
257 Map<String, Object> params = new HashMap<String, Object>();
258 params.put("pipeline_template", new String(data));
259 Map response = arv.call("pipeline_templates", "create", params);
261 assertEquals("Expected kind to be user", "arvados#pipelineTemplate", response.get("kind"));
262 String uuid = (String)response.get("uuid");
263 assertNotNull("Expected uuid for pipeline template", uuid);
266 params = new HashMap<String, Object>();
267 params.put("uuid", uuid);
268 response = arv.call("pipeline_templates", "get", params);
270 assertEquals("Expected kind to be user", "arvados#pipelineTemplate", response.get("kind"));
271 assertEquals("Expected uuid for pipeline template", uuid, response.get("uuid"));
274 params = new HashMap<String, Object>();
275 params.put("uuid", uuid);
276 response = arv.call("pipeline_templates", "delete", params);
280 * Test users.list api
284 public void testArvadosWithTokenPassed() throws Exception {
285 String token = System.getenv().get("ARVADOS_API_TOKEN");
286 String host = System.getenv().get("ARVADOS_API_HOST");
287 String hostInsecure = System.getenv().get("ARVADOS_API_HOST_INSECURE");
289 Arvados arv = new Arvados("arvados", "v1", token, host, hostInsecure);
291 Map<String, Object> params = new HashMap<String, Object>();
293 Map response = arv.call("users", "list", params);
294 assertEquals("Expected kind to be users.list", "arvados#userList", response.get("kind"));
298 * Test users.list api
302 public void testCallUsersListWithLimit() throws Exception {
303 Arvados arv = new Arvados("arvados", "v1");
305 Map<String, Object> params = new HashMap<String, Object>();
307 Map response = arv.call("users", "list", params);
308 assertEquals("Expected users.list in response", "arvados#userList", response.get("kind"));
310 List items = (List)response.get("items");
311 assertNotNull("expected users list items", items);
312 assertTrue("expected at least one item in users list", items.size()>0);
314 int numUsersListItems = items.size();
316 // make the request again with limit
317 params = new HashMap<String, Object>();
318 params.put("limit", numUsersListItems-1);
320 response = arv.call("users", "list", params);
322 assertEquals("Expected kind to be users.list", "arvados#userList", response.get("kind"));
324 items = (List)response.get("items");
325 assertNotNull("expected users list items", items);
326 assertTrue("expected at least one item in users list", items.size()>0);
328 int numUsersListItems2 = items.size();
329 assertEquals ("Got more users than requested", numUsersListItems-1, numUsersListItems2);
333 public void testGetLinksWithFilters() throws Exception {
334 Arvados arv = new Arvados("arvados", "v1");
336 Map<String, Object> params = new HashMap<String, Object>();
338 Map response = arv.call("links", "list", params);
339 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
341 String[][] filters = new String[1][];
342 String[] condition = new String[3];
343 condition[0] = "name";
345 condition[2] = "can_manage";
346 filters[0] = condition;
347 params.put("filters", filters);
349 response = arv.call("links", "list", params);
351 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
352 assertFalse("Expected no can_manage in response", response.toString().contains("\"name\":\"can_manage\""));
356 public void testGetLinksWithFiltersAsList() throws Exception {
357 Arvados arv = new Arvados("arvados", "v1");
359 Map<String, Object> params = new HashMap<String, Object>();
361 Map response = arv.call("links", "list", params);
362 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
364 List<List> filters = new ArrayList<List>();
365 List<String> condition = new ArrayList<String>();
366 condition.add("name");
367 condition.add("is_a");
368 condition.add("can_manage");
369 filters.add(condition);
370 params.put("filters", filters);
372 response = arv.call("links", "list", params);
374 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
375 assertFalse("Expected no can_manage in response", response.toString().contains("\"name\":\"can_manage\""));
379 public void testGetLinksWithTimestampFilters() throws Exception {
380 Arvados arv = new Arvados("arvados", "v1");
382 Map<String, Object> params = new HashMap<String, Object>();
384 Map response = arv.call("links", "list", params);
385 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
387 // get links created "tomorrow". Expect none in response
388 Calendar calendar = new GregorianCalendar();
389 calendar.setTime(new Date());
390 calendar.add(Calendar.DAY_OF_MONTH, 1);
392 Object[][] filters = new Object[1][];
393 Object[] condition = new Object[3];
394 condition[0] = "created_at";
396 condition[2] = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH)+1) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
397 filters[0] = condition;
398 params.put("filters", filters);
400 response = arv.call("links", "list", params);
402 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
403 int items_avail = ((BigDecimal)response.get("items_available")).intValue();
404 assertEquals("Expected zero links", items_avail, 0);
408 public void testGetLinksWithWhereClause() throws Exception {
409 Arvados arv = new Arvados("arvados", "v1");
411 Map<String, Object> params = new HashMap<String, Object>();
413 Map<String, String> where = new HashMap<String, String>();
414 where.put("where", "updated_at > '2014-05-01'");
416 params.put("where", where);
418 Map response = arv.call("links", "list", params);
420 assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
424 public void testGetAvailableResources() throws Exception {
425 Arvados arv = new Arvados("arvados", "v1");
426 Set<String> resources = arv.getAvailableResourses();
427 assertNotNull("Expected resources", resources);
428 assertTrue("Excected users in resrouces", resources.contains("users"));
432 public void testGetAvailableMethodsResources() throws Exception {
433 Arvados arv = new Arvados("arvados", "v1");
434 Set<String> methods = arv.getAvailableMethodsForResourse("users");
435 assertNotNull("Expected resources", methods);
436 assertTrue("Excected create method for users", methods.contains("create"));
440 public void testGetAvailableParametersForUsersGetMethod() throws Exception {
441 Arvados arv = new Arvados("arvados", "v1");
442 Map<String,List<String>> parameters = arv.getAvailableParametersForMethod("users", "get");
443 assertNotNull("Expected parameters", parameters);
444 assertTrue("Excected uuid parameter for get method for users", parameters.get("required").contains("uuid"));
448 public void testGetAvailableParametersForUsersCreateMethod() throws Exception {
449 Arvados arv = new Arvados("arvados", "v1");
450 Map<String,List<String>> parameters = arv.getAvailableParametersForMethod("users", "create");
451 assertNotNull("Expected parameters", parameters);
452 assertTrue("Excected user parameter for get method for users", parameters.get("required").contains("user"));
456 public void testGetAvailableParametersForUsersListMethod() throws Exception {
457 Arvados arv = new Arvados("arvados", "v1");
458 Map<String,List<String>> parameters = arv.getAvailableParametersForMethod("users", "list");
459 assertNotNull("Expected parameters", parameters);
460 assertTrue("Excected no required parameter for list method for users", parameters.get("required").size() == 0);
461 assertTrue("Excected some optional parameters for list method for users", parameters.get("optional").contains("filters"));