SimplePrivilegeCache implements PrivilegeCache { @Override public Set<String> listPrivileges(Set<String> groups, ActiveRoleSet roleSet) { if (cachedPrivileges == null) { cachedPrivileges = new HashSet<String>(); } return cachedPrivileges; } SimplePrivilegeCache(Set<String> cachedPrivileges); @Override Set<String> listPrivileges(Set<String> groups, ActiveRoleSet roleSet); @Override void close(); @Override Set<String> listPrivileges(Set<String> groups, Set<String> users, ActiveRoleSet roleSet);  }
@Test public void testListPrivilegesCaseSensitivity() { CommonPrivilege dbSelect = create(new KeyValue("Server", "Server1"), new KeyValue("db", "db1"), new KeyValue("action", "SELECT")); SimplePrivilegeCache cache = new SimplePrivilegeCache(Sets.newHashSet(dbSelect.toString())); assertEquals(1, cache.listPrivileges(null, null, null).size()); }
@Test public void testListPrivilegesWildCard() { CommonPrivilege t1D1Select = create(new KeyValue("Server", "server1"), new KeyValue("db", "db1"), new KeyValue("table", "t1"), new KeyValue("action", "SELECT")); CommonPrivilege t1D2Select = create(new KeyValue("Server", "server1"), new KeyValue("db", "db2"), new KeyValue("table", "t1"), new KeyValue("action", "SELECT")); CommonPrivilege t2Select = create(new KeyValue("Server", "server1"), new KeyValue("db", "db1"), new KeyValue("table", "t2"), new KeyValue("action", "SELECT")); CommonPrivilege wildCardTable = create(new KeyValue("Server", "server1"), new KeyValue("db", "db1"), new KeyValue("table", "*"), new KeyValue("action", "SELECT")); CommonPrivilege allTable = create(new KeyValue("Server", "server1"), new KeyValue("db", "db1"), new KeyValue("table", "ALL"), new KeyValue("action", "SELECT")); CommonPrivilege allDatabase = create(new KeyValue("Server", "server1"), new KeyValue("db", "*")); CommonPrivilege colSelect = create(new KeyValue("Server", "server1"), new KeyValue("db", "db1"), new KeyValue("table", "t1"), new KeyValue("column", "c1"), new KeyValue("action", "SELECT")); SimplePrivilegeCache cache = new SimplePrivilegeCache(Sets.newHashSet(t1D1Select.toString(), t1D2Select.toString(), t2Select.toString(), wildCardTable.toString(), allTable.toString(), allDatabase.toString(), colSelect.toString())); assertEquals(7, cache.listPrivileges(null, null, null).size()); }
@Test public void testListPrivilegesURI() { CommonPrivilege uri1Select = create(new KeyValue("Server", "server1"), new KeyValue("uri", "hdfs: CommonPrivilege uri2Select = create(new KeyValue("Server", "server1"), new KeyValue("uri", "hdfs: SimplePrivilegeCache cache = new SimplePrivilegeCache(Sets.newHashSet(uri1Select.toString(), uri2Select.toString())); assertEquals(2, cache.listPrivileges(null, null, null).size()); }
@Test @Ignore("This test should be run manually.") public void testListPrivilegesPerf() { int priDbCount = 1000; int priTableCount = 10; int authDbCount = 1200; int authTableCount = 1; Set<String> privileges = generatePrivilegeStrings(priDbCount, priTableCount); SimplePrivilegeCache cache = new SimplePrivilegeCache(privileges); List<Authorizable[]> authorizables = generateAuthoriables(12000, 10); System.out.println( "SimplePrivilegeCache - {privileges: db - " + priDbCount + ", table - " + priTableCount + "}, {authorizable: db - " + authDbCount + ", table - " + authTableCount + "}"); long start = System.currentTimeMillis(); for (Authorizable[] authorizableHierarchy : authorizables) { Set<String> priStrings = cache.listPrivileges(null, null, null); for (String priString : priStrings) { CommonPrivilege currPri = create(priString); currPri.getParts(); } } long end = System.currentTimeMillis(); System.out.println("SimplePrivilegeCache - total time on list string: " + (end - start) + " ms"); }