diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java index fa44ad6f5d9..744d7042df4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITAsyncTransactionRetryTest.java @@ -17,10 +17,8 @@ package com.google.cloud.spanner.connection.it; import static com.google.cloud.spanner.SpannerApiFutures.get; -import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; -import static org.junit.Assume.assumeFalse; import com.google.api.core.ApiFuture; import com.google.api.core.SettableApiFuture; @@ -580,7 +578,6 @@ public void testAbortWithResultSetFullyConsumed() { @Test public void testAbortWithConcurrentInsert() { - assumeFalse("concurrent transactions are not supported on the emulator", isUsingEmulator()); AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { @@ -632,7 +629,6 @@ public void testAbortWithConcurrentInsert() { @Test public void testAbortWithConcurrentDelete() { - assumeFalse("concurrent transactions are not supported on the emulator", isUsingEmulator()); AbortInterceptor interceptor = new AbortInterceptor(0); // first insert two test records try (ITConnection connection = createConnection()) { @@ -686,7 +682,6 @@ public void testAbortWithConcurrentDelete() { @Test public void testAbortWithConcurrentUpdate() { - assumeFalse("concurrent transactions are not supported on the emulator", isUsingEmulator()); AbortInterceptor interceptor = new AbortInterceptor(0); // first insert two test records try (ITConnection connection = createConnection()) { @@ -746,7 +741,6 @@ public void testAbortWithConcurrentUpdate() { */ @Test public void testAbortWithUnseenConcurrentInsert() throws InterruptedException { - assumeFalse("concurrent transactions are not supported on the emulator", isUsingEmulator()); AbortInterceptor interceptor = new AbortInterceptor(0); try (ITConnection connection = createConnection(interceptor, new CountTransactionRetryListener())) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java index 6598a3dca76..f028fbc2b15 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java @@ -19,11 +19,9 @@ import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.extractConnectionUrl; import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.getKeyFile; import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.hasValidKeyFile; -import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.ByteArray; import com.google.cloud.Timestamp; @@ -96,10 +94,7 @@ public class ITBatchReadTest { public static List data() { List params = new ArrayList<>(); params.add(new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL)); - // PG dialect tests are not supported by the emulator - if (!isUsingEmulator()) { - params.add(new DialectTestParameter(Dialect.POSTGRESQL)); - } + params.add(new DialectTestParameter(Dialect.POSTGRESQL)); return params; } @@ -135,30 +130,28 @@ public static void setUpDatabase() throws Exception { List databaseClients = new ArrayList<>(); databaseClients.add(env.getTestHelper().getDatabaseClient(googleStandardDatabase)); - if (!isUsingEmulator()) { - postgreSQLDatabase = - env.getTestHelper().createTestDatabase(Dialect.POSTGRESQL, Collections.emptyList()); - env.getTestHelper() - .getClient() - .getDatabaseAdminClient() - .updateDatabaseDdl( - env.getTestHelper().getInstanceId().getInstance(), - postgreSQLDatabase.getId().getDatabase(), - ImmutableList.of( - "CREATE TABLE " - + TABLE_NAME - + " (" - + " Key bigint not null primary key," - + " Data bytea," - + " Fingerprint bigint," - + " Size bigint" - + ")", - "CREATE INDEX " + INDEX_NAME + " ON " + TABLE_NAME + "(Fingerprint)"), - null) - .get(); - postgreSQLBatchClient = env.getTestHelper().getBatchClient(postgreSQLDatabase); - databaseClients.add(env.getTestHelper().getDatabaseClient(postgreSQLDatabase)); - } + postgreSQLDatabase = + env.getTestHelper().createTestDatabase(Dialect.POSTGRESQL, Collections.emptyList()); + env.getTestHelper() + .getClient() + .getDatabaseAdminClient() + .updateDatabaseDdl( + env.getTestHelper().getInstanceId().getInstance(), + postgreSQLDatabase.getId().getDatabase(), + ImmutableList.of( + "CREATE TABLE " + + TABLE_NAME + + " (" + + " Key bigint not null primary key," + + " Data bytea," + + " Fingerprint bigint," + + " Size bigint" + + ")", + "CREATE INDEX " + INDEX_NAME + " ON " + TABLE_NAME + "(Fingerprint)"), + null) + .get(); + postgreSQLBatchClient = env.getTestHelper().getBatchClient(postgreSQLDatabase); + databaseClients.add(env.getTestHelper().getDatabaseClient(postgreSQLDatabase)); List rows = manyRows(); numRows = rows.size(); @@ -210,9 +203,6 @@ private Database getDatabase() { @Test public void read() { - assumeFalse( - "PostgreSQL does not support the PartitionRead RPC", dialect.dialect == Dialect.POSTGRESQL); - BitSet seenRows = new BitSet(numRows); TimestampBound bound = getRandomBound(); PartitionOptions partitionParams = getRandomPartitionOptions(); @@ -229,9 +219,6 @@ public void read() { @Test public void readUsingIndex() { - assumeFalse( - "PostgreSQL does not support the PartitionRead RPC", dialect.dialect == Dialect.POSTGRESQL); - TimestampBound bound = getRandomBound(); PartitionOptions partitionParams = getRandomPartitionOptions(); batchTxn = getBatchClient().batchReadOnlyTransaction(bound); @@ -258,8 +245,6 @@ public void readUsingIndex() { @Test public void dataBoostRead() { - assumeFalse("Emulator does not support data boost read", isUsingEmulator()); - BitSet seenRows = new BitSet(numRows); TimestampBound bound = getRandomBound(); PartitionOptions partitionParams = getRandomPartitionOptions(); @@ -312,7 +297,6 @@ private PartitionOptions getRandomPartitionOptions() { @Test public void dataBoostQuery() { - assumeFalse("Emulator does not support data boost query", isUsingEmulator()); BitSet seenRows = new BitSet(numRows); TimestampBound bound = getRandomBound(); PartitionOptions partitionParams = getRandomPartitionOptions(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java index 5ea30912103..ab3c8e24a8c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDMLTest.java @@ -16,14 +16,12 @@ package com.google.cloud.spanner.it; -import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.AbortedException; import com.google.cloud.spanner.Database; @@ -90,15 +88,13 @@ public static void setUpDatabase() { + " V INT64," + ") PRIMARY KEY (K)"); googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); - if (!isUsingEmulator()) { - Database postgreSQLDatabase = - env.getTestHelper() - .createTestDatabase( - Dialect.POSTGRESQL, - Arrays.asList( - "CREATE TABLE T (" + " K VARCHAR PRIMARY KEY," + " V BIGINT" + ")")); - postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); - } + Database postgreSQLDatabase = + env.getTestHelper() + .createTestDatabase( + Dialect.POSTGRESQL, + Arrays.asList( + "CREATE TABLE T (" + " K VARCHAR PRIMARY KEY," + " V BIGINT" + ")")); + postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); } @AfterClass @@ -122,10 +118,7 @@ public void increaseTestIdAndDeleteTestData() { public static List data() { List params = new ArrayList<>(); params.add(new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL)); - // "PG dialect tests are not supported by the emulator" - if (!isUsingEmulator()) { - params.add(new DialectTestParameter(Dialect.POSTGRESQL)); - } + params.add(new DialectTestParameter(Dialect.POSTGRESQL)); return params; } @@ -389,10 +382,6 @@ public void standardDMLWithExecuteSQL() { @Test public void testUntypedNullValues() { - assumeFalse( - "Spanner PostgreSQL does not yet support untyped null values", - dialect.dialect == Dialect.POSTGRESQL); - DatabaseClient client = getClient(dialect.dialect); String sql; if (dialect.dialect == Dialect.POSTGRESQL) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java index f9230b8836b..b9813d512fd 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseTest.java @@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.junit.Assume.assumeFalse; import com.google.api.client.util.ExponentialBackOff; import com.google.api.gax.longrunning.OperationFuture; @@ -182,8 +181,6 @@ public void instanceNotFound() { @Test public void testNumericPrimaryKey() { - assumeFalse("Emulator does not support numeric primary keys", isUsingEmulator()); - final String table = "NumericTable"; // Creates table with numeric primary key diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java index 8cb465e4c84..f54365ba84d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDmlReturningTest.java @@ -42,7 +42,6 @@ import com.google.cloud.spanner.TransactionRunner; import com.google.cloud.spanner.TransactionRunner.TransactionCallable; import com.google.cloud.spanner.connection.ConnectionOptions; -import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -75,8 +74,6 @@ public final class ITDmlReturningTest { @BeforeClass public static void setUpDatabase() { - assumeFalse( - "DML Returning is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); Database googleStandardSQLDatabase = env.getTestHelper() .createTestDatabase( @@ -85,18 +82,16 @@ public static void setUpDatabase() { + " V INT64," + ") PRIMARY KEY (K)"); googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); - if (!isUsingEmulator()) { - Database postgreSQLDatabase = - env.getTestHelper() - .createTestDatabase( - Dialect.POSTGRESQL, - Collections.singletonList( - "CREATE TABLE T (" - + " \"K\" VARCHAR PRIMARY KEY," - + " \"V\" BIGINT" - + ")")); - postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); - } + Database postgreSQLDatabase = + env.getTestHelper() + .createTestDatabase( + Dialect.POSTGRESQL, + Collections.singletonList( + "CREATE TABLE T (" + + " \"K\" VARCHAR PRIMARY KEY," + + " \"V\" BIGINT" + + ")")); + postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); } @AfterClass @@ -222,6 +217,9 @@ private void executeUpdateAsync(long expectedCount, final String... stmts) { @Test public void dmlReturningWithExecutePartitionedUpdate() { + assumeFalse( + "The emulator does not dis-allow THEN RETURN statements for PDML", isUsingEmulator()); + SpannerException e = assertThrows( SpannerException.class, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java index 393c2db8755..1536912f686 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java @@ -16,13 +16,11 @@ package com.google.cloud.spanner.it; -import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.Timestamp; import com.google.cloud.spanner.Database; @@ -93,8 +91,6 @@ public static List data() { @BeforeClass public static void setUpDatabase() throws ExecutionException, InterruptedException, TimeoutException { - assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator()); - Database googleStandardSQLDatabase = env.getTestHelper().createTestDatabase(GOOGLE_STANDARD_SQL_SCHEMA); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java index fc7c860267a..448aab85114 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITForeignKeyDeleteCascadeTest.java @@ -15,11 +15,11 @@ */ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseAdminClient; @@ -33,7 +33,6 @@ import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.Statement; -import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Arrays; @@ -68,46 +67,44 @@ public static List data() { private static Database GOOGLE_STANDARD_SQL_DATABASE; private static Database POSTGRESQL_DATABASE; - private static List dbs = new ArrayList<>(); + private static final List dbs = new ArrayList<>(); @Parameterized.Parameter(0) public DialectTestParameter dialect; @BeforeClass public static void setUpDatabase() { - if (!EmulatorSpannerHelper.isUsingEmulator()) { - GOOGLE_STANDARD_SQL_DATABASE = - env.getTestHelper() - .createTestDatabase( - ImmutableList.of( - "CREATE TABLE Singer (\n" - + " singer_id INT64 NOT NULL,\n" - + " first_name STRING(1024),\n" - + ") PRIMARY KEY(singer_id)\n", - "CREATE TABLE Concert (\n" - + " venue_id INT64 NOT NULL,\n" - + " singer_id INT64 NOT NULL,\n" - + " CONSTRAINT Fk_Concert_Singer FOREIGN KEY (singer_id) REFERENCES Singer (singer_id) ON DELETE CASCADE" - + ") PRIMARY KEY(venue_id, singer_id)")); - POSTGRESQL_DATABASE = - env.getTestHelper() - .createTestDatabase( - Dialect.POSTGRESQL, - ImmutableList.of( - "CREATE TABLE Singer (\n" - + " singer_id BIGINT PRIMARY KEY,\n" - + " first_name VARCHAR\n" - + ")", - "CREATE TABLE Concert (\n" - + " venue_id BIGINT NOT NULL,\n" - + " singer_id BIGINT NOT NULL,\n" - + " PRIMARY KEY (venue_id, singer_id),\n" - + " CONSTRAINT Fk_Concert_Singer FOREIGN KEY (singer_id) REFERENCES Singer (singer_id) ON DELETE CASCADE\n" - + " )")); - - dbs.add(GOOGLE_STANDARD_SQL_DATABASE); - dbs.add(POSTGRESQL_DATABASE); - } + GOOGLE_STANDARD_SQL_DATABASE = + env.getTestHelper() + .createTestDatabase( + ImmutableList.of( + "CREATE TABLE Singer (\n" + + " singer_id INT64 NOT NULL,\n" + + " first_name STRING(1024),\n" + + ") PRIMARY KEY(singer_id)\n", + "CREATE TABLE Concert (\n" + + " venue_id INT64 NOT NULL,\n" + + " singer_id INT64 NOT NULL,\n" + + " CONSTRAINT Fk_Concert_Singer FOREIGN KEY (singer_id) REFERENCES Singer (singer_id) ON DELETE CASCADE\n" + + ") PRIMARY KEY(venue_id, singer_id)")); + POSTGRESQL_DATABASE = + env.getTestHelper() + .createTestDatabase( + Dialect.POSTGRESQL, + ImmutableList.of( + "CREATE TABLE Singer (\n" + + " singer_id BIGINT PRIMARY KEY,\n" + + " first_name VARCHAR\n" + + ")", + "CREATE TABLE Concert (\n" + + " venue_id BIGINT NOT NULL,\n" + + " singer_id BIGINT NOT NULL,\n" + + " PRIMARY KEY (venue_id, singer_id),\n" + + " CONSTRAINT \"Fk_Concert_Singer\" FOREIGN KEY (singer_id) REFERENCES Singer (singer_id) ON DELETE CASCADE\n" + + " )")); + + dbs.add(GOOGLE_STANDARD_SQL_DATABASE); + dbs.add(POSTGRESQL_DATABASE); } @AfterClass @@ -120,10 +117,6 @@ public static void tearDown() { @Test public void testForeignKeyDeleteCascadeConstraints_withCreateDDLStatements() { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); try (final ResultSet rs = databaseClient @@ -133,17 +126,17 @@ public void testForeignKeyDeleteCascadeConstraints_withCreateDDLStatements() { "SELECT DELETE_RULE\n" + "FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS\n" + "WHERE CONSTRAINT_NAME ='Fk_Concert_Singer'"))) { - while (rs.next()) { - assertEquals(rs.getString(DELETE_RULE_COLUMN_NAME), "CASCADE"); + assertTrue(rs.next()); + // TODO: Enable for the emulator when it returns the correct value for DELETE_RULE. + if (!isUsingEmulator()) { + assertEquals("CASCADE", rs.getString(0)); } + assertFalse(rs.next()); } } @Test public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() throws Exception { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); // Creating new tables within this test to ensure we don't pollute tables used by other tests in // this class. List createStatements; @@ -160,7 +153,7 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro + " PRIMARY KEY (venue_id, singer_id)\n" + " )", "ALTER TABLE ConcertV2 " - + "ADD CONSTRAINT Fk_Concert_Singer_V2 FOREIGN KEY(singer_id) REFERENCES Singer(singer_id) " + + "ADD CONSTRAINT \"Fk_Concert_Singer_V2\" FOREIGN KEY(singer_id) REFERENCES Singer(singer_id) " + "ON DELETE CASCADE"); } else { createStatements = @@ -181,7 +174,7 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro env.getTestHelper().createTestDatabase(dialect.dialect, createStatements); dbs.add(createdDatabase); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); + final DatabaseClient databaseClient = env.getTestHelper().getDatabaseClient(createdDatabase); try (final ResultSet rs = databaseClient @@ -190,10 +183,13 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro Statement.of( "SELECT DELETE_RULE\n" + "FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS\n" - + "WHERE CONSTRAINT_NAME ='Fk_Concert_Singer'"))) { - while (rs.next()) { - assertEquals(rs.getString(DELETE_RULE_COLUMN_NAME), "CASCADE"); + + "WHERE CONSTRAINT_NAME ='Fk_Concert_Singer_V2'"))) { + assertTrue(rs.next()); + // TODO: Enable when the emulator returns the correct value for this column. + if (!isUsingEmulator()) { + assertEquals("CASCADE", rs.getString(0)); } + assertFalse(rs.next()); } // remove the foreign key delete cascade constraint @@ -215,19 +211,15 @@ public void testForeignKeyDeleteCascadeConstraints_withAlterDDLStatements() thro Statement.of( "SELECT DELETE_RULE\n" + "FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS\n" - + "WHERE CONSTRAINT_NAME ='Fk_Concert_Singer_V2'"))) { - while (rs.next()) { - assertEquals(rs.getString(DELETE_RULE_COLUMN_NAME), "NO ACTION"); - } + + "WHERE LOWER(CONSTRAINT_NAME) ='fk_concert_singer_v2'"))) { + assertTrue(rs.next()); + assertEquals("NO ACTION", rs.getString(0)); + assertFalse(rs.next()); } } @Test public void testForeignKeyDeleteCascadeConstraints_verifyValidInsertions() { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); final String singerInsertStatement = "INSERT INTO Singer (singer_id, first_name) VALUES (" + generateQueryParameters(2) + ")"; @@ -289,10 +281,6 @@ public void testForeignKeyDeleteCascadeConstraints_verifyValidInsertions() { @Test public void testForeignKeyDeleteCascadeConstraints_verifyInvalidInsertions() { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); // unsuccessful inserts into referencing tables when foreign key is not inserted into referenced @@ -319,16 +307,12 @@ public void testForeignKeyDeleteCascadeConstraints_verifyInvalidInsertions() { transaction.executeUpdate(concertInsertStatementWithInvalidValues); return null; })); - assertEquals(ex.getErrorCode(), ErrorCode.FAILED_PRECONDITION); - assertTrue(ex.getMessage().contains("Cannot find referenced values")); + assertEquals(ErrorCode.FAILED_PRECONDITION, ex.getErrorCode()); + assertTrue(ex.getMessage(), ex.getMessage().contains("Cannot find referenced")); } @Test public void testForeignKeyDeleteCascadeConstraints_forDeletions() { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); final String singerInsertStatement = @@ -396,10 +380,6 @@ public void testForeignKeyDeleteCascadeConstraints_forDeletions() { @Test public void testForeignKeyDeleteCascadeConstraints_forMutations_onConflictDueToParentTable() { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); // inserting and deleting the referenced key within the same mutation are considered @@ -423,15 +403,11 @@ public void testForeignKeyDeleteCascadeConstraints_forMutations_onConflictDueToP Mutation.delete("Singer", Key.of(4L)))); return null; })); - assertEquals(ex.getErrorCode(), ErrorCode.FAILED_PRECONDITION); + assertEquals(ErrorCode.FAILED_PRECONDITION, ex.getErrorCode()); } @Test public void testForeignKeyDeleteCascadeConstraints_forMutations_onConflictsDueToChildTable() { - assumeFalse( - "Emulator does not yet support foreign key delete cascade", - EmulatorSpannerHelper.isUsingEmulator()); - final DatabaseClient databaseClient = getCreatedDatabaseClient(); // referencing a foreign key in child table and deleting the referenced key in parent table @@ -454,25 +430,24 @@ public void testForeignKeyDeleteCascadeConstraints_forMutations_onConflictsDueTo transaction.executeUpdate(singerInsertStatementWithValues); return null; }); - SpannerException ex = - assertThrows( - SpannerException.class, - () -> - databaseClient - .readWriteTransaction() - .run( - transaction -> { - transaction.buffer( - Arrays.asList( - Mutation.newInsertBuilder("Concert") - .set("first_name") - .to(5L) - .set("singer_id") - .to(5L) - .build(), - Mutation.delete("Singer", Key.of(5L)))); - return null; - })); + assertThrows( + SpannerException.class, + () -> + databaseClient + .readWriteTransaction() + .run( + transaction -> { + transaction.buffer( + Arrays.asList( + Mutation.newInsertBuilder("Concert") + .set("first_name") + .to(5L) + .set("singer_id") + .to(5L) + .build(), + Mutation.delete("Singer", Key.of(5L)))); + return null; + })); } private DatabaseAdminClient getDatabaseAdminClient() { @@ -481,16 +456,13 @@ private DatabaseAdminClient getDatabaseAdminClient() { private DatabaseClient getCreatedDatabaseClient() { if (dialect.dialect == Dialect.POSTGRESQL) { - return env.getTestHelper().getDatabaseClient(this.POSTGRESQL_DATABASE); + return env.getTestHelper().getDatabaseClient(POSTGRESQL_DATABASE); } - return env.getTestHelper().getDatabaseClient(this.GOOGLE_STANDARD_SQL_DATABASE); + return env.getTestHelper().getDatabaseClient(GOOGLE_STANDARD_SQL_DATABASE); } /** * Returns '@p1, @p2, ..., @pNumParams' for GoogleSQL and $1, $2, ..., $NumParams' for PostgreSQL - * - * @param numParams - * @return */ private String generateQueryParameters(final int numParams) { final List params; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java index c6f72349f0b..e355eaa07a3 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITJsonWriteReadTest.java @@ -18,7 +18,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; -import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseClient; @@ -30,7 +29,6 @@ import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.Value; -import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.cloud.spanner.testing.RemoteSpannerHelper; import com.google.common.io.Resources; import java.io.File; @@ -68,23 +66,19 @@ public class ITJsonWriteReadTest { @BeforeClass public static void beforeClass() { final RemoteSpannerHelper testHelper = env.getTestHelper(); - if (!EmulatorSpannerHelper.isUsingEmulator()) { - final Database database = - testHelper.createTestDatabase( - "CREATE TABLE " - + TABLE_NAME - + "(" - + "Id INT64 NOT NULL," - + "json JSON" - + ") PRIMARY KEY (Id)"); - databaseClient = testHelper.getDatabaseClient(database); - } + final Database database = + testHelper.createTestDatabase( + "CREATE TABLE " + + TABLE_NAME + + "(" + + "Id INT64 NOT NULL," + + "json JSON" + + ") PRIMARY KEY (Id)"); + databaseClient = testHelper.getDatabaseClient(database); } @Test public void testWriteValidJsonValues() throws IOException { - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); - List resources = getJsonFilePaths(RESOURCES_DIR + File.separator + VALID_JSON_DIR); long id = 0L; @@ -116,8 +110,6 @@ public void testWriteValidJsonValues() throws IOException { @Test public void testWriteAndReadInvalidJsonValues() throws IOException { - assumeFalse("Emulator does not yet support JSON", EmulatorSpannerHelper.isUsingEmulator()); - List resources = getJsonFilePaths(RESOURCES_DIR + File.separator + INVALID_JSON_DIR); AtomicLong id = new AtomicLong(100); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITLargeReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITLargeReadTest.java index b60505c873a..83d505e2124 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITLargeReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITLargeReadTest.java @@ -16,7 +16,6 @@ package com.google.cloud.spanner.it; -import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static com.google.common.truth.Truth.assertThat; import com.google.cloud.ByteArray; @@ -31,6 +30,7 @@ import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.connection.ConnectionOptions; +import com.google.common.collect.ImmutableList; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; import java.util.ArrayList; @@ -88,20 +88,18 @@ public static void setUpDatabase() { + " Size INT64," + ") PRIMARY KEY (Key)"); googleStandardSQLClient = env.getTestHelper().getDatabaseClient(googleStandardSQLDatabase); - if (!isUsingEmulator()) { - Database postgreSQLDatabase = - env.getTestHelper() - .createTestDatabase( - Dialect.POSTGRESQL, - Arrays.asList( - "CREATE TABLE TestTable (" - + " Key BIGINT PRIMARY KEY," - + " Data BYTEA," - + " Fingerprint BIGINT," - + " Size BIGINT" - + ")")); - postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); - } + Database postgreSQLDatabase = + env.getTestHelper() + .createTestDatabase( + Dialect.POSTGRESQL, + ImmutableList.of( + "CREATE TABLE TestTable (" + + " Key BIGINT PRIMARY KEY," + + " Data BYTEA," + + " Fingerprint BIGINT," + + " Size BIGINT" + + ")")); + postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase); hasher = Hashing.goodFastHash(64); List mutations = new ArrayList<>(); @@ -127,17 +125,13 @@ public static void setUpDatabase() { i++; if (totalSize >= WRITE_BATCH_SIZE) { googleStandardSQLClient.write(mutations); - if (!isUsingEmulator()) { - postgreSQLClient.write(mutations); - } + postgreSQLClient.write(mutations); mutations.clear(); totalSize = 0; } } googleStandardSQLClient.write(mutations); - if (!isUsingEmulator()) { - postgreSQLClient.write(mutations); - } + postgreSQLClient.write(mutations); } @AfterClass @@ -149,10 +143,7 @@ public static void teardown() { public static List data() { List params = new ArrayList<>(); params.add(new DialectTestParameter(Dialect.GOOGLE_STANDARD_SQL)); - // "PG dialect tests are not supported by the emulator" - if (!isUsingEmulator()) { - params.add(new DialectTestParameter(Dialect.POSTGRESQL)); - } + params.add(new DialectTestParameter(Dialect.POSTGRESQL)); return params; } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgJsonbTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgJsonbTest.java index 634f7919658..275fbe6545f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgJsonbTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgJsonbTest.java @@ -16,11 +16,11 @@ package com.google.cloud.spanner.it; +import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseAdminClient; @@ -36,7 +36,6 @@ import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.Value; -import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.cloud.spanner.testing.RemoteSpannerHelper; import com.google.common.collect.ImmutableList; import com.google.protobuf.ListValue; @@ -53,7 +52,6 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; @@ -77,8 +75,6 @@ public class ITPgJsonbTest { @BeforeClass public static void beforeClass() throws Exception { - assumeFalse( - "PgJsonb is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); testHelper = env.getTestHelper(); databaseAdminClient = testHelper.getClient().getDatabaseAdminClient(); databasesToDrop = new ArrayList<>(); @@ -97,7 +93,7 @@ public static void beforeClass() throws Exception { } @AfterClass - public static void afterClass() throws Exception { + public static void afterClass() { if (databasesToDrop != null) { for (DatabaseId id : databasesToDrop) { try { @@ -170,11 +166,19 @@ public void testPgJsonbInSecondaryIndex() { SpannerException spannerException = SpannerExceptionFactory.asSpannerException(executionException.getCause()); assertEquals(ErrorCode.FAILED_PRECONDITION, spannerException.getErrorCode()); - assertTrue( - spannerException.getMessage(), - spannerException - .getMessage() - .contains("Index idx_jsonb is defined on a column of unsupported type PG.JSONB.")); + if (isUsingEmulator()) { + assertTrue( + spannerException.getMessage(), + spannerException + .getMessage() + .contains("Cannot reference PG.JSONB col1 in the creation of index idx_jsonb.")); + } else { + assertTrue( + spannerException.getMessage(), + spannerException + .getMessage() + .contains("Index idx_jsonb is defined on a column of unsupported type PG.JSONB.")); + } } private static final String JSON_VALUE_1 = "{\"color\":\"red\",\"value\":\"#f00\"}"; @@ -189,8 +193,6 @@ public void testPgJsonbInSecondaryIndex() { @Test public void testLiteralPgJsonb() { - assumeFalse( - "PgJsonb is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -223,8 +225,6 @@ public void testLiteralPgJsonb() { @Test public void testPgJsonbParameter() { - assumeFalse( - "PgJsonb is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -275,12 +275,8 @@ private ListValue getJsonListValue(List jsonList) { .build(); } - @Ignore("Untyped jsonb parameters are not yet supported") @Test public void testPgJsonbUntypedParameter() { - assumeFalse( - "PgJsonb is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); - // Verify that we can use Jsonb as an untyped parameter. This is especially important for // PGAdapter and the JDBC driver, as these will often use untyped parameters. databaseClient @@ -362,8 +358,6 @@ public void testPgJsonbUntypedParameter() { @Test public void testMutationsWithPgJsonbAsString() { - assumeFalse( - "PgJsonb is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -418,8 +412,6 @@ public void testMutationsWithPgJsonbAsString() { @Test public void testMutationsWithPgJsonbAsValue() { - assumeFalse( - "PgJsonb is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgNumericTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgNumericTest.java index bacb4718da0..76025b07175 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgNumericTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPgNumericTest.java @@ -18,7 +18,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseAdminClient; @@ -31,7 +30,6 @@ import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.Value; -import com.google.cloud.spanner.testing.EmulatorSpannerHelper; import com.google.cloud.spanner.testing.RemoteSpannerHelper; import com.google.common.collect.ImmutableList; import java.math.BigDecimal; @@ -67,8 +65,6 @@ public class ITPgNumericTest { @BeforeClass public static void beforeClass() throws Exception { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); testHelper = env.getTestHelper(); databaseAdminClient = testHelper.getClient().getDatabaseAdminClient(); databasesToDrop = new ArrayList<>(); @@ -116,8 +112,6 @@ public void setUp() throws Exception { @Test public void testLiteralPgNumeric() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -134,7 +128,9 @@ public void testLiteralPgNumeric() { }); try (ResultSet resultSet = - databaseClient.singleUse().executeQuery(Statement.of("SELECT * FROM " + tableName))) { + databaseClient + .singleUse() + .executeQuery(Statement.of("SELECT * FROM " + tableName + " ORDER BY id"))) { resultSet.next(); assertEquals("1.23", resultSet.getString("col1")); @@ -151,8 +147,6 @@ public void testLiteralPgNumeric() { @Test public void testParameterizedWithPgNumericAsValue() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -176,7 +170,9 @@ public void testParameterizedWithPgNumericAsValue() { }); try (ResultSet resultSet = - databaseClient.singleUse().executeQuery(Statement.of("SELECT * FROM " + tableName))) { + databaseClient + .singleUse() + .executeQuery(Statement.of("SELECT * FROM " + tableName + " ORDER BY id"))) { resultSet.next(); assertEquals("1.23", resultSet.getString("col1")); @@ -193,8 +189,6 @@ public void testParameterizedWithPgNumericAsValue() { @Test public void testParameterizedWithPgNumericAsDouble() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -218,7 +212,9 @@ public void testParameterizedWithPgNumericAsDouble() { }); try (ResultSet resultSet = - databaseClient.singleUse().executeQuery(Statement.of("SELECT * FROM " + tableName))) { + databaseClient + .singleUse() + .executeQuery(Statement.of("SELECT * FROM " + tableName + " ORDER BY id"))) { resultSet.next(); assertEquals("1.23", resultSet.getString("col1")); @@ -235,8 +231,6 @@ public void testParameterizedWithPgNumericAsDouble() { @Test public void testParameterizedWithPgNumericAsInt() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -260,8 +254,6 @@ public void testParameterizedWithPgNumericAsInt() { @Test public void testParameterizedWithPgNumericAsLong() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -285,8 +277,6 @@ public void testParameterizedWithPgNumericAsLong() { @Test public void testMutationsWithPgNumericAsString() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -315,7 +305,9 @@ public void testMutationsWithPgNumericAsString() { }); try (ResultSet resultSet = - databaseClient.singleUse().executeQuery(Statement.of("SELECT * FROM " + tableName))) { + databaseClient + .singleUse() + .executeQuery(Statement.of("SELECT * FROM " + tableName + " ORDER BY id"))) { resultSet.next(); assertEquals("1.23", resultSet.getString("col1")); @@ -332,8 +324,6 @@ public void testMutationsWithPgNumericAsString() { @Test public void testMutationsWithPgNumericAsInt() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -360,8 +350,6 @@ public void testMutationsWithPgNumericAsInt() { @Test public void testMutationsWithPgNumericAsLong() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -388,8 +376,6 @@ public void testMutationsWithPgNumericAsLong() { @Test public void testMutationsWithPgNumericAsBigDecimal() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -412,7 +398,9 @@ public void testMutationsWithPgNumericAsBigDecimal() { }); try (ResultSet resultSet = - databaseClient.singleUse().executeQuery(Statement.of("SELECT * FROM " + tableName))) { + databaseClient + .singleUse() + .executeQuery(Statement.of("SELECT * FROM " + tableName + " ORDER BY id"))) { resultSet.next(); assertEquals("1.23", resultSet.getString("col1")); @@ -425,8 +413,6 @@ public void testMutationsWithPgNumericAsBigDecimal() { @Test public void testMutationsWithPgNumericAsValue() { - assumeFalse( - "PgNumeric is not supported in the emulator", EmulatorSpannerHelper.isUsingEmulator()); databaseClient .readWriteTransaction() .run( @@ -455,7 +441,9 @@ public void testMutationsWithPgNumericAsValue() { }); try (ResultSet resultSet = - databaseClient.singleUse().executeQuery(Statement.of("SELECT * FROM " + tableName))) { + databaseClient + .singleUse() + .executeQuery(Statement.of("SELECT * FROM " + tableName + " ORDER BY id"))) { resultSet.next(); assertEquals("1.23", resultSet.getString("col1"));