You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by km...@apache.org on 2013/06/18 19:55:38 UTC

git commit: KNOX-70: Add unit and functional testing for HBase

Updated Branches:
  refs/heads/master 7194b3c5b -> c8a0fc54f


KNOX-70: Add unit and functional testing for HBase


Project: http://git-wip-us.apache.org/repos/asf/incubator-knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-knox/commit/c8a0fc54
Tree: http://git-wip-us.apache.org/repos/asf/incubator-knox/tree/c8a0fc54
Diff: http://git-wip-us.apache.org/repos/asf/incubator-knox/diff/c8a0fc54

Branch: refs/heads/master
Commit: c8a0fc54f41a380892d9d7a4f5b4c1b6d927e967
Parents: 7194b3c
Author: Kevin Minder <ke...@hortonworks.com>
Authored: Tue Jun 18 13:55:32 2013 -0400
Committer: Kevin Minder <ke...@hortonworks.com>
Committed: Tue Jun 18 13:55:32 2013 -0400

----------------------------------------------------------------------
 .../hadoop/gateway/GatewayBasicFuncTest.java    | 581 ++++++++++++++++++-
 1 file changed, 580 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-knox/blob/c8a0fc54/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayBasicFuncTest.java
----------------------------------------------------------------------
diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayBasicFuncTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayBasicFuncTest.java
index 9137af2..8a0105f 100644
--- a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayBasicFuncTest.java
+++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayBasicFuncTest.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.gateway;
 
+import com.jayway.restassured.http.ContentType;
 import com.jayway.restassured.response.Response;
 import com.mycila.xmltool.XMLDoc;
 import com.mycila.xmltool.XMLTag;
@@ -49,6 +50,10 @@ import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.startsWith;
+import static org.xmlmatchers.XmlMatchers.isEquivalentTo;
+import static org.xmlmatchers.transform.XmlConverters.the;
+import static uk.co.datumedge.hamcrest.json.SameJSONAs.sameJSONAs;
+
 
 @Category( { FunctionalTests.class, MediumTests.class } )
 public class GatewayBasicFuncTest {
@@ -113,6 +118,7 @@ public class GatewayBasicFuncTest {
     driver.setupService( "TEMPLETON", "http://" + TEST_HOST + ":50111/templeton/v1", "/cluster/templeton/api/v1", USE_MOCK_SERVICES );
     driver.setupService( "OOZIE", "http://" + TEST_HOST + ":11000/oozie", "/cluster/oozie/api", USE_MOCK_SERVICES );
     driver.setupService( "HIVE", "http://" + TEST_HOST + ":10000", "/cluster/hive", USE_MOCK_SERVICES );
+    driver.setupService( "HBASE", "http://" + TEST_HOST + ":2707", "/cluster/hbase/api", USE_MOCK_SERVICES );
     driver.setupGateway( config, "cluster", createTopology(), USE_GATEWAY );
   }
 
@@ -174,7 +180,10 @@ public class GatewayBasicFuncTest {
             .addTag( "url" ).addText( driver.getRealUrl( "OOZIE" ) ).gotoParent()
           .addTag( "service" )
             .addTag( "role" ).addText( "HIVE" )
-            .addTag( "url" ).addText( driver.getRealUrl( "HIVE" ) )
+            .addTag( "url" ).addText( driver.getRealUrl( "HIVE" ) ).gotoParent()
+          .addTag( "service" )
+            .addTag( "role" ).addText( "HBASE" )
+            .addTag( "url" ).addText( driver.getRealUrl( "HBASE" ) )
         .gotoRoot();
     return xml;
   }
@@ -1173,4 +1182,574 @@ public class GatewayBasicFuncTest {
         .when().post( driver.getUrl( "HIVE" ) );
     driver.assertComplete();
   }
+
+  @Test
+  public void testHbaseGetTableList() throws IOException {
+    String username = "hbase";
+    String password = "hbase-password";
+    String resourceName = "hbase/table-list";
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( "/" )
+    .header( "Accept", ContentType.XML.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .contentType( ContentType.XML.toString() );
+    
+    Response response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.XML.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.XML )
+    .when().get( driver.getUrl( "HBASE" ) );
+    
+    MatcherAssert
+        .assertThat(
+            the( response.getBody().asString() ),
+            isEquivalentTo( the( driver.getResourceString( resourceName + ".xml" ) ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( "/" )
+    .header( "Accept", ContentType.JSON.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .contentType( ContentType.JSON.toString() );
+    
+    response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.JSON.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.JSON )
+    .when().get( driver.getUrl( "HBASE" ) );
+    
+    MatcherAssert
+    .assertThat( response.getBody().asString(), sameJSONAs( driver.getResourceString( resourceName + ".json" ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( "/" )
+    .header( "Accept", "application/x-protobuf" )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".protobuf" ) )
+    .contentType( "application/x-protobuf" );
+    
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", "application/x-protobuf")
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .content( is( driver.getResourceString( resourceName + ".protobuf" ) )  )
+    .contentType( "application/x-protobuf" )
+    .when().get( driver.getUrl( "HBASE" ) );
+    driver.assertComplete();
+  }
+
+  @Test
+  public void testHbaseCreateTableAndVerifySchema() throws IOException {
+    String username = "hbase";
+    String password = "hbase-password";
+    String resourceName = "hbase/table-schema";
+    String path = "/table/schema";
+
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( path )
+    .respond()
+    .status( HttpStatus.SC_CREATED )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .contentType( ContentType.XML.toString() );
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", driver.getRealUrl( "HBASE" ) + path  )
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_CREATED )
+    .contentType( ContentType.XML )
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", startsWith( driver.getUrl( "HBASE" ) + path ) )
+    .when().put( driver.getUrl( "HBASE" ) + path );
+    driver.assertComplete();
+
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( path )
+    .respond()
+    .status( HttpStatus.SC_CREATED )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .contentType( ContentType.JSON.toString() );
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", driver.getRealUrl( "HBASE" ) + path  )
+    
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_CREATED )
+    .contentType( ContentType.JSON )
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", startsWith( driver.getUrl( "HBASE" ) + path ) )
+    .when().put( driver.getUrl( "HBASE" ) + path );
+    driver.assertComplete();
+
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( path )
+    .respond()
+    .status( HttpStatus.SC_CREATED )
+    .content( driver.getResourceBytes( resourceName + ".protobuf" ) )
+    .contentType( "application/x-protobuf" );
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", driver.getRealUrl( "HBASE" ) + path  );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_CREATED )
+    .contentType( "application/x-protobuf" )
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", startsWith( driver.getUrl( "HBASE" ) + path ) )
+    .when().put( driver.getUrl( "HBASE" ) + path );
+    driver.assertComplete();
+
+  }
+
+  @Test
+  public void testHbaseGetTableSchema() throws IOException {
+    String username = "hbase";
+    String password = "hbase-password";
+    String resourceName = "hbase/table-metadata";
+    String path = "/table/schema";
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( path )
+    .header( "Accept", ContentType.XML.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .contentType( ContentType.XML.toString() );
+
+    Response response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.XML.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.XML )
+    .when().get( driver.getUrl( "HBASE" ) + path );
+
+    MatcherAssert
+        .assertThat(
+            the( response.getBody().asString() ),
+            isEquivalentTo( the( driver.getResourceString( resourceName + ".xml" ) ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( path )
+    .header( "Accept", ContentType.JSON.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .contentType( ContentType.JSON.toString() );
+
+    response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.JSON.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.JSON )
+    .when().get( driver.getUrl( "HBASE" ) + path );
+    
+    MatcherAssert
+    .assertThat( response.getBody().asString(), sameJSONAs( driver.getResourceString( resourceName + ".json" ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( path )
+    .header( "Accept", "application/x-protobuf" )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".protobuf" ) )
+    .contentType( "application/x-protobuf" );
+
+    response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", "application/x-protobuf" )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .content( is( driver.getResourceString( resourceName + ".protobuf" ) ) )
+    .contentType( "application/x-protobuf" )
+    .when().get( driver.getUrl( "HBASE" ) + path );
+    driver.assertComplete();
+  }
+
+  @Test
+  public void testHbaseInsertDataIntoTable() throws IOException {
+    String username = "hbase";
+    String password = "hbase-password";
+    
+    String resourceName = "hbase/table-data";
+    String singleRowPath = "/table/testrow";
+    String multipleRowPath = "/table/false-row-key";
+    
+    //PUT request
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( multipleRowPath )
+    .header( "Content-Type", ContentType.XML.toString() )
+    .content( driver.getResourceStream( resourceName + ".xml" ) )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", ContentType.XML.toString() )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().put( driver.getUrl( "HBASE" ) + multipleRowPath );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( singleRowPath )
+    .header( "Content-Type", ContentType.JSON.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", ContentType.JSON.toString() )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().put( driver.getUrl( "HBASE" ) + singleRowPath );
+    driver.assertComplete();
+ 
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( multipleRowPath )
+    .header( "Content-Type", "application/x-protobuf" )
+    .content( driver.getResourceStream( resourceName + ".protobuf" ) )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", "application/x-protobuf" )
+    .content( driver.getResourceBytes( resourceName + ".protobuf" ) )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().put( driver.getUrl( "HBASE" ) + multipleRowPath );
+    driver.assertComplete();
+    
+    //POST request
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "POST" )
+    .pathInfo( multipleRowPath )
+    .header( "Content-Type", ContentType.XML.toString() )
+    .content( driver.getResourceStream( resourceName + ".xml" ) )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", ContentType.XML.toString() )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().post( driver.getUrl( "HBASE" ) + multipleRowPath );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "POST" )
+    .pathInfo( singleRowPath )
+    .header( "Content-Type", ContentType.JSON.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", ContentType.JSON.toString() )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().post( driver.getUrl( "HBASE" ) + singleRowPath );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "POST" )
+    .pathInfo( multipleRowPath )
+    .header( "Content-Type", "application/x-protobuf" )
+    .content( driver.getResourceStream( resourceName + ".protobuf" ) )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", "application/x-protobuf" )
+    .content( driver.getResourceBytes( resourceName + ".protobuf" ) )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().post( driver.getUrl( "HBASE" ) + multipleRowPath );
+    driver.assertComplete();
+  }
+
+  @Test
+  public void testHbaseDeleteDataFromTable() {
+    String username = "hbase";
+    String password = "hbase-password";
+    
+    String tableId = "table";
+    String rowId = "row";
+    String familyId = "family";
+    String columnId = "column";
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "DELETE" )
+    .pathInfo( "/" + tableId + "/" + rowId )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().delete( driver.getUrl( "HBASE" ) + "/" + tableId + "/" + rowId );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "DELETE" )
+    .pathInfo( "/" + tableId + "/" + rowId + "/" + familyId )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().delete( driver.getUrl( "HBASE" ) + "/" + tableId + "/" + rowId + "/" + familyId );
+    driver.assertComplete();
+
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "DELETE" )
+    .pathInfo( "/" + tableId + "/" + rowId + "/" + familyId + ":" + columnId )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().delete( driver.getUrl( "HBASE" ) + "/" + tableId + "/" + rowId + "/" + familyId + ":" + columnId );
+    driver.assertComplete();
+
+  }
+
+  @Test
+  public void testHbaseQueryTableData() throws IOException {
+    String username = "hbase";
+    String password = "hbase-password";
+    
+    String resourceName = "hbase/table-data";
+    
+    String allRowsPath = "/table/*";
+    String rowsStartsWithPath = "/table/row*";
+    String rowsWithKeyPath = "/table/row";
+    String rowsWithKeyAndColumnPath = "/table/row/family:col";
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( allRowsPath )
+    .header( "Accept", ContentType.XML.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .contentType( ContentType.XML.toString() );
+
+    Response response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.XML.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.XML )
+    .when().get( driver.getUrl( "HBASE" ) + allRowsPath );
+    
+    MatcherAssert
+    .assertThat(
+        the( response.getBody().asString() ),
+        isEquivalentTo( the( driver.getResourceString( resourceName + ".xml" ) ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( rowsStartsWithPath )
+    .header( "Accept", ContentType.XML.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".xml" ) )
+    .contentType( ContentType.XML.toString() );
+
+    response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.XML.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.XML )
+    .when().get( driver.getUrl( "HBASE" ) + rowsStartsWithPath );
+    
+    MatcherAssert
+    .assertThat(
+        the( response.getBody().asString() ),
+        isEquivalentTo( the( driver.getResourceString( resourceName + ".xml" ) ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( rowsWithKeyPath )
+    .header( "Accept", ContentType.JSON.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .contentType( ContentType.JSON.toString() );
+
+    response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.JSON.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.JSON )
+    .when().get( driver.getUrl( "HBASE" ) + rowsWithKeyPath );
+    
+    MatcherAssert
+    .assertThat( response.getBody().asString(), sameJSONAs( driver.getResourceString( resourceName + ".json" ) ) );
+    driver.assertComplete();
+    
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( rowsWithKeyAndColumnPath )
+    .header( "Accept", ContentType.JSON.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( resourceName + ".json" ) )
+    .contentType( ContentType.JSON.toString() );
+
+    response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.JSON.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.JSON )
+    .when().get( driver.getUrl( "HBASE" ) + rowsWithKeyAndColumnPath );
+    
+    MatcherAssert
+    .assertThat( response.getBody().asString(), sameJSONAs( driver.getResourceString( resourceName + ".json" ) ) );
+    driver.assertComplete();
+  }
+
+  @Test
+  public void testHbaseUseScanner() throws IOException {
+    String username = "hbase";
+    String password = "hbase-password";
+    
+    String scannerDefinitionResourceName = "hbase/scanner-definition";
+    String tableDataResourceName = "hbase/table-data";
+    String scannerPath = "/table/scanner";
+    String scannerId = "13705290446328cff5ed";
+    
+    //Create scanner for table using PUT and POST requests
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "PUT" )
+    .pathInfo( scannerPath )
+    .header( "Content-Type", ContentType.XML.toString() )
+    .respond()
+    .status( HttpStatus.SC_CREATED );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .header( "Content-Type", ContentType.XML.toString() )
+    .content( driver.getResourceBytes( scannerDefinitionResourceName + ".xml" ) )
+    .expect()
+    //TODO: Add "Location" header check  when issue with incorrect outbound rewrites will be resolved
+    //.header( "Location", startsWith( driver.getUrl( "HBASE" ) + createScannerPath ) )
+    .statusCode( HttpStatus.SC_CREATED )
+    .when().put( driver.getUrl( "HBASE" ) + scannerPath );
+    driver.assertComplete();
+    
+    //Get the values of the next cells found by the scanner 
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "GET" )
+    .pathInfo( scannerPath + "/" + scannerId )
+    .header( "Accept", ContentType.XML.toString() )
+    .respond()
+    .status( HttpStatus.SC_OK )
+    .content( driver.getResourceBytes( tableDataResourceName + ".xml" ) )
+    .contentType( ContentType.XML.toString() );
+
+    Response response = given()
+    .auth().preemptive().basic( username, password )
+    .header( "Accept", ContentType.XML.toString() )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .contentType( ContentType.XML )
+    .when().get( driver.getUrl( "HBASE" ) + scannerPath + "/" + scannerId );
+    
+    MatcherAssert
+    .assertThat(
+        the( response.getBody().asString() ),
+        isEquivalentTo( the( driver.getResourceString( tableDataResourceName + ".xml" ) ) ) );
+    driver.assertComplete();
+    
+    //Delete scanner
+    driver.getMock( "HBASE" )
+    .expect()
+    .method( "DELETE" )
+    .pathInfo( scannerPath + "/" + scannerId )
+    .respond()
+    .status( HttpStatus.SC_OK );
+
+    given()
+    .auth().preemptive().basic( username, password )
+    .expect()
+    .statusCode( HttpStatus.SC_OK )
+    .when().delete( driver.getUrl( "HBASE" ) + scannerPath + "/" + scannerId );
+    driver.assertComplete();
+  }
+
 }
\ No newline at end of file