1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.rest;
21
22 import java.io.ByteArrayInputStream;
23 import java.io.IOException;
24
25 import javax.ws.rs.core.MediaType;
26 import javax.xml.bind.JAXBContext;
27 import javax.xml.bind.JAXBException;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.apache.hadoop.hbase.HBaseTestingUtility;
32 import org.apache.hadoop.hbase.testclassification.MediumTests;
33 import org.apache.hadoop.hbase.rest.client.Client;
34 import org.apache.hadoop.hbase.rest.client.Cluster;
35 import org.apache.hadoop.hbase.rest.client.Response;
36 import org.apache.hadoop.hbase.rest.model.StorageClusterVersionModel;
37 import org.apache.hadoop.hbase.rest.model.VersionModel;
38 import org.apache.hadoop.hbase.util.Bytes;
39
40 import static org.junit.Assert.*;
41
42 import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
43 import org.codehaus.jackson.map.ObjectMapper;
44 import org.junit.AfterClass;
45 import org.junit.BeforeClass;
46 import org.junit.Test;
47
48 import com.sun.jersey.spi.container.servlet.ServletContainer;
49 import org.junit.experimental.categories.Category;
50
51 @Category(MediumTests.class)
52 public class TestVersionResource {
53 private static final Log LOG = LogFactory.getLog(TestVersionResource.class);
54
55 private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
56 private static final HBaseRESTTestingUtility REST_TEST_UTIL =
57 new HBaseRESTTestingUtility();
58 private static Client client;
59 private static JAXBContext context;
60
61 @BeforeClass
62 public static void setUpBeforeClass() throws Exception {
63 TEST_UTIL.startMiniCluster();
64 REST_TEST_UTIL.startServletContainer(TEST_UTIL.getConfiguration());
65 client = new Client(new Cluster().add("localhost",
66 REST_TEST_UTIL.getServletPort()));
67 context = JAXBContext.newInstance(
68 VersionModel.class,
69 StorageClusterVersionModel.class);
70 }
71
72 @AfterClass
73 public static void tearDownAfterClass() throws Exception {
74 REST_TEST_UTIL.shutdownServletContainer();
75 TEST_UTIL.shutdownMiniCluster();
76 }
77
78 private static void validate(VersionModel model) {
79 assertNotNull(model);
80 assertNotNull(model.getRESTVersion());
81 assertEquals(RESTServlet.VERSION_STRING, model.getRESTVersion());
82 String osVersion = model.getOSVersion();
83 assertNotNull(osVersion);
84 assertTrue(osVersion.contains(System.getProperty("os.name")));
85 assertTrue(osVersion.contains(System.getProperty("os.version")));
86 assertTrue(osVersion.contains(System.getProperty("os.arch")));
87 String jvmVersion = model.getJVMVersion();
88 assertNotNull(jvmVersion);
89 assertTrue(jvmVersion.contains(System.getProperty("java.vm.vendor")));
90 assertTrue(jvmVersion.contains(System.getProperty("java.version")));
91 assertTrue(jvmVersion.contains(System.getProperty("java.vm.version")));
92 assertNotNull(model.getServerVersion());
93 String jerseyVersion = model.getJerseyVersion();
94 assertNotNull(jerseyVersion);
95 assertEquals(jerseyVersion, ServletContainer.class.getPackage()
96 .getImplementationVersion());
97 }
98
99 @Test
100 public void testGetStargateVersionText() throws IOException {
101 Response response = client.get("/version", Constants.MIMETYPE_TEXT);
102 assertTrue(response.getCode() == 200);
103 assertEquals(Constants.MIMETYPE_TEXT, response.getHeader("content-type"));
104 String body = Bytes.toString(response.getBody());
105 assertTrue(body.length() > 0);
106 assertTrue(body.contains(RESTServlet.VERSION_STRING));
107 assertTrue(body.contains(System.getProperty("java.vm.vendor")));
108 assertTrue(body.contains(System.getProperty("java.version")));
109 assertTrue(body.contains(System.getProperty("java.vm.version")));
110 assertTrue(body.contains(System.getProperty("os.name")));
111 assertTrue(body.contains(System.getProperty("os.version")));
112 assertTrue(body.contains(System.getProperty("os.arch")));
113 assertTrue(body.contains(ServletContainer.class.getPackage()
114 .getImplementationVersion()));
115 }
116
117 @Test
118 public void testGetStargateVersionXML() throws IOException, JAXBException {
119 Response response = client.get("/version", Constants.MIMETYPE_XML);
120 assertTrue(response.getCode() == 200);
121 assertEquals(Constants.MIMETYPE_XML, response.getHeader("content-type"));
122 VersionModel model = (VersionModel)
123 context.createUnmarshaller().unmarshal(
124 new ByteArrayInputStream(response.getBody()));
125 validate(model);
126 LOG.info("success retrieving Stargate version as XML");
127 }
128
129 @Test
130 public void testGetStargateVersionJSON() throws IOException {
131 Response response = client.get("/version", Constants.MIMETYPE_JSON);
132 assertTrue(response.getCode() == 200);
133 assertEquals(Constants.MIMETYPE_JSON, response.getHeader("content-type"));
134 ObjectMapper mapper = new JacksonJaxbJsonProvider()
135 .locateMapper(VersionModel.class, MediaType.APPLICATION_JSON_TYPE);
136 VersionModel model
137 = mapper.readValue(response.getBody(), VersionModel.class);
138 validate(model);
139 LOG.info("success retrieving Stargate version as JSON");
140 }
141
142 @Test
143 public void testGetStargateVersionPB() throws IOException {
144 Response response = client.get("/version", Constants.MIMETYPE_PROTOBUF);
145 assertTrue(response.getCode() == 200);
146 assertEquals(Constants.MIMETYPE_PROTOBUF, response.getHeader("content-type"));
147 VersionModel model = new VersionModel();
148 model.getObjectFromMessage(response.getBody());
149 validate(model);
150 response = client.get("/version", Constants.MIMETYPE_PROTOBUF_IETF);
151 assertTrue(response.getCode() == 200);
152 assertEquals(Constants.MIMETYPE_PROTOBUF_IETF, response.getHeader("content-type"));
153 model = new VersionModel();
154 model.getObjectFromMessage(response.getBody());
155 validate(model);
156 }
157
158 @Test
159 public void testGetStorageClusterVersionText() throws IOException {
160 Response response = client.get("/version/cluster", Constants.MIMETYPE_TEXT);
161 assertTrue(response.getCode() == 200);
162 assertEquals(Constants.MIMETYPE_TEXT, response.getHeader("content-type"));
163 }
164
165 @Test
166 public void testGetStorageClusterVersionXML() throws IOException,
167 JAXBException {
168 Response response = client.get("/version/cluster",Constants.MIMETYPE_XML);
169 assertTrue(response.getCode() == 200);
170 assertEquals(Constants.MIMETYPE_XML, response.getHeader("content-type"));
171 StorageClusterVersionModel clusterVersionModel =
172 (StorageClusterVersionModel)
173 context.createUnmarshaller().unmarshal(
174 new ByteArrayInputStream(response.getBody()));
175 assertNotNull(clusterVersionModel);
176 assertNotNull(clusterVersionModel.getVersion());
177 LOG.info("success retrieving storage cluster version as XML");
178 }
179
180 @Test
181 public void testGetStorageClusterVersionJSON() throws IOException {
182 Response response = client.get("/version/cluster", Constants.MIMETYPE_JSON);
183 assertTrue(response.getCode() == 200);
184 assertEquals(Constants.MIMETYPE_JSON, response.getHeader("content-type"));
185 ObjectMapper mapper = new JacksonJaxbJsonProvider()
186 .locateMapper(StorageClusterVersionModel.class, MediaType.APPLICATION_JSON_TYPE);
187 StorageClusterVersionModel clusterVersionModel
188 = mapper.readValue(response.getBody(), StorageClusterVersionModel.class);
189 assertNotNull(clusterVersionModel);
190 assertNotNull(clusterVersionModel.getVersion());
191 LOG.info("success retrieving storage cluster version as JSON");
192 }
193 }
194