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 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