blob: 0770ed40696845c70f894bd1a6510c1c7e4f4d03 [file] [log] [blame]
/*
* 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);
}
}