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