1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.constraint;
19
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertTrue;
23 import static org.junit.Assert.fail;
24
25 import java.util.List;
26
27 import org.apache.hadoop.conf.Configuration;
28 import org.apache.hadoop.hbase.HTableDescriptor;
29 import org.apache.hadoop.hbase.testclassification.SmallTests;
30 import org.apache.hadoop.hbase.TableName;
31 import org.apache.hadoop.hbase.client.Put;
32 import org.apache.hadoop.hbase.constraint.TestConstraint.CheckWasRunConstraint;
33 import org.apache.hadoop.hbase.constraint.WorksConstraint.NameConstraint;
34 import org.apache.hadoop.hbase.util.Pair;
35 import org.junit.Test;
36 import org.junit.experimental.categories.Category;
37
38
39
40
41 @Category(SmallTests.class)
42 public class TestConstraints {
43
44 @SuppressWarnings("unchecked")
45 @Test
46 public void testSimpleReadWrite() throws Throwable {
47 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("table"));
48 Constraints.add(desc, WorksConstraint.class);
49
50 List<? extends Constraint> constraints = Constraints.getConstraints(desc,
51 this.getClass().getClassLoader());
52 assertEquals(1, constraints.size());
53
54 assertEquals(WorksConstraint.class, constraints.get(0).getClass());
55
56
57
58 Constraints.add(desc, AlsoWorks.class, NameConstraint.class);
59 constraints = Constraints.getConstraints(desc, this.getClass()
60 .getClassLoader());
61 assertEquals(3, constraints.size());
62
63 assertEquals(WorksConstraint.class, constraints.get(0).getClass());
64 assertEquals(AlsoWorks.class, constraints.get(1).getClass());
65 assertEquals(NameConstraint.class, constraints.get(2).getClass());
66
67 }
68
69 @SuppressWarnings("unchecked")
70 @Test
71 public void testReadWriteWithConf() throws Throwable {
72 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("table"));
73 Constraints.add(
74 desc,
75 new Pair<Class<? extends Constraint>, Configuration>(
76 CheckConfigurationConstraint.class, CheckConfigurationConstraint
77 .getConfiguration()));
78
79 List<? extends Constraint> c = Constraints.getConstraints(desc, this
80 .getClass().getClassLoader());
81 assertEquals(1, c.size());
82
83 assertEquals(CheckConfigurationConstraint.class, c.get(0).getClass());
84
85
86 Constraints.add(desc, new Pair<Class<? extends Constraint>, Configuration>(
87 CheckConfigurationConstraint.class, new Configuration(false)));
88
89 try {
90 Constraints.getConstraints(desc, this.getClass().getClassLoader());
91 fail("No exception thrown - configuration not overwritten");
92 } catch (IllegalArgumentException e) {
93
94 }
95 }
96
97
98
99
100
101
102 @SuppressWarnings("unchecked")
103 @Test
104 public void testEnableDisableRemove() throws Exception {
105 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("table"));
106
107
108 Constraints.add(desc, AllPassConstraint.class);
109
110 assertTrue(Constraints.enabled(desc, AllPassConstraint.class));
111 assertTrue(desc.hasCoprocessor(ConstraintProcessor.class.getName()));
112
113
114 Constraints.disable(desc);
115 assertFalse(desc.hasCoprocessor(ConstraintProcessor.class.getName()));
116
117 assertTrue(Constraints.enabled(desc, AllPassConstraint.class));
118
119
120 Constraints.remove(desc, AllPassConstraint.class);
121 assertFalse(Constraints.has(desc, AllPassConstraint.class));
122
123
124 Constraints.add(desc, AllPassConstraint.class);
125
126
127 Constraints.remove(desc);
128 assertFalse(desc.hasCoprocessor(ConstraintProcessor.class.getName()));
129 assertFalse(Constraints.has(desc, AllPassConstraint.class));
130
131 }
132
133
134
135
136
137
138 @SuppressWarnings("unchecked")
139 @Test
140 public void testUpdateConstraint() throws Exception {
141 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("table"));
142 Constraints.add(desc, CheckConfigurationConstraint.class,
143 CheckWasRunConstraint.class);
144 Constraints.setConfiguration(desc, CheckConfigurationConstraint.class,
145 CheckConfigurationConstraint.getConfiguration());
146
147 List<? extends Constraint> constraints = Constraints.getConstraints(desc,
148 this.getClass().getClassLoader());
149
150 assertEquals(2, constraints.size());
151
152
153 assertEquals(CheckConfigurationConstraint.class, constraints.get(0)
154 .getClass());
155 assertEquals(CheckWasRunConstraint.class, constraints.get(1).getClass());
156 }
157
158
159
160
161
162
163
164
165 @Test
166 public void testRemoveUnsetConstraint() throws Throwable {
167 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("table"));
168 Constraints.remove(desc);
169 Constraints.remove(desc, AlsoWorks.class);
170 }
171
172 @Test
173 public void testConfigurationPreserved() throws Throwable {
174 Configuration conf = new Configuration();
175 conf.setBoolean("_ENABLED", false);
176 conf.setLong("_PRIORITY", 10);
177 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("table"));
178 Constraints.add(desc, AlsoWorks.class, conf);
179 Constraints.add(desc, WorksConstraint.class);
180 assertFalse(Constraints.enabled(desc, AlsoWorks.class));
181 List<? extends Constraint> constraints = Constraints.getConstraints(desc,
182 this.getClass().getClassLoader());
183 for (Constraint c : constraints) {
184 Configuration storedConf = c.getConf();
185 if (c instanceof AlsoWorks)
186 assertEquals(10, storedConf.getLong("_PRIORITY", -1));
187
188 else
189 assertEquals(2, storedConf.getLong("_PRIORITY", -1));
190
191 }
192
193 }
194
195
196
197
198
199
200 public static class AlsoWorks extends BaseConstraint {
201 @Override
202 public void check(Put p) {
203
204 }
205 }
206
207 }