public void testCreateAccess()

in hugegraph-server/hugegraph-test/src/main/java/org/apache/hugegraph/core/AuthTest.java [931:1059]


    public void testCreateAccess() {
        HugeGraph graph = graph();
        AuthManager authManager = graph.authManager();

        Id group1 = authManager.createGroup(makeGroup("group1"));
        Id group2 = authManager.createGroup(makeGroup("group2"));
        Id target1 = authManager.createTarget(makeTarget("graph1", "url1"));
        Id target2 = authManager.createTarget(makeTarget("graph2", "url2"));

        Id id1 = authManager.createAccess(makeAccess(group1, target1,
                                                     HugePermission.READ));
        Id id2 = authManager.createAccess(makeAccess(group1, target1,
                                                     HugePermission.WRITE));
        Id id3 = authManager.createAccess(makeAccess(group1, target2,
                                                     HugePermission.READ));
        Id id4 = authManager.createAccess(makeAccess(group2, target2,
                                                     HugePermission.READ));

        HugeAccess access = authManager.getAccess(id1);
        Assert.assertEquals(group1, access.source());
        Assert.assertEquals(target1, access.target());
        Assert.assertEquals(HugePermission.READ, access.permission());
        Assert.assertEquals(access.create(), access.update());

        Map<String, Object> expected = new HashMap<>();
        expected.putAll(ImmutableMap.of("id", access.id(),
                                        "group", group1,
                                        "target", target1,
                                        "access_permission",
                                        HugePermission.READ,
                                        "access_creator", "admin"));
        expected.putAll(ImmutableMap.of("access_create", access.create(),
                                        "access_update", access.update()));
        Assert.assertEquals(expected, access.asMap());

        access = authManager.getAccess(id2);
        Assert.assertEquals(group1, access.source());
        Assert.assertEquals(target1, access.target());
        Assert.assertEquals(HugePermission.WRITE, access.permission());
        Assert.assertEquals(access.create(), access.update());

        expected = new HashMap<>();
        expected.putAll(ImmutableMap.of("id", access.id(),
                                        "group", group1,
                                        "target", target1,
                                        "access_permission",
                                        HugePermission.WRITE,
                                        "access_creator", "admin"));
        expected.putAll(ImmutableMap.of("access_create", access.create(),
                                        "access_update", access.update()));
        Assert.assertEquals(expected, access.asMap());

        access = authManager.getAccess(id3);
        Assert.assertEquals(group1, access.source());
        Assert.assertEquals(target2, access.target());
        Assert.assertEquals(HugePermission.READ, access.permission());
        Assert.assertEquals(access.create(), access.update());

        expected = new HashMap<>();
        expected.putAll(ImmutableMap.of("id", access.id(),
                                        "group", group1,
                                        "target", target2,
                                        "access_permission",
                                        HugePermission.READ,
                                        "access_creator", "admin"));
        expected.putAll(ImmutableMap.of("access_create", access.create(),
                                        "access_update", access.update()));
        Assert.assertEquals(expected, access.asMap());

        access = authManager.getAccess(id4);
        Assert.assertEquals(group2, access.source());
        Assert.assertEquals(target2, access.target());
        Assert.assertEquals(HugePermission.READ, access.permission());
        Assert.assertEquals(access.create(), access.update());

        expected = new HashMap<>();
        expected.putAll(ImmutableMap.of("id", access.id(),
                                        "group", group2,
                                        "target", target2,
                                        "access_permission",
                                        HugePermission.READ,
                                        "access_creator", "admin"));
        expected.putAll(ImmutableMap.of("access_create", access.create(),
                                        "access_update", access.update()));
        Assert.assertEquals(expected, access.asMap());

        List<HugeAccess> accesses = authManager.listAccessByGroup(group1, -1);
        Assert.assertEquals(3, accesses.size());

        accesses = authManager.listAccessByGroup(group2, -1);
        Assert.assertEquals(1, accesses.size());

        accesses = authManager.listAccessByTarget(target1, -1);
        Assert.assertEquals(2, accesses.size());

        accesses = authManager.listAccessByTarget(target2, -1);
        Assert.assertEquals(2, accesses.size());

        // Create access with description
        access = makeAccess(group2, target2, HugePermission.WRITE);
        access.description("something3");
        Id id5 = authManager.createAccess(access);
        access = authManager.getAccess(id5);
        Assert.assertEquals(group2, access.source());
        Assert.assertEquals(target2, access.target());
        Assert.assertEquals(HugePermission.WRITE, access.permission());
        Assert.assertEquals("something3", access.description());
        Assert.assertEquals(access.create(), access.update());

        expected = new HashMap<>();
        expected.putAll(ImmutableMap.of("id", access.id(),
                                        "group", group2,
                                        "target", target2,
                                        "access_permission",
                                        HugePermission.WRITE,
                                        "access_creator", "admin"));
        expected.putAll(ImmutableMap.of("access_description", "something3",
                                        "access_create", access.create(),
                                        "access_update", access.update()));
        Assert.assertEquals(expected, access.asMap());

        Assert.assertThrows(IllegalArgumentException.class, () -> {
            authManager.createAccess(makeAccess(group1, target1,
                                                HugePermission.READ));
        }, e -> {
            Assert.assertContains("Can't save access", e.getMessage());
            Assert.assertContains("that already exists", e.getMessage());
        });
    }