1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.zookeeper;
20
21 import java.io.IOException;
22 import java.util.List;
23
24 import org.apache.hadoop.conf.Configuration;
25 import org.apache.hadoop.hbase.HBaseConfiguration;
26 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
27 import org.apache.hadoop.hbase.security.Superusers;
28 import org.apache.hadoop.hbase.testclassification.SmallTests;
29 import org.apache.hadoop.security.UserGroupInformation;
30 import org.apache.zookeeper.KeeperException;
31 import org.apache.zookeeper.ZooDefs.Ids;
32 import org.apache.zookeeper.ZooDefs.Perms;
33 import org.apache.zookeeper.data.ACL;
34 import org.apache.zookeeper.data.Id;
35 import org.junit.Assert;
36 import org.junit.Test;
37 import org.junit.experimental.categories.Category;
38 import org.mockito.Mockito;
39
40
41
42
43 @Category({SmallTests.class})
44 public class TestZKUtil {
45
46 @Test
47 public void testUnsecure() throws ZooKeeperConnectionException, IOException {
48 Configuration conf = HBaseConfiguration.create();
49 conf.set(Superusers.SUPERUSER_CONF_KEY, "user1");
50 String node = "/hbase/testUnsecure";
51 ZooKeeperWatcher watcher = new ZooKeeperWatcher(conf, node, null, false);
52 List<ACL> aclList = ZKUtil.createACL(watcher, node, false);
53 Assert.assertEquals(1, aclList.size());
54 Assert.assertTrue(aclList.contains(Ids.OPEN_ACL_UNSAFE.iterator().next()));
55 }
56
57 @Test
58 public void testSecuritySingleSuperuser() throws ZooKeeperConnectionException, IOException {
59 Configuration conf = HBaseConfiguration.create();
60 conf.set(Superusers.SUPERUSER_CONF_KEY, "user1");
61 String node = "/hbase/testSecuritySingleSuperuser";
62 ZooKeeperWatcher watcher = new ZooKeeperWatcher(conf, node, null, false);
63 List<ACL> aclList = ZKUtil.createACL(watcher, node, true);
64 Assert.assertEquals(2, aclList.size());
65 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "user1"))));
66 Assert.assertTrue(aclList.contains(Ids.CREATOR_ALL_ACL.iterator().next()));
67 }
68
69 @Test
70 public void testCreateACL() throws ZooKeeperConnectionException, IOException {
71 Configuration conf = HBaseConfiguration.create();
72 conf.set(Superusers.SUPERUSER_CONF_KEY, "user1,@group1,user2,@group2,user3");
73 String node = "/hbase/testCreateACL";
74 ZooKeeperWatcher watcher = new ZooKeeperWatcher(conf, node, null, false);
75 List<ACL> aclList = ZKUtil.createACL(watcher, node, true);
76 Assert.assertEquals(4, aclList.size());
77 Assert.assertFalse(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "@group1"))));
78 Assert.assertFalse(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "@group2"))));
79 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "user1"))));
80 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "user2"))));
81 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "user3"))));
82 }
83
84 @Test
85 public void testCreateACLWithSameUser() throws ZooKeeperConnectionException, IOException {
86 Configuration conf = HBaseConfiguration.create();
87 conf.set(Superusers.SUPERUSER_CONF_KEY, "user4,@group1,user5,user6");
88 UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser("user4"));
89 String node = "/hbase/testCreateACL";
90 ZooKeeperWatcher watcher = new ZooKeeperWatcher(conf, node, null, false);
91 List<ACL> aclList = ZKUtil.createACL(watcher, node, true);
92 Assert.assertEquals(3, aclList.size());
93 Assert.assertFalse(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "@group1"))));
94 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("auth", ""))));
95 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "user5"))));
96 Assert.assertTrue(aclList.contains(new ACL(Perms.ALL, new Id("sasl", "user6"))));
97 }
98
99 @Test
100 public void testInterruptedDuringAction()
101 throws ZooKeeperConnectionException, IOException, KeeperException, InterruptedException {
102 final RecoverableZooKeeper recoverableZk = Mockito.mock(RecoverableZooKeeper.class);
103 ZooKeeperWatcher zkw = new ZooKeeperWatcher(HBaseConfiguration.create(), "unittest", null) {
104 @Override
105 public RecoverableZooKeeper getRecoverableZooKeeper() {
106 return recoverableZk;
107 }
108 };
109 Mockito.doThrow(new InterruptedException()).when(recoverableZk)
110 .getChildren(zkw.assignmentZNode, null);
111 try {
112 ZKUtil.listChildrenNoWatch(zkw, zkw.assignmentZNode);
113 } catch (KeeperException.SystemErrorException e) {
114
115 return;
116 }
117 Assert.fail("Should have thrown KeeperException but not");
118 }
119 }