>@Test >> public void testWildcardLeftTermination() { >> WildcardPermission p1, p2, p3, p4; >> >> p1 = new WildcardPermission("one"); >> p2 = new WildcardPermission("one:*"); >> p3 = new WildcardPermission("one:*:*"); >> >> assertTrue( p1.implies(p2)); >> //assertFalse( p2.implies(p1)); //test 2 >> assertTrue( p1.implies(p3)); >> assertFalse( p3.implies(p1 )); // test 4 >> } >> >> To be consistent test 2 and test 4 must both be true or both false. >>
>They are both true (they should be assertTrue). You might have lost me here. Copy the code into your tests. I think you will find that they are not both true nor both false. assertFalse( p2.implies(p1)); //test 2 <-- this one fails - hence it is commented out. An that is what I have been saying it should not fail. So I think we agree. Claude On Thu, Jan 25, 2018 at 4:02 PM, Brian Demers <brian.dem...@gmail.com> wrote: > Comments inline: > > I think we are getting closer to an understanding. > > > > Try adding the following to your tests: > > > > @Test > > public void testWildcardLeftTermination() { > > WildcardPermission p1, p2; > > > > p1 = new WildcardPermission("one"); > > p2 = new WildcardPermission("one:*"); > > > > assertTrue( p1.implies(p2)); > > assertFalse( p2.implies(p1)); > > } > > > > Now I assume the the last statement is correct. but the test will fail. > > > > The doc states that `printer` is equivalent to `printer:*:*` so I would > expect your test to fail > > > > > > Now to your example with JoeCoder > > > > Assume your resource has the permission "newsletter" > > > > Should the user joe with permissions "newsletter:*" be able to access > that? > > > > Yes > > > > a user with "newsletter:one" would not. > > > > Correct > > > > > So looking at it another way. > > > > given: "newsletter:X" is the set of all permissions in the system that > > start with "newsletter:" followed by any characters excluding ":" and > "*". > > > > then: any user with only the permissions from "newsletter:X" does not > have > > access to "newsletter" > > > > > > > given that "newsletter:*" is equivalent to the union of "newsletter:X" > and > > newsletter:X:X and newsletter:X:X:X ... > > > > then: any user with only the permissions from "newsletter:*" should not > > have access to "newsletter" as you can not imply "newsletter" from any of > > the permissions in the set. > > > > But here `newsletter:*` is equivalent to `newsletter` which is missing in > your `given` > > > > corollary: > > > > if "newsletter:*" implies "newsletter" then for any permission Y the > > permission Y:* implies Y > > > > replacing Y with "newsletter:*" gives newsletter:*:* implies > newsletter:* > > and newsletter:* implies newsletter so newsletter:*:* implies newsletter. > > This is false. > > > > This was the test I just added: newsletter:*:*:* impiles newsletter > So this is true, not false > > > > > > so "newsletter:*" should not imply "newsletter" > > > > > > @Test > > public void testWildcardLeftTermination() { > > WildcardPermission p1, p2, p3, p4; > > > > p1 = new WildcardPermission("one"); > > p2 = new WildcardPermission("one:*"); > > p3 = new WildcardPermission("one:*:*"); > > > > assertTrue( p1.implies(p2)); > > //assertFalse( p2.implies(p1)); //test 2 > > assertTrue( p1.implies(p3)); > > assertFalse( p3.implies(p1 )); // test 4 > > } > > > > To be consistent test 2 and test 4 must both be true or both false. > > > > They are both true (they should be assertTrue). You might have lost me > here. > > > This test currently passes: > > @Test > public void testWildcardLeftTermination() { > WildcardPermission p1, p2, p3, p4; > > p1 = new WildcardPermission("one"); > p2 = new WildcardPermission("one:*"); > p3 = new WildcardPermission("one:*:*"); > p4 = new WildcardPermission("one:read"); > > assertTrue(p1.implies(p2)); > assertTrue(p1.implies(p3)); > assertTrue(p1.implies(p4)); > > assertTrue(p2.implies(p1)); > assertTrue(p2.implies(p3)); > assertTrue(p2.implies(p4)); > > assertTrue(p3.implies(p1)); > assertTrue(p3.implies(p2)); > assertTrue(p3.implies(p4)); > > assertFalse(p4.implies(p1)); > assertFalse(p4.implies(p2)); > assertFalse(p4.implies(p3)); > } > -- I like: Like Like - The likeliest place on the web <http://like-like.xenei.com> LinkedIn: http://www.linkedin.com/in/claudewarren