View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
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