/* * Copyright 2017 HugeGraph Authors * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with this * work for additional information regarding copyright ownership. The ASF * licenses this file to You under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package com.baidu.hugegraph.api.auth; import java.util.Arrays; import java.util.List; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.baidu.hugegraph.exception.ServerException; import com.baidu.hugegraph.structure.auth.HugeResource; import com.baidu.hugegraph.structure.auth.HugeResourceType; import com.baidu.hugegraph.structure.auth.Target; import com.baidu.hugegraph.testutil.Assert; import com.baidu.hugegraph.testutil.Whitebox; public class TargetApiTest extends AuthApiTest { private static TargetAPI api; @BeforeClass public static void init() { api = new TargetAPI(initClient(), GRAPH); } @AfterClass public static void clear() { List<Target> targets = api.list(-1); for (Target target : targets) { api.delete(target.id()); } } @Override @After public void teardown() { clear(); } @Test public void testCreate() { Target target1 = new Target(); target1.name("gremlin"); target1.graph("hugegraph"); target1.url("127.0.0.1:8080"); HugeResource gremlin = new HugeResource(HugeResourceType.GREMLIN); target1.resources(gremlin); Target target2 = new Target(); target2.name("task"); target2.graph("hugegraph2"); target2.url("127.0.0.1:8081"); HugeResource task = new HugeResource(HugeResourceType.TASK); target2.resources(task); Target result1 = api.create(target1); Target result2 = api.create(target2); Assert.assertEquals("gremlin", result1.name()); Assert.assertEquals("hugegraph", result1.graph()); Assert.assertEquals("127.0.0.1:8080", result1.url()); Assert.assertEquals(Arrays.asList(gremlin), result1.resources()); Assert.assertEquals("task", result2.name()); Assert.assertEquals("hugegraph2", result2.graph()); Assert.assertEquals("127.0.0.1:8081", result2.url()); Assert.assertEquals(Arrays.asList(task), result2.resources()); Assert.assertThrows(ServerException.class, () -> { api.create(target1); }, e -> { Assert.assertContains("Can't save target", e.getMessage()); Assert.assertContains("that already exists", e.getMessage()); }); Assert.assertThrows(ServerException.class, () -> { Target target3 = new Target(); api.create(target3); }, e -> { Assert.assertContains("The name of target can't be null", e.getMessage()); }); Assert.assertThrows(ServerException.class, () -> { Target target3 = new Target(); target3.name("test"); api.create(target3); }, e -> { Assert.assertContains("The graph of target can't be null", e.getMessage()); }); Assert.assertThrows(ServerException.class, () -> { Target target3 = new Target(); target3.name("test"); target3.graph("hugegraph3"); api.create(target3); }, e -> { Assert.assertContains("The url of target can't be null", e.getMessage()); }); } @Test public void testGet() { Target target1 = createTarget("test1", HugeResourceType.VERTEX); Target target2 = createTarget("test2", HugeResourceType.EDGE); Assert.assertEquals(HugeResourceType.VERTEX, target1.resource().resourceType()); Assert.assertEquals(HugeResourceType.EDGE, target2.resource().resourceType()); target1 = api.get(target1.id()); target2 = api.get(target2.id()); Assert.assertEquals("test1", target1.name()); Assert.assertEquals(HugeResourceType.VERTEX, target1.resource().resourceType()); Assert.assertEquals("test2", target2.name()); Assert.assertEquals(HugeResourceType.EDGE, target2.resource().resourceType()); } @Test public void testList() { createTarget("test1", HugeResourceType.VERTEX); createTarget("test2", HugeResourceType.EDGE); createTarget("test3", HugeResourceType.ALL); List<Target> targets = api.list(-1); Assert.assertEquals(3, targets.size()); targets.sort((t1, t2) -> t1.name().compareTo(t2.name())); Assert.assertEquals("test1", targets.get(0).name()); Assert.assertEquals("test2", targets.get(1).name()); Assert.assertEquals("test3", targets.get(2).name()); Assert.assertEquals(HugeResourceType.VERTEX, targets.get(0).resource().resourceType()); Assert.assertEquals(HugeResourceType.EDGE, targets.get(1).resource().resourceType()); Assert.assertEquals(HugeResourceType.ALL, targets.get(2).resource().resourceType()); targets = api.list(1); Assert.assertEquals(1, targets.size()); targets = api.list(2); Assert.assertEquals(2, targets.size()); Assert.assertThrows(IllegalArgumentException.class, () -> { api.list(0); }, e -> { Assert.assertContains("Limit must be > 0 or == -1", e.getMessage()); }); } @Test public void testUpdate() { Target target1 = createTarget("test1", HugeResourceType.VERTEX); Target target2 = createTarget("test2", HugeResourceType.EDGE); Assert.assertEquals(HugeResourceType.VERTEX, target1.resource().resourceType()); Assert.assertEquals(HugeResourceType.EDGE, target2.resource().resourceType()); target1.resources(new HugeResource(HugeResourceType.ALL)); Target updated = api.update(target1); Assert.assertEquals(HugeResourceType.ALL, updated.resource().resourceType()); Assert.assertNotEquals(target1.updateTime(), updated.updateTime()); Assert.assertThrows(ServerException.class, () -> { target2.name("test2-updated"); api.update(target2); }, e -> { Assert.assertContains("The name of target can't be updated", e.getMessage()); }); Assert.assertThrows(ServerException.class, () -> { Whitebox.setInternalState(target2, "id", "fake-id"); api.update(target2); }, e -> { Assert.assertContains("Invalid target id: fake-id", e.getMessage()); }); } @Test public void testDelete() { Target target1 = createTarget("test1", HugeResourceType.VERTEX); Target target2 = createTarget("test2", HugeResourceType.EDGE); Assert.assertEquals(2, api.list(-1).size()); api.delete(target1.id()); Assert.assertEquals(1, api.list(-1).size()); Assert.assertEquals(target2, api.list(-1).get(0)); api.delete(target2.id()); Assert.assertEquals(0, api.list(-1).size()); Assert.assertThrows(ServerException.class, () -> { api.delete(target2.id()); }, e -> { Assert.assertContains("Invalid target id:", e.getMessage()); }); Assert.assertThrows(ServerException.class, () -> { api.delete("fake-id"); }, e -> { Assert.assertContains("Invalid target id: fake-id", e.getMessage()); }); } protected static Target createTarget(String name, HugeResourceType res) { Target target = new Target(); target.name(name); target.graph("hugegraph"); target.url("127.0.0.1:8080"); target.resources(new HugeResource(res)); return api.create(target); } }