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