1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.rest;
20
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23
24 import java.io.ByteArrayInputStream;
25 import java.io.IOException;
26
27 import javax.xml.bind.JAXBContext;
28 import javax.xml.bind.JAXBException;
29
30 import org.apache.hadoop.conf.Configuration;
31 import org.apache.hadoop.hbase.HBaseTestingUtility;
32 import org.apache.hadoop.hbase.NamespaceDescriptor;
33 import org.apache.hadoop.hbase.client.Admin;
34 import org.apache.hadoop.hbase.rest.client.Client;
35 import org.apache.hadoop.hbase.rest.client.Cluster;
36 import org.apache.hadoop.hbase.rest.client.Response;
37 import org.apache.hadoop.hbase.rest.model.NamespacesModel;
38 import org.apache.hadoop.hbase.rest.model.TestNamespacesModel;
39 import org.apache.hadoop.hbase.testclassification.MediumTests;
40 import org.apache.hadoop.hbase.util.Bytes;
41 import org.junit.AfterClass;
42 import org.junit.BeforeClass;
43 import org.junit.Test;
44 import org.junit.experimental.categories.Category;
45
46 @Category(MediumTests.class)
47 public class TestNamespacesResource {
48 private static String NAMESPACE1 = "TestNamespacesInstanceResource1";
49 private static String NAMESPACE2 = "TestNamespacesInstanceResource2";
50
51 private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
52 private static final HBaseRESTTestingUtility REST_TEST_UTIL =
53 new HBaseRESTTestingUtility();
54 private static Client client;
55 private static JAXBContext context;
56 private static Configuration conf;
57 private static TestNamespacesModel testNamespacesModel;
58
59 @BeforeClass
60 public static void setUpBeforeClass() throws Exception {
61 conf = TEST_UTIL.getConfiguration();
62 TEST_UTIL.startMiniCluster();
63 REST_TEST_UTIL.startServletContainer(conf);
64 client = new Client(new Cluster().add("localhost", REST_TEST_UTIL.getServletPort()));
65 testNamespacesModel = new TestNamespacesModel();
66 context = JAXBContext.newInstance(NamespacesModel.class);
67 }
68
69 @AfterClass
70 public static void tearDownAfterClass() throws Exception {
71 REST_TEST_UTIL.shutdownServletContainer();
72 TEST_UTIL.shutdownMiniCluster();
73 }
74
75 private static NamespacesModel fromXML(byte[] content) throws JAXBException {
76 return (NamespacesModel) context.createUnmarshaller()
77 .unmarshal(new ByteArrayInputStream(content));
78 }
79
80 private boolean doesNamespaceExist(Admin admin, String namespaceName) throws IOException {
81 NamespaceDescriptor[] nd = admin.listNamespaceDescriptors();
82 for(int i = 0; i < nd.length; i++) {
83 if(nd[i].getName().equals(namespaceName)) {
84 return true;
85 }
86 }
87 return false;
88 }
89
90 private void createNamespaceViaAdmin(Admin admin, String name) throws IOException {
91 NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(name);
92 NamespaceDescriptor nsd = builder.build();
93 admin.createNamespace(nsd);
94 }
95
96 @Test
97 public void testNamespaceListXMLandJSON() throws IOException, JAXBException {
98 String namespacePath = "/namespaces/";
99 NamespacesModel model;
100 Response response;
101
102
103 Admin admin = TEST_UTIL.getHBaseAdmin();
104 assertFalse(doesNamespaceExist(admin, NAMESPACE1));
105 model = testNamespacesModel.buildTestModel();
106 testNamespacesModel.checkModel(model);
107
108
109 response = client.get(namespacePath, Constants.MIMETYPE_XML);
110 assertEquals(200, response.getCode());
111 model = fromXML(response.getBody());
112 testNamespacesModel.checkModel(model, "hbase", "default");
113 response = client.get(namespacePath, Constants.MIMETYPE_JSON);
114 assertEquals(200, response.getCode());
115 model = testNamespacesModel.fromJSON(Bytes.toString(response.getBody()));
116 testNamespacesModel.checkModel(model, "hbase", "default");
117
118
119 createNamespaceViaAdmin(admin, NAMESPACE1);
120 response = client.get(namespacePath, Constants.MIMETYPE_XML);
121 assertEquals(200, response.getCode());
122 model = fromXML(response.getBody());
123 testNamespacesModel.checkModel(model, NAMESPACE1, "hbase", "default");
124 response = client.get(namespacePath, Constants.MIMETYPE_JSON);
125 assertEquals(200, response.getCode());
126 model = testNamespacesModel.fromJSON(Bytes.toString(response.getBody()));
127 testNamespacesModel.checkModel(model, NAMESPACE1, "hbase", "default");
128
129
130 createNamespaceViaAdmin(admin, NAMESPACE2);
131 response = client.get(namespacePath, Constants.MIMETYPE_XML);
132 assertEquals(200, response.getCode());
133 model = fromXML(response.getBody());
134 testNamespacesModel.checkModel(model, NAMESPACE1, NAMESPACE2, "hbase", "default");
135 response = client.get(namespacePath, Constants.MIMETYPE_JSON);
136 assertEquals(200, response.getCode());
137 model = testNamespacesModel.fromJSON(Bytes.toString(response.getBody()));
138 testNamespacesModel.checkModel(model, NAMESPACE1, NAMESPACE2, "hbase", "default");
139
140
141 admin.deleteNamespace(NAMESPACE1);
142 response = client.get(namespacePath, Constants.MIMETYPE_XML);
143 assertEquals(200, response.getCode());
144 model = fromXML(response.getBody());
145 testNamespacesModel.checkModel(model, NAMESPACE2, "hbase", "default");
146 response = client.get(namespacePath, Constants.MIMETYPE_JSON);
147 assertEquals(200, response.getCode());
148 model = testNamespacesModel.fromJSON(Bytes.toString(response.getBody()));
149 testNamespacesModel.checkModel(model, NAMESPACE2, "hbase", "default");
150
151 admin.deleteNamespace(NAMESPACE2);
152 }
153
154 @Test
155 public void testNamespaceListPBandDefault() throws IOException, JAXBException {
156 String schemaPath = "/namespaces/";
157 NamespacesModel model;
158 Response response;
159
160
161 Admin admin = TEST_UTIL.getHBaseAdmin();
162 assertFalse(doesNamespaceExist(admin, NAMESPACE1));
163 model = testNamespacesModel.buildTestModel();
164 testNamespacesModel.checkModel(model);
165
166
167 response = client.get(schemaPath, Constants.MIMETYPE_PROTOBUF);
168 assertEquals(200, response.getCode());
169 model.getObjectFromMessage(response.getBody());
170 testNamespacesModel.checkModel(model, "hbase", "default");
171 response = client.get(schemaPath);
172 assertEquals(200, response.getCode());
173
174
175 createNamespaceViaAdmin(admin, NAMESPACE1);
176 response = client.get(schemaPath, Constants.MIMETYPE_PROTOBUF);
177 assertEquals(200, response.getCode());
178 model.getObjectFromMessage(response.getBody());
179 testNamespacesModel.checkModel(model, NAMESPACE1, "hbase", "default");
180 response = client.get(schemaPath);
181 assertEquals(200, response.getCode());
182
183
184 createNamespaceViaAdmin(admin, NAMESPACE2);
185 response = client.get(schemaPath, Constants.MIMETYPE_PROTOBUF);
186 assertEquals(200, response.getCode());
187 model.getObjectFromMessage(response.getBody());
188 testNamespacesModel.checkModel(model, NAMESPACE1, NAMESPACE2, "hbase", "default");
189 response = client.get(schemaPath);
190 assertEquals(200, response.getCode());
191
192
193 admin.deleteNamespace(NAMESPACE1);
194 response = client.get(schemaPath, Constants.MIMETYPE_PROTOBUF);
195 assertEquals(200, response.getCode());
196 model.getObjectFromMessage(response.getBody());
197 testNamespacesModel.checkModel(model, NAMESPACE2, "hbase", "default");
198 response = client.get(schemaPath);
199 assertEquals(200, response.getCode());
200
201 admin.deleteNamespace(NAMESPACE2);
202 }
203 }