From 8366aa5417f4ed8d55567356edb74af2fa7b8c36 Mon Sep 17 00:00:00 2001 From: Jigar Joshi Date: Thu, 14 Apr 2022 16:17:44 -0700 Subject: [PATCH 1/2] feat: CreateDatabaseIfNotExists method for async client --- .../client/StandardTigrisDBAsyncClient.java | 44 ++++++++++++++++--- .../db/client/StandardTigrisDBClient.java | 11 +++-- .../db/client/StandardTigrisDatabase.java | 10 ++--- .../db/client/TigrisDBAsyncClient.java | 10 ++--- .../tigrisdata/db/client/TigrisDBClient.java | 8 +--- .../tigrisdata/db/client/TigrisDatabase.java | 10 ++--- .../com/tigrisdata/db/client/Utilities.java | 36 ++++++++++++--- .../StandardTigrisDBAsyncClientTest.java | 15 +++++-- .../StandardTigrisDBClientFailureTest.java | 4 +- .../db/client/StandardTigrisDBClientTest.java | 5 +-- .../StandardTigrisDatabaseFailureTest.java | 17 ++++--- .../db/client/StandardTigrisDatabaseTest.java | 26 +++++------ .../db/client/grpc/TestUserService.java | 7 +++ 13 files changed, 129 insertions(+), 74 deletions(-) diff --git a/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClient.java b/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClient.java index 70ba679..b4b00af 100644 --- a/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClient.java +++ b/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClient.java @@ -18,6 +18,7 @@ import com.tigrisdata.db.api.v1.grpc.Api; import com.tigrisdata.db.api.v1.grpc.TigrisDBGrpc; import static com.tigrisdata.db.client.ErrorMessages.CREATE_DB_FAILED; +import static com.tigrisdata.db.client.ErrorMessages.DB_ALREADY_EXISTS; import static com.tigrisdata.db.client.ErrorMessages.DROP_DB_FAILED; import static com.tigrisdata.db.client.ErrorMessages.LIST_DBS_FAILED; import static com.tigrisdata.db.client.TypeConverter.toCreateDatabaseRequest; @@ -25,14 +26,19 @@ import static com.tigrisdata.db.client.TypeConverter.toListDatabasesRequest; import com.tigrisdata.db.client.auth.AuthorizationToken; import com.tigrisdata.db.client.config.TigrisDBConfiguration; +import com.tigrisdata.db.client.error.TigrisDBException; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.function.BiConsumer; /** Async client for TigrisDB */ public class StandardTigrisDBAsyncClient extends AbstractTigrisDBClient @@ -119,22 +125,22 @@ public CompletableFuture> listDatabases( } @Override - public CompletableFuture createDatabase( - String databaseName, DatabaseOptions databaseOptions) { + public CompletableFuture createDatabaseIfNotExists(String databaseName) { ListenableFuture createDatabaseResponse = - stub.createDatabase(toCreateDatabaseRequest(databaseName, databaseOptions)); + stub.createDatabase( + toCreateDatabaseRequest(databaseName, DatabaseOptions.DEFAULT_INSTANCE)); return Utilities.transformFuture( createDatabaseResponse, apiResponse -> new TigrisDBResponse(apiResponse.getMsg()), executor, - CREATE_DB_FAILED); + CREATE_DB_FAILED, + Optional.of(CreateDatabaseExceptionHandler.DEFAULT_INSTANCE)); } @Override - public CompletableFuture dropDatabase( - String databaseName, DatabaseOptions databaseOptions) { + public CompletableFuture dropDatabase(String databaseName) { ListenableFuture dropDatabaseResponse = - stub.dropDatabase(toDropDatabaseRequest(databaseName, databaseOptions)); + stub.dropDatabase(toDropDatabaseRequest(databaseName, DatabaseOptions.DEFAULT_INSTANCE)); return Utilities.transformFuture( dropDatabaseResponse, apiResponse -> new TigrisDBResponse(apiResponse.getMsg()), @@ -151,4 +157,28 @@ public void close() { ManagedChannel getChannel() { return channel; } + + /** + * This is the exception handler for CreateDatabase operation, here it will swallow the exception + * if the server says database already exists, it will pass the exception further otherwise. + */ + static class CreateDatabaseExceptionHandler + implements BiConsumer, Throwable> { + static final CreateDatabaseExceptionHandler DEFAULT_INSTANCE = + new CreateDatabaseExceptionHandler(); + + @Override + public void accept(CompletableFuture completableFuture, Throwable throwable) { + if (throwable instanceof StatusRuntimeException) { + if (((StatusRuntimeException) throwable).getStatus().getCode() + == Status.ALREADY_EXISTS.getCode()) { + // swallow the already exists exception + completableFuture.complete(new TigrisDBResponse(DB_ALREADY_EXISTS)); + return; + } + } + // pass on the error otherwise + completableFuture.completeExceptionally(new TigrisDBException(CREATE_DB_FAILED, throwable)); + } + } } diff --git a/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBClient.java b/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBClient.java index 1c2302e..94788bb 100644 --- a/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBClient.java +++ b/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDBClient.java @@ -87,12 +87,12 @@ public List listDatabases(DatabaseOptions listDatabaseOptions) } @Override - public TigrisDBResponse createDatabaseIfNotExists( - String databaseName, DatabaseOptions databaseOptions) throws TigrisDBException { + public TigrisDBResponse createDatabaseIfNotExists(String databaseName) throws TigrisDBException { Api.CreateDatabaseResponse createDatabaseResponse = null; try { createDatabaseResponse = - stub.createDatabase(toCreateDatabaseRequest(databaseName, databaseOptions)); + stub.createDatabase( + toCreateDatabaseRequest(databaseName, DatabaseOptions.DEFAULT_INSTANCE)); return new TigrisDBResponse(createDatabaseResponse.getMsg()); } catch (StatusRuntimeException statusRuntimeException) { // ignore the error if the database is already exists @@ -104,11 +104,10 @@ public TigrisDBResponse createDatabaseIfNotExists( } @Override - public TigrisDBResponse dropDatabase(String databaseName, DatabaseOptions databaseOptions) - throws TigrisDBException { + public TigrisDBResponse dropDatabase(String databaseName) throws TigrisDBException { try { Api.DropDatabaseResponse dropDatabaseResponse = - stub.dropDatabase(toDropDatabaseRequest(databaseName, databaseOptions)); + stub.dropDatabase(toDropDatabaseRequest(databaseName, DatabaseOptions.DEFAULT_INSTANCE)); return new TigrisDBResponse(dropDatabaseResponse.getMsg()); } catch (StatusRuntimeException statusRuntimeException) { throw new TigrisDBException(DROP_DB_FAILED, statusRuntimeException); diff --git a/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDatabase.java b/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDatabase.java index 132562a..e53b961 100644 --- a/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDatabase.java +++ b/client/src/main/java/com/tigrisdata/db/client/StandardTigrisDatabase.java @@ -66,8 +66,7 @@ public List listCollections() throws TigrisDBException { } @Override - public TigrisDBResponse createCollectionsInTransaction(List collectionsSchemas) - throws TigrisDBException { + public TigrisDBResponse applySchemas(List collectionsSchemas) throws TigrisDBException { TransactionSession transactionSession = null; try { transactionSession = beginTransaction(new TransactionOptions()); @@ -76,7 +75,7 @@ public TigrisDBResponse createCollectionsInTransaction(List collectionsSche transactionSession.createOrUpdateCollection(schema, CollectionOptions.DEFAULT_INSTANCE); } transactionSession.commit(); - return new TigrisDBResponse("Collections creates successfully"); + return new TigrisDBResponse("Collections created successfully"); } catch (Exception exception) { if (transactionSession != null) { transactionSession.rollback(); @@ -86,15 +85,14 @@ public TigrisDBResponse createCollectionsInTransaction(List collectionsSche } @Override - public TigrisDBResponse createCollectionsInTransaction(File schemaDirectory) - throws TigrisDBException { + public TigrisDBResponse applySchemas(File schemaDirectory) throws TigrisDBException { List schemaURLs = new ArrayList<>(); try { for (File file : schemaDirectory.listFiles(file -> file.getName().toLowerCase().endsWith(".json"))) { schemaURLs.add(file.toURI().toURL()); } - return createCollectionsInTransaction(schemaURLs); + return applySchemas(schemaURLs); } catch (NullPointerException | MalformedURLException ex) { throw new TigrisDBException("Failed to process schemaDirectory", ex); } diff --git a/client/src/main/java/com/tigrisdata/db/client/TigrisDBAsyncClient.java b/client/src/main/java/com/tigrisdata/db/client/TigrisDBAsyncClient.java index 12ccc53..f688380 100644 --- a/client/src/main/java/com/tigrisdata/db/client/TigrisDBAsyncClient.java +++ b/client/src/main/java/com/tigrisdata/db/client/TigrisDBAsyncClient.java @@ -37,22 +37,18 @@ public interface TigrisDBAsyncClient extends Closeable { CompletableFuture> listDatabases(DatabaseOptions listDatabaseOptions); /** - * Creates the database + * Creates the database if not already present * * @param databaseName name of the database - * @param databaseOptions options * @return a future to the {@link TigrisDBResponse} */ - CompletableFuture createDatabase( - String databaseName, DatabaseOptions databaseOptions); + CompletableFuture createDatabaseIfNotExists(String databaseName); /** * Drops the database * * @param databaseName name of the database - * @param databaseOptions options * @return a future to the {@link TigrisDBResponse} */ - CompletableFuture dropDatabase( - String databaseName, DatabaseOptions databaseOptions); + CompletableFuture dropDatabase(String databaseName); } diff --git a/client/src/main/java/com/tigrisdata/db/client/TigrisDBClient.java b/client/src/main/java/com/tigrisdata/db/client/TigrisDBClient.java index 010ce97..94f9f31 100644 --- a/client/src/main/java/com/tigrisdata/db/client/TigrisDBClient.java +++ b/client/src/main/java/com/tigrisdata/db/client/TigrisDBClient.java @@ -42,21 +42,17 @@ public interface TigrisDBClient extends Closeable { * Creates the database if the database is not already present * * @param databaseName name of the database - * @param databaseOptions options * @return an instance of {@link TigrisDBResponse} from server * @throws TigrisDBException in case of auth error or any other failure. */ - TigrisDBResponse createDatabaseIfNotExists(String databaseName, DatabaseOptions databaseOptions) - throws TigrisDBException; + TigrisDBResponse createDatabaseIfNotExists(String databaseName) throws TigrisDBException; /** * Drops the database * * @param databaseName name of the database - * @param databaseOptions options * @return an instance of {@link TigrisDBResponse} from server * @throws TigrisDBException in case of auth error or any other failure. */ - TigrisDBResponse dropDatabase(String databaseName, DatabaseOptions databaseOptions) - throws TigrisDBException; + TigrisDBResponse dropDatabase(String databaseName) throws TigrisDBException; } diff --git a/client/src/main/java/com/tigrisdata/db/client/TigrisDatabase.java b/client/src/main/java/com/tigrisdata/db/client/TigrisDatabase.java index e4c10b8..77616c5 100644 --- a/client/src/main/java/com/tigrisdata/db/client/TigrisDatabase.java +++ b/client/src/main/java/com/tigrisdata/db/client/TigrisDatabase.java @@ -30,23 +30,23 @@ public interface TigrisDatabase { */ List listCollections() throws TigrisDBException; /** - * Creates the collection in a transaction + * Creates or updates the collection schemas on the current database/ * * @param collectionsSchemas list of URL pointing to schema files * @return response * @throws TigrisDBException in case of an error. */ - TigrisDBResponse createCollectionsInTransaction(List collectionsSchemas) - throws TigrisDBException; + TigrisDBResponse applySchemas(List collectionsSchemas) throws TigrisDBException; /** - * Reads schema files from a directory and creates the collection in a transaction + * Reads schema files from a directory and Creates or updates the collection schemas on the + * current database. * * @param schemaDirectory directory containing schema files * @return response * @throws TigrisDBException in case of an error. */ - TigrisDBResponse createCollectionsInTransaction(File schemaDirectory) throws TigrisDBException; + TigrisDBResponse applySchemas(File schemaDirectory) throws TigrisDBException; /** * Drops the collection. * diff --git a/client/src/main/java/com/tigrisdata/db/client/Utilities.java b/client/src/main/java/com/tigrisdata/db/client/Utilities.java index b74b78d..e11b1ff 100644 --- a/client/src/main/java/com/tigrisdata/db/client/Utilities.java +++ b/client/src/main/java/com/tigrisdata/db/client/Utilities.java @@ -19,16 +19,18 @@ import com.tigrisdata.db.client.error.TigrisDBException; import java.util.Iterator; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.function.BiConsumer; import java.util.function.Function; final class Utilities { private Utilities() {} // TODO update this once server sends the message back - public static final String INSERT_SUCCESS_RESPONSE = "inserted"; - public static final String DELETE_SUCCESS_RESPONSE = "deleted"; + static final String INSERT_SUCCESS_RESPONSE = "inserted"; + static final String DELETE_SUCCESS_RESPONSE = "deleted"; /** * Converts from {@link Iterator} of Type F to {@link Iterator} of type T @@ -39,8 +41,7 @@ private Utilities() {} * @param destination type * @return an instance of {@link Iterator} of type T */ - public static Iterator transformIterator( - Iterator iterator, Function converter) { + static Iterator transformIterator(Iterator iterator, Function converter) { return new ConvertedIterator<>(iterator, converter); } @@ -54,11 +55,30 @@ public static Iterator transformIterator( * @param to type * @return an instance of {@link CompletableFuture} */ - public static CompletableFuture transformFuture( + static CompletableFuture transformFuture( ListenableFuture listenableFuture, Function converter, Executor executor, String errorMessage) { + return transformFuture(listenableFuture, converter, executor, errorMessage, Optional.empty()); + } + /** + * Converts {@link ListenableFuture} of type F to {@link CompletableFuture} of type T + * + * @param listenableFuture source listenable future + * @param converter function that converts type F to type T + * @param executor executor to run callback that transforms Future when source Future is complete + * @param exceptionHandler handles exception + * @param from type + * @param to type + * @return an instance of {@link CompletableFuture} + */ + static CompletableFuture transformFuture( + ListenableFuture listenableFuture, + Function converter, + Executor executor, + String errorMessage, + Optional, Throwable>> exceptionHandler) { CompletableFuture result = new CompletableFuture<>(); Futures.addCallback( listenableFuture, @@ -70,7 +90,11 @@ public void onSuccess(F f) { @Override public void onFailure(Throwable throwable) { - result.completeExceptionally(new TigrisDBException(errorMessage, throwable)); + if (exceptionHandler.isPresent()) { + exceptionHandler.get().accept(result, throwable); + } else { + result.completeExceptionally(new TigrisDBException(errorMessage, throwable)); + } } }, executor); diff --git a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClientTest.java b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClientTest.java index 6d6173c..044a5cf 100644 --- a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClientTest.java +++ b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBAsyncClientTest.java @@ -85,8 +85,7 @@ public void testListDatabases() throws InterruptedException, ExecutionException @Test public void testCreateDatabase() throws InterruptedException, ExecutionException { TigrisDBAsyncClient asyncClient = TestUtils.getTestAsyncClient(SERVER_NAME, grpcCleanup); - CompletableFuture response = - asyncClient.createDatabase("db4", DatabaseOptions.DEFAULT_INSTANCE); + CompletableFuture response = asyncClient.createDatabaseIfNotExists("db4"); Assert.assertEquals("db4 created", response.get().getMessage()); // 4th db created Assert.assertEquals( @@ -94,10 +93,18 @@ public void testCreateDatabase() throws InterruptedException, ExecutionException } @Test - public void testDropDatabase() throws InterruptedException, ExecutionException { + public void testAlreadyExisingDatabaseCreation() throws InterruptedException, ExecutionException { TigrisDBAsyncClient asyncClient = TestUtils.getTestAsyncClient(SERVER_NAME, grpcCleanup); CompletableFuture response = - asyncClient.dropDatabase("db2", DatabaseOptions.DEFAULT_INSTANCE); + asyncClient.createDatabaseIfNotExists("pre-existing-db-name"); + // no exception is thrown, response with message is served + Assert.assertEquals("Database already exists", response.get().getMessage()); + } + + @Test + public void testDropDatabase() throws InterruptedException, ExecutionException { + TigrisDBAsyncClient asyncClient = TestUtils.getTestAsyncClient(SERVER_NAME, grpcCleanup); + CompletableFuture response = asyncClient.dropDatabase("db2"); Assert.assertEquals("db2 dropped", response.get().getMessage()); // 4th db created Assert.assertEquals( diff --git a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientFailureTest.java b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientFailureTest.java index 5a10721..a081509 100644 --- a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientFailureTest.java +++ b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientFailureTest.java @@ -59,7 +59,7 @@ public void testCreateDatabase() { String dbName = UUID.randomUUID().toString(); TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); try { - client.createDatabaseIfNotExists(dbName, DatabaseOptions.DEFAULT_INSTANCE); + client.createDatabaseIfNotExists(dbName); Assert.fail("This must fail"); } catch (TigrisDBException tigrisDBException) { Assert.assertEquals( @@ -73,7 +73,7 @@ public void testDropDatabase() { String dbName = UUID.randomUUID().toString(); TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); try { - client.dropDatabase(dbName, DatabaseOptions.DEFAULT_INSTANCE); + client.dropDatabase(dbName); Assert.fail("This must fail"); } catch (TigrisDBException tigrisDBException) { Assert.assertEquals( diff --git a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientTest.java b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientTest.java index 7ea7376..61590bb 100644 --- a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientTest.java +++ b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDBClientTest.java @@ -83,8 +83,7 @@ public void testListDatabases() throws TigrisDBException { @Test public void testCreateDatabase() throws TigrisDBException { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); - TigrisDBResponse response = - client.createDatabaseIfNotExists("db4", DatabaseOptions.DEFAULT_INSTANCE); + TigrisDBResponse response = client.createDatabaseIfNotExists("db4"); Assert.assertEquals("db4 created", response.getMessage()); // 4th db created Assert.assertEquals(4, client.listDatabases(DatabaseOptions.DEFAULT_INSTANCE).size()); @@ -93,7 +92,7 @@ public void testCreateDatabase() throws TigrisDBException { @Test public void testDropDatabase() throws TigrisDBException { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); - TigrisDBResponse response = client.dropDatabase("db2", DatabaseOptions.DEFAULT_INSTANCE); + TigrisDBResponse response = client.dropDatabase("db2"); Assert.assertEquals("db2 dropped", response.getMessage()); // 4th db created Assert.assertEquals(2, client.listDatabases(DatabaseOptions.DEFAULT_INSTANCE).size()); diff --git a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseFailureTest.java b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseFailureTest.java index 8f74276..1596c37 100644 --- a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseFailureTest.java +++ b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseFailureTest.java @@ -68,8 +68,7 @@ public void testCreateCollectionFromURLs() throws IOException { String dbName = UUID.randomUUID().toString(); TigrisDatabase db1 = client.getDatabase(dbName); try { - db1.createCollectionsInTransaction( - Collections.singletonList(new URL("file:src/test/resources/db1_c5.json"))); + db1.applySchemas(Collections.singletonList(new URL("file:src/test/resources/db1_c5.json"))); Assert.fail("This must fail"); } catch (TigrisDBException tigrisDBException) { Assert.assertEquals( @@ -82,10 +81,9 @@ public void testCreateCollectionFromURLs() throws IOException { } } - /** + /* * pass begin transaction, fail during createOrUpdateCollection, then rollback the transaction * - * @throws IOException */ @Test public void testCreateCollectionFromURLsFailAndRollback() throws IOException { @@ -96,8 +94,7 @@ public void testCreateCollectionFromURLsFailAndRollback() throws IOException { + FailingTestUserService.ALLOW_ROLLBACK_TRANSACTION_DB_NAME; TigrisDatabase db1 = client.getDatabase(dbName); try { - db1.createCollectionsInTransaction( - Collections.singletonList(new URL("file:src/test/resources/db1_c5.json"))); + db1.applySchemas(Collections.singletonList(new URL("file:src/test/resources/db1_c5.json"))); Assert.fail("This must fail"); } catch (TigrisDBException tigrisDBException) { Assert.assertEquals( @@ -135,7 +132,7 @@ public void testBeginTransaction() { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db = client.getDatabase(dbName); try { - db.beginTransaction(new TransactionOptions()); + db.beginTransaction(TransactionOptions.DEFAULT_INSTANCE); Assert.fail("This must fail"); } catch (TigrisDBException tigrisDBException) { Assert.assertEquals( @@ -153,7 +150,8 @@ public void testCommitTransaction() { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db = client.getDatabase(dbName); try { - TransactionSession transactionSession = db.beginTransaction(new TransactionOptions()); + TransactionSession transactionSession = + db.beginTransaction(TransactionOptions.DEFAULT_INSTANCE); Assert.assertNotNull(transactionSession); transactionSession.commit(); Assert.fail("commit() must fail"); @@ -173,7 +171,8 @@ public void testRollbackTransaction() { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db = client.getDatabase(dbName); try { - TransactionSession transactionSession = db.beginTransaction(new TransactionOptions()); + TransactionSession transactionSession = + db.beginTransaction(TransactionOptions.DEFAULT_INSTANCE); Assert.assertNotNull(transactionSession); transactionSession.rollback(); Assert.fail("rollback() must fail"); diff --git a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseTest.java b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseTest.java index 742b0df..31be49f 100644 --- a/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseTest.java +++ b/client/src/test/java/com/tigrisdata/db/client/StandardTigrisDatabaseTest.java @@ -76,9 +76,8 @@ public void testCreateCollectionFromURLs() throws TigrisDBException, IOException TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db1 = client.getDatabase("db1"); TigrisDBResponse response = - db1.createCollectionsInTransaction( - Collections.singletonList(new URL("file:src/test/resources/db1_c5.json"))); - Assert.assertEquals("Collections creates successfully", response.getMessage()); + db1.applySchemas(Collections.singletonList(new URL("file:src/test/resources/db1_c5.json"))); + Assert.assertEquals("Collections created successfully", response.getMessage()); MatcherAssert.assertThat( db1.listCollections(), Matchers.containsInAnyOrder( @@ -94,9 +93,8 @@ public void testCreateCollectionFromURLs() throws TigrisDBException, IOException public void testCreateCollectionFromDir() throws TigrisDBException { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db1 = client.getDatabase("db1"); - TigrisDBResponse response = - db1.createCollectionsInTransaction(new File("src/test/resources/test-dir")); - Assert.assertEquals("Collections creates successfully", response.getMessage()); + TigrisDBResponse response = db1.applySchemas(new File("src/test/resources/test-dir")); + Assert.assertEquals("Collections created successfully", response.getMessage()); MatcherAssert.assertThat( db1.listCollections(), Matchers.containsInAnyOrder( @@ -114,8 +112,7 @@ public void testCreateCollectionFromNonExistingDir() { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db1 = client.getDatabase("db1"); try { - db1.createCollectionsInTransaction( - new File("/" + UUID.randomUUID() + "/" + UUID.randomUUID())); + db1.applySchemas(new File("/" + UUID.randomUUID() + "/" + UUID.randomUUID())); Assert.fail("This must fail"); } catch (TigrisDBException tigrisDBException) { System.out.println(tigrisDBException.getMessage()); @@ -151,7 +148,8 @@ public void testGetCollection() { public void testBeginTransaction() throws TigrisDBException { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db1 = client.getDatabase("db1"); - TransactionSession transactionSession = db1.beginTransaction(new TransactionOptions()); + TransactionSession transactionSession = + db1.beginTransaction(TransactionOptions.DEFAULT_INSTANCE); transactionSession.commit(); } @@ -159,7 +157,8 @@ public void testBeginTransaction() throws TigrisDBException { public void testCommitTransaction() throws TigrisDBException { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db1 = client.getDatabase("db1"); - TransactionSession transactionSession = db1.beginTransaction(new TransactionOptions()); + TransactionSession transactionSession = + db1.beginTransaction(TransactionOptions.DEFAULT_INSTANCE); transactionSession.commit(); } @@ -167,7 +166,8 @@ public void testCommitTransaction() throws TigrisDBException { public void testRollbackTransaction() throws TigrisDBException { TigrisDBClient client = TestUtils.getTestClient(SERVER_NAME, grpcCleanup); TigrisDatabase db1 = client.getDatabase("db1"); - TransactionSession transactionSession = db1.beginTransaction(new TransactionOptions()); + TransactionSession transactionSession = + db1.beginTransaction(TransactionOptions.DEFAULT_INSTANCE); transactionSession.rollback(); } @@ -200,8 +200,8 @@ public void testHashcode() { public void testEquals() { TigrisDatabase db1 = new StandardTigrisDatabase("db1", null, null, null); TigrisDatabase db2 = new StandardTigrisDatabase("db1", null, null, null); - Assert.assertTrue(db1.equals(db2)); - Assert.assertTrue(db1.equals(db1)); + Assert.assertEquals(db1, db2); + Assert.assertEquals(db1, db1); Assert.assertFalse(db1.equals(null)); Assert.assertFalse(db1.equals("string-obj")); diff --git a/client/src/test/java/com/tigrisdata/db/client/grpc/TestUserService.java b/client/src/test/java/com/tigrisdata/db/client/grpc/TestUserService.java index 5ad674e..c4e1640 100644 --- a/client/src/test/java/com/tigrisdata/db/client/grpc/TestUserService.java +++ b/client/src/test/java/com/tigrisdata/db/client/grpc/TestUserService.java @@ -18,6 +18,8 @@ import com.google.protobuf.ByteString; import com.tigrisdata.db.api.v1.grpc.Api; import com.tigrisdata.db.api.v1.grpc.TigrisDBGrpc; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; import io.grpc.stub.StreamObserver; import java.util.ArrayList; @@ -299,6 +301,11 @@ public void listCollections( public void createDatabase( Api.CreateDatabaseRequest request, StreamObserver responseObserver) { + // to test already exists + if (request.getDb().equals("pre-existing-db-name")) { + responseObserver.onError(new StatusRuntimeException(Status.ALREADY_EXISTS)); + return; + } this.dbs.add(request.getDb()); responseObserver.onNext( Api.CreateDatabaseResponse.newBuilder().setMsg(request.getDb() + " created").build()); From 86154f0bce1fb9b0d7950463ef71ac04bd0146f2 Mon Sep 17 00:00:00 2001 From: Jigar Joshi Date: Thu, 14 Apr 2022 23:57:34 +0000 Subject: [PATCH 2/2] Autogenerated JaCoCo coverage badge --- .github/badges/branches.svg | 2 +- .github/badges/coverage-summary.json | 2 +- .github/badges/jacoco.svg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/badges/branches.svg b/.github/badges/branches.svg index 48caf6a..b465eec 100644 --- a/.github/badges/branches.svg +++ b/.github/badges/branches.svg @@ -1 +1 @@ -branches90% \ No newline at end of file +branches89.4% \ No newline at end of file diff --git a/.github/badges/coverage-summary.json b/.github/badges/coverage-summary.json index 20b6685..e87a0ff 100644 --- a/.github/badges/coverage-summary.json +++ b/.github/badges/coverage-summary.json @@ -1 +1 @@ -{"branches": 90.08620689655173, "coverage": 92.81062776764783} \ No newline at end of file +{"branches": 89.49579831932773, "coverage": 92.6923076923077} \ No newline at end of file diff --git a/.github/badges/jacoco.svg b/.github/badges/jacoco.svg index 7fc4eb7..92dfa69 100644 --- a/.github/badges/jacoco.svg +++ b/.github/badges/jacoco.svg @@ -1 +1 @@ -coverage92.8% \ No newline at end of file +coverage92.6% \ No newline at end of file