marklogic / marklogic-jena

Adapter for using MarkLogic with the Jena RDF Framework
Other
5 stars 11 forks source link

REGR: markLogicDatasetGraphWriter.writePermissions adding permissions to graph rather than replacing it #26

Closed kkanthet closed 9 years ago

kkanthet commented 9 years ago

After Sam's update to permission in java-client https://github.com/marklogic/java-client-api/issues/363 , writePermissions is adding to exiting capabilities instead of replacing with the new one .

both addPermissions and writePermissions are behaving the same now. Last assert in below snippet fails.

GraphPermissions permissions = markLogicDatasetGraphAdmin.getPermissions(newgraph);
        markLogicDatasetGraphWriter.addPermissions(newgraph, permissions.permission("test-eval", Capability.EXECUTE));
        permissions = markLogicDatasetGraphWriter.getPermissions(newgraph);
        System.out.println(markLogicDatasetGraphWriter.getPermissions(newgraph));
        assertTrue("Did not have permission looking for", permissions.get("test-eval").contains(Capability.EXECUTE));
        //
        markLogicDatasetGraphWriter.addPermissions(newgraph, permissions.permission("test-eval", Capability.UPDATE));
        assertTrue(permissions.get("test-eval").size() == 2);
markLogicDatasetGraphWriter.clearPermissions(newgraph);
        markLogicDatasetGraphWriter.sync();
        permissions = markLogicDatasetGraphWriter.getPermissions(newgraph);
        System.out.println(permissions);
        assertTrue("Should not have Execute for test-eval", !(permissions.containsValue("test-eval")));

        // Set Execute permissions and validate
        permissions = permissions.permission("test-eval", Capability.EXECUTE);
        markLogicDatasetGraphWriter.writePermissions(newgraph, permissions);
        assertTrue("Did not have permission looking for", permissions.get("test-eval").contains(Capability.EXECUTE));

        // Set UPDATE permissions and validate
        permissions = permissions.permission("test-eval", Capability.UPDATE);
        markLogicDatasetGraphWriter.writePermissions(newgraph, permissions);
        assertTrue(permissions.get("test-eval").size() == 1);
grechaw commented 9 years ago

Verified. Trying to isolate where the bug is.

grechaw commented 9 years ago

Ah, this is not a bug. the GraphPermissions object keeps the old permissions in state, so when you do writePermissions, you're sending the union of both permissions the second time.

before this line

        permissions = permissions.permission("test-eval", Capability.UPDATE);

do a permissions.clear() and it will pass. I have a unit test update for this too.

kkanthet commented 9 years ago

Updated test to set correct permissions and works as expected.