Browse Source

add unit test

zhiru 5 years ago
parent
commit
42a1a707ee

+ 7 - 7
pom.xml

@@ -60,16 +60,16 @@
             <version>${protobuf.version}</version>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.12</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>RELEASE</version>
             <scope>test</scope>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
         <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <version>2.25.1</version>
-            <scope>test</scope>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+            <version>1.6</version>
         </dependency>
     </dependencies>
 

+ 4 - 0
src/main/java/io/milvus/client/DescribeIndexResponse.java

@@ -16,6 +16,10 @@ public class DescribeIndexResponse {
         return Optional.ofNullable(indexParam);
     }
 
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("DescribeIndexResponse {%s, %s}", response.toString(),

+ 4 - 0
src/main/java/io/milvus/client/DescribeTableResponse.java

@@ -16,6 +16,10 @@ public class DescribeTableResponse {
         return Optional.ofNullable(tableSchema);
     }
 
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("DescribeTableResponse {%s, %s}", response.toString(),

+ 4 - 0
src/main/java/io/milvus/client/GetTableRowCountResponse.java

@@ -13,6 +13,10 @@ public class GetTableRowCountResponse {
         return tableRowCount;
     }
 
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("CountTableResponse {%s, table row count = %d}",

+ 4 - 0
src/main/java/io/milvus/client/HasTableResponse.java

@@ -13,6 +13,10 @@ public class HasTableResponse {
         return hasTable;
     }
 
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("HasTableResponse {%s, has table = %s}",

+ 5 - 0
src/main/java/io/milvus/client/InsertResponse.java

@@ -17,6 +17,11 @@ public class InsertResponse {
 
     //TODO: iterator
 
+
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("InsertResponse {%s, returned %d vector ids}",

+ 1 - 1
src/main/java/io/milvus/client/MilvusClient.java

@@ -11,7 +11,7 @@ public interface MilvusClient {
 
     boolean connected();
 
-    Response disconnect();
+    Response disconnect() throws InterruptedException;
 
     Response createTable(TableSchemaParam tableSchemaParam);
 

+ 20 - 118
src/main/java/io/milvus/client/MilvusGrpcClient.java

@@ -16,20 +16,15 @@ public class MilvusGrpcClient implements MilvusClient {
     private ManagedChannel channel = null;
     private io.milvus.client.grpc.MilvusServiceGrpc.MilvusServiceBlockingStub blockingStub;
 
-//    public MilvusGrpcClient(String host, int port) {
+//    private MilvusGrpcClient(String host, int port) {
 //        this(ManagedChannelBuilder.forAddress(host, port).usePlaintext());
 //    }
 //
-//    public MilvusGrpcClient(ManagedChannelBuilder<?> channelBuilder) {
+//    private MilvusGrpcClient(ManagedChannelBuilder<?> channelBuilder) {
 //        channel = channelBuilder.build();
 //        blockingStub = io.milvus.client.grpc.MilvusServiceGrpc.newBlockingStub(channel);
 //    }
 
-    public void shutdown() throws InterruptedException {
-        channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
-        logInfo("Shut down complete");
-    }
-
     ///////////////////////Client Calls///////////////////////
 
     @Override
@@ -55,12 +50,17 @@ public class MilvusGrpcClient implements MilvusClient {
     }
 
     @Override
-    public Response disconnect() {
+    public Response disconnect() throws InterruptedException {
         if (!connected()) {
             logWarning("You are not connected");
         }
         else {
-            channel.shutdown();
+            if (channel.shutdown().awaitTermination(60, TimeUnit.SECONDS)) {
+                logInfo("Channel terminated");
+            } else {
+                logSevere("Encountered error when terminating channel");
+                return new Response(Response.Status.RPC_ERROR);
+            }
         }
         return new Response(Response.Status.SUCCESS);
     }
@@ -90,7 +90,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 logWarning("Table `{0}` already exists", tableSchema.getTableName());
                 return new Response(Response.Status.valueOf(response.getErrorCodeValue()), response.getReason());
             } else {
-                logSevere("Create table failed\n{0}", tableSchema.toString());
+                logSevere("Create table failed\n{0}\n{1}", tableSchema.toString(), response.toString());
                 return new Response(Response.Status.valueOf(response.getErrorCodeValue()), response.getReason());
             }
         } catch (StatusRuntimeException e) {
@@ -146,7 +146,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 logInfo("Dropped table `{0}` successfully!", tableName);
                 return new Response(Response.Status.SUCCESS);
             } else {
-                logSevere("Drop table `{0}` failed", tableName);
+                logSevere("Drop table `{0}` failed:\n{1}", tableName, response.toString());
                 return new Response(Response.Status.valueOf(response.getErrorCodeValue()), response.getReason());
             }
         } catch (StatusRuntimeException e) {
@@ -179,7 +179,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 logInfo("Created index successfully!\n{0}", indexParam.toString());
                 return new Response(Response.Status.SUCCESS);
             } else {
-                logSevere("Create index failed\n{0}", indexParam.toString());
+                logSevere("Create index failed\n{0}\n{1}", indexParam.toString(), response.toString());
                 return new Response(Response.Status.valueOf(response.getErrorCodeValue()), response.getReason());
             }
         } catch (StatusRuntimeException e) {
@@ -213,11 +213,11 @@ public class MilvusGrpcClient implements MilvusClient {
                        .insert(request);
 
             if (response.getStatus().getErrorCode() == io.milvus.client.grpc.ErrorCode.SUCCESS) {
-                logInfo("Inserted vectors successfully!");
                 Optional<List<Long>> resultVectorIds = Optional.ofNullable(response.getVectorIdArrayList());
+                logInfo("Inserted {0} vectors to table `{1} successfully!", resultVectorIds.map(List::size).orElse(0), insertParam.getTableName());
                 return new InsertResponse(new Response(Response.Status.SUCCESS), resultVectorIds.orElse(new ArrayList<>()));
             } else {
-                logSevere("Insert vectors failed");
+                logSevere("Insert vectors failed:\n{0}", response.toString());
                 return new InsertResponse(new Response(Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
                                                        response.getStatus().getReason()),
                                           new ArrayList<>());
@@ -252,12 +252,11 @@ public class MilvusGrpcClient implements MilvusClient {
                        .search(request);
 
             if (response.getStatus().getErrorCode() == io.milvus.client.grpc.ErrorCode.SUCCESS) {
-                logInfo("Search completed successfully!");
-
                 List<List<SearchResponse.QueryResult>> queryResultsList = getQueryResultsList(response);
+                logInfo("Search completed successfully! Returned results for {0} queries", queryResultsList.size());
                 return new SearchResponse(new Response(Response.Status.SUCCESS), queryResultsList);
             } else {
-                logSevere("Search failed");
+                logSevere("Search failed:\n{0}", response.toString());
                 return new SearchResponse(new Response(Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
                                                        response.getStatus().getReason()),
                                           new ArrayList<>());
@@ -305,7 +304,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 List<List<SearchResponse.QueryResult>> queryResultsList = getQueryResultsList(response);
                 return new SearchResponse(new Response(Response.Status.SUCCESS), queryResultsList);
             } else {
-                logSevere("Search in files {0} failed", searchInFilesParam.getFileIds());
+                logSevere("Search in files {0} failed:\n{1}", searchInFilesParam.getFileIds(), response.toString());
                 return new SearchResponse(new Response(Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
                                                        response.getStatus().getReason()),
                                           new ArrayList<>());
@@ -367,7 +366,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 logInfo("Current tables: {0}", tableNames.toString());
                 return new ShowTablesResponse(new Response(Response.Status.SUCCESS), tableNames);
             } else {
-                logSevere("Show tables failed:\n{1}", response.toString());
+                logSevere("Show tables failed:\n{0}", response.toString());
                 return new ShowTablesResponse(new Response(Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
                                                            response.getStatus().getReason()),
                                               new ArrayList<>());
@@ -397,7 +396,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 logInfo("Table `{0}` has {1} rows", tableName, tableRowCount);
                 return new GetTableRowCountResponse(new Response(Response.Status.SUCCESS), tableRowCount);
             } else {
-                logSevere("Count Table `{0}` failed:\n{1}", tableName, response.toString());
+                logSevere("Get table `{0}` row count failed:\n{1}", tableName, response.toString());
                 return new GetTableRowCountResponse(new Response(Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
                                                                  response.getStatus().getReason()),
                                         0);
@@ -516,7 +515,7 @@ public class MilvusGrpcClient implements MilvusClient {
                 logInfo("Dropped index for table `{0}` successfully!", tableName);
                 return new Response(Response.Status.SUCCESS);
             } else {
-                logSevere("Drop index for table `{0}` failed", tableName);
+                logSevere("Drop index for table `{0}` failed:\n{1}", tableName, response.toString());
                 return new Response(Response.Status.valueOf(response.getErrorCodeValue()), response.getReason());
             }
         } catch (StatusRuntimeException e) {
@@ -616,101 +615,4 @@ public class MilvusGrpcClient implements MilvusClient {
     private void logSevere(String msg, Object... params) {
         logger.log(Level.SEVERE, ANSI_BRIGHT_PURPLE + msg + ANSI_RESET, params);
     }
-
-    //////////////////////////Main///////////////////////////
-    public static void main(String[] args) throws InterruptedException {
-        MilvusClient client = new MilvusGrpcClient();
-        ConnectParam connectParam = new ConnectParam.Builder().withHost("192.168.1.188").withPort("19530").build();
-        client.connect(connectParam);
-
-        try {
-            String tableName = "test_zhiru";
-            TableParam tableParam = new TableParam.Builder(tableName).withTimeout(20).build();
-            long dimension = 128;
-            TableSchema tableSchema = new TableSchema.Builder(tableName, dimension)
-                                                               .withIndexFileSize(1024)
-                                                               .withMetricType(MetricType.L2)
-                                                               .build();
-            TableSchemaParam tableSchemaParam = new TableSchemaParam.Builder(tableSchema).withTimeout(20).build();
-            Response createTableResponse = client.createTable(tableSchemaParam);
-            System.out.println(createTableResponse);
-
-            HasTableResponse hasTableResponse = client.hasTable(tableParam);
-            System.out.println(hasTableResponse);
-
-            Random random = new Random();
-            List<List<Float>> vectors = new ArrayList<>();
-            int size = 100;
-            for (int i = 0; i < size; ++i) {
-                List<Float> vector = new ArrayList<>();
-                for (int j = 0; j < dimension; ++j) {
-                    vector.add(random.nextFloat());
-                }
-                vectors.add(vector);
-            }
-            InsertParam insertParam = new InsertParam.Builder(tableName, vectors).build();
-            InsertResponse insertResponse = client.insert(insertParam);
-            System.out.println(insertResponse);
-
-            Index index = new Index.Builder()
-                                   .withIndexType(IndexType.IVF_SQ8)
-                                   .withNList(16384)
-                                   .build();
-            IndexParam indexParam = new IndexParam.Builder(tableName)
-                                                  .withIndex(index)
-                                                  .build();
-            Response createIndexResponse = client.createIndex(indexParam);
-            System.out.println(createIndexResponse);
-
-            List<List<Float>> vectorsToSearch = new ArrayList<>();
-            vectorsToSearch.add(vectors.get(0));
-            List<DateRange> queryRanges = new ArrayList<>();
-            Date startDate = new Calendar.Builder().setDate(2019, 8, 27).build().getTime();
-            Date endDate = new Calendar.Builder().setDate(2019, 8, 29).build().getTime();
-            queryRanges.add(new DateRange(startDate, endDate));
-            SearchParam searchParam = new SearchParam
-                                         .Builder(tableName, vectorsToSearch)
-                                         .withTopK(100)
-                                         .withNProbe(20)
-                                         .withDateRanges(queryRanges)
-                                         .build();
-            SearchResponse searchResponse = client.search(searchParam);
-            System.out.println(searchResponse);
-
-            List<String> fileIds = new ArrayList<>();
-            fileIds.add("0");
-            SearchInFilesParam searchInFilesParam = new SearchInFilesParam.Builder(fileIds, searchParam).build();
-            searchResponse = client.searchInFiles(searchInFilesParam);
-            System.out.println(searchResponse);
-
-            DescribeTableResponse describeTableResponse = client.describeTable(tableParam);
-            describeTableResponse.getTableSchema().ifPresent(System.out::println);
-
-            GetTableRowCountResponse getTableRowCountResponse = client.getTableRowCount(tableParam);
-            System.out.println(getTableRowCountResponse);
-
-            ShowTablesResponse showTablesResponse = client.showTables();
-            System.out.println(showTablesResponse);
-
-            DeleteByRangeParam deleteByRangeParam = new DeleteByRangeParam.Builder(
-                                                        new DateRange(startDate, endDate), tableName).build();
-            Response deleteByRangeResponse = client.deleteByRange(deleteByRangeParam);
-            System.out.println(deleteByRangeResponse);
-
-            Response preloadTableResponse = client.preloadTable(tableParam);
-            System.out.println(preloadTableResponse);
-
-            DescribeIndexResponse describeIndexResponse = client.describeIndex(tableParam);
-            describeIndexResponse.getIndexParam().ifPresent(System.out::println);
-
-            Response dropIndexResponse = client.dropIndex(tableParam);
-            System.out.println(dropIndexResponse);
-
-            Response dropTableResponse = client.dropTable(tableParam);
-            System.out.println(dropTableResponse);
-
-        } finally {
-            client.disconnect();
-        }
-    }
 }

+ 5 - 0
src/main/java/io/milvus/client/SearchResponse.java

@@ -37,6 +37,11 @@ public class SearchResponse {
 
     //TODO: iterator
 
+
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("SearchResponse {%s, returned results for %d queries}",

+ 4 - 0
src/main/java/io/milvus/client/ShowTablesResponse.java

@@ -15,6 +15,10 @@ public class ShowTablesResponse {
         return tableNames;
     }
 
+    public Response getResponse() {
+        return response;
+    }
+
     @Override
     public String toString() {
         return String.format("ShowTablesResponse {%s, table names = %s}",

+ 246 - 0
src/test/java/io/milvus/client/MilvusGrpcClientTest.java

@@ -0,0 +1,246 @@
+package io.milvus.client;
+
+import io.grpc.inprocess.InProcessChannelBuilder;
+import io.grpc.inprocess.InProcessServerBuilder;
+import io.grpc.testing.GrpcCleanupRule;
+import io.grpc.util.MutableHandlerRegistry;
+import org.junit.Rule;
+import org.apache.commons.text.RandomStringGenerator;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class MilvusGrpcClientTest {
+
+    @Rule
+//    public final GrpcCleanupRule grpcCleanup = new GrpcCleanupRule();
+//
+//    private final MutableHandlerRegistry serviceRegistry = new MutableHandlerRegistry();
+
+    private MilvusGrpcClient client;
+
+    RandomStringGenerator generator;
+
+    private String randomTableName;
+    private long size;
+    private long dimension;
+    private TableParam tableParam;
+    private TableSchemaParam tableSchemaParam;
+
+    @org.junit.jupiter.api.BeforeEach
+    void setUp() throws Exception {
+//TODO: dummy service
+
+//        // Generate a unique in-process server name.
+//        String serverName = InProcessServerBuilder.generateName();
+//        // Use a mutable service registry for later registering the service impl for each test case.
+//        grpcCleanup.register(InProcessServerBuilder.forName(serverName)
+//                .fallbackHandlerRegistry(serviceRegistry).directExecutor().build().start());
+//        client = new MilvusGrpcClient(InProcessChannelBuilder.forName(serverName).directExecutor());
+
+        client = new MilvusGrpcClient();
+        ConnectParam connectParam = new ConnectParam.Builder()
+                                        .withHost("192.168.1.188")
+                                        .withPort("19530")
+                                        .build();
+        client.connect(connectParam);
+
+        generator = new RandomStringGenerator.Builder()
+                                            .withinRange('a', 'z').build();
+        randomTableName = generator.generate(10);
+        size = 100;
+        dimension = 128;
+        tableParam = new TableParam.Builder(randomTableName).build();
+        TableSchema tableSchema = new TableSchema.Builder(randomTableName, dimension)
+                                                    .withIndexFileSize(1024)
+                                                    .withMetricType(MetricType.L2)
+                                                    .build();
+        tableSchemaParam = new TableSchemaParam.Builder(tableSchema).build();
+
+        assertTrue(client.createTable(tableSchemaParam).ok());
+    }
+
+    @org.junit.jupiter.api.AfterEach
+    void tearDown() throws InterruptedException {
+        assertTrue(client.dropTable(tableParam).ok());
+        client.disconnect();
+    }
+
+    @org.junit.jupiter.api.Test
+    void connected() {
+        assertTrue(client.connected());
+    }
+
+    @org.junit.jupiter.api.Test
+    void createTable() {
+        String invalidTableName = "╯°□°)╯";
+        TableSchema invalidTableSchema = new TableSchema.Builder(invalidTableName, dimension).build();
+        TableSchemaParam invalidTableSchemaParam = new TableSchemaParam.Builder(invalidTableSchema).withTimeout(20).build();
+        Response createTableResponse = client.createTable(invalidTableSchemaParam);
+        assertFalse(createTableResponse.ok());
+        assertEquals(Response.Status.ILLEGAL_TABLE_NAME, createTableResponse.getStatus());
+    }
+
+    @org.junit.jupiter.api.Test
+    void hasTable() {
+        HasTableResponse hasTableResponse = client.hasTable(tableParam);
+        assertTrue(hasTableResponse.getResponse().ok());
+    }
+
+    @org.junit.jupiter.api.Test
+    void dropTable() {
+        String nonExistingTableName = generator.generate(10);
+        TableParam tableParam = new TableParam.Builder(nonExistingTableName).build();
+        Response dropTableResponse = client.dropTable(tableParam);
+        assertFalse(dropTableResponse.ok());
+        assertEquals(Response.Status.TABLE_NOT_EXISTS, dropTableResponse.getStatus());
+    }
+
+    @org.junit.jupiter.api.Test
+    void createIndex() {
+        Index index = new Index.Builder()
+                                .withIndexType(IndexType.IVF_SQ8)
+                                .withNList(16384)
+                                .build();
+        IndexParam indexParam = new IndexParam.Builder(randomTableName)
+                                                .withIndex(index)
+                                                .build();
+        Response createIndexResponse = client.createIndex(indexParam);
+        assertTrue(createIndexResponse.ok());
+    }
+
+    @org.junit.jupiter.api.Test
+    void insert() {
+        Random random = new Random();
+        List<List<Float>> vectors = new ArrayList<>();
+        for (int i = 0; i < size; ++i) {
+            List<Float> vector = new ArrayList<>();
+            for (int j = 0; j < dimension; ++j) {
+                vector.add(random.nextFloat());
+            }
+            vectors.add(vector);
+        }
+        InsertParam insertParam = new InsertParam.Builder(randomTableName, vectors).build();
+        InsertResponse insertResponse = client.insert(insertParam);
+        assertTrue(insertResponse.getResponse().ok());
+        assertEquals(size, insertResponse.getVectorIds().size());
+    }
+
+    @org.junit.jupiter.api.Test
+    void search() throws InterruptedException {
+        Random random = new Random();
+        List<List<Float>> vectors = new ArrayList<>();
+        List<List<Float>> vectorsToSearch = new ArrayList<>();
+        int searchSize = 5;
+        for (int i = 0; i < size; ++i) {
+            List<Float> vector = new ArrayList<>();
+            for (int j = 0; j < dimension; ++j) {
+                vector.add(random.nextFloat());
+            }
+            vectors.add(vector);
+            if (i < searchSize) {
+                vectorsToSearch.add(vector);
+            }
+        }
+        InsertParam insertParam = new InsertParam.Builder(randomTableName, vectors).build();
+        InsertResponse insertResponse = client.insert(insertParam);
+        assertTrue(insertResponse.getResponse().ok());
+        assertEquals(size, insertResponse.getVectorIds().size());
+
+        TimeUnit.SECONDS.sleep(1);
+
+        List<DateRange> queryRanges = new ArrayList<>();
+        Calendar rightNow = Calendar.getInstance();
+        Date startDate = new Calendar.Builder()
+                                     .setDate(rightNow.get(Calendar.YEAR), rightNow.get(Calendar.MONTH) , rightNow.get(Calendar.DAY_OF_MONTH) - 1)
+                                     .build()
+                                     .getTime();
+        Date endDate = new Calendar.Builder()
+                                   .setDate(rightNow.get(Calendar.YEAR), rightNow.get(Calendar.MONTH), rightNow.get(Calendar.DAY_OF_MONTH) + 1)
+                                   .build()
+                                   .getTime();
+        queryRanges.add(new DateRange(startDate, endDate));
+        System.out.println(queryRanges);
+        SearchParam searchParam = new SearchParam
+                                        .Builder(randomTableName, vectorsToSearch)
+                                        .withTopK(1)
+                                        .withNProbe(20)
+                                        .withDateRanges(queryRanges)
+                                        .build();
+        SearchResponse searchResponse = client.search(searchParam);
+        assertTrue(searchResponse.getResponse().ok());
+        System.out.println(searchResponse);
+        assertEquals(searchSize, searchResponse.getQueryResultsList().size());
+    }
+
+//    @org.junit.jupiter.api.Test
+//    void searchInFiles() {
+//    }
+
+    @org.junit.jupiter.api.Test
+    void describeTable() {
+        DescribeTableResponse describeTableResponse = client.describeTable(tableParam);
+        assertTrue(describeTableResponse.getResponse().ok());
+        assertTrue(describeTableResponse.getTableSchema().isPresent());
+
+        String nonExistingTableName = generator.generate(10);
+        TableParam tableParam = new TableParam.Builder(nonExistingTableName).build();
+        describeTableResponse = client.describeTable(tableParam);
+        assertFalse(describeTableResponse.getResponse().ok());
+        assertFalse(describeTableResponse.getTableSchema().isPresent());
+    }
+
+    @org.junit.jupiter.api.Test
+    void showTables() {
+        ShowTablesResponse showTablesResponse = client.showTables();
+        assertTrue(showTablesResponse.getResponse().ok());
+    }
+
+    @org.junit.jupiter.api.Test
+    void getTableRowCount() throws InterruptedException {
+        insert();
+        TimeUnit.SECONDS.sleep(1);
+
+        GetTableRowCountResponse getTableRowCountResponse = client.getTableRowCount(tableParam);
+        assertTrue(getTableRowCountResponse.getResponse().ok());
+        assertEquals(size, getTableRowCountResponse.getTableRowCount());
+    }
+
+    @org.junit.jupiter.api.Test
+    void deleteByRange() {
+        Calendar rightNow = Calendar.getInstance();
+        Date startDate = new Calendar.Builder()
+                .setDate(rightNow.get(Calendar.YEAR), rightNow.get(Calendar.MONTH) , rightNow.get(Calendar.DAY_OF_MONTH) - 1)
+                .build()
+                .getTime();
+        Date endDate = new Calendar.Builder()
+                .setDate(rightNow.get(Calendar.YEAR), rightNow.get(Calendar.MONTH), rightNow.get(Calendar.DAY_OF_MONTH) + 1)
+                .build()
+                .getTime();
+        DeleteByRangeParam deleteByRangeParam = new DeleteByRangeParam.Builder(
+                new DateRange(startDate, endDate), randomTableName).build();
+        Response deleteByRangeResponse = client.deleteByRange(deleteByRangeParam);
+        assertTrue(deleteByRangeResponse.ok());
+    }
+
+    @org.junit.jupiter.api.Test
+    void preloadTable() {
+        Response preloadTableResponse = client.preloadTable(tableParam);
+        assertTrue(preloadTableResponse.ok());
+    }
+
+    @org.junit.jupiter.api.Test
+    void describeIndex() {
+        DescribeIndexResponse describeIndexResponse = client.describeIndex(tableParam);
+        assertTrue(describeIndexResponse.getResponse().ok());
+        assertTrue(describeIndexResponse.getIndexParam().isPresent());
+    }
+
+    @org.junit.jupiter.api.Test
+    void dropIndex() {
+        Response dropIndexResponse = client.dropIndex(tableParam);
+        assertTrue(dropIndexResponse.ok());
+    }
+}