From e8a52077bdd8d5f383d91062e7270ef433b784d9 Mon Sep 17 00:00:00 2001 From: pawankashyapollion Date: Mon, 10 Feb 2025 12:01:31 +0530 Subject: [PATCH] Assert For String to Actual and Other Fixes --- .../SpannerToCassandraSourceDbIT.java | 148 +++++++++++++++++- 1 file changed, 142 insertions(+), 6 deletions(-) diff --git a/v2/spanner-to-sourcedb/src/test/java/com/google/cloud/teleport/v2/templates/SpannerToCassandraSourceDbIT.java b/v2/spanner-to-sourcedb/src/test/java/com/google/cloud/teleport/v2/templates/SpannerToCassandraSourceDbIT.java index ffd81f3b7a..866a3446a4 100644 --- a/v2/spanner-to-sourcedb/src/test/java/com/google/cloud/teleport/v2/templates/SpannerToCassandraSourceDbIT.java +++ b/v2/spanner-to-sourcedb/src/test/java/com/google/cloud/teleport/v2/templates/SpannerToCassandraSourceDbIT.java @@ -76,6 +76,7 @@ public class SpannerToCassandraSourceDbIT extends SpannerToSourceDbITBase { "SpannerToCassandraSourceIT/cassandra-config-template.conf"; private static final String USER_TABLE = "Users"; + private static final String USER_TABLE_2 = "Users2"; private static final String ALL_DATA_TYPES_TABLE = "AllDatatypeColumns"; private static final String ALL_DATA_TYPES_CUSTOM_CONVERSION_TABLE = "AllDatatypeTransformation"; private static final HashSet testInstances = new HashSet<>(); @@ -183,8 +184,20 @@ public void spannerToCasandraSourceDbDeleteOperation() throws InterruptedExcepti /** De basic rows to multiple tables in Google Cloud Spanner. */ private void writeDeleteInSpanner() { + + Mutation insertOrUpdateMutation = + Mutation.newInsertOrUpdateBuilder(USER_TABLE_2) + .set("id") + .to(4) + .set("full_name") + .to("GG") + .set("from") + .to("BB") + .build(); + spannerResourceManager.write(insertOrUpdateMutation); + KeySet allRows = KeySet.all(); - Mutation deleteAllMutation = Mutation.delete(USER_TABLE, allRows); + Mutation deleteAllMutation = Mutation.delete(USER_TABLE_2, allRows); spannerResourceManager.write(deleteAllMutation); } @@ -277,7 +290,7 @@ private long getRowCount(String tableName) { */ private void writeBasicRowInSpanner() { Mutation m1 = - Mutation.newInsertOrUpdateBuilder("users") + Mutation.newInsertOrUpdateBuilder(USER_TABLE) .set("id") .to(1) .set("full_name") @@ -288,7 +301,7 @@ private void writeBasicRowInSpanner() { spannerResourceManager.write(m1); Mutation m2 = - Mutation.newInsertOrUpdateBuilder("users2") + Mutation.newInsertOrUpdateBuilder(USER_TABLE) .set("id") .to(2) .set("full_name") @@ -313,7 +326,7 @@ private void writeBasicRowInSpanner() { (TransactionRunner.TransactionCallable) transaction -> { Mutation m3 = - Mutation.newInsertOrUpdateBuilder("users") + Mutation.newInsertOrUpdateBuilder(USER_TABLE_2) .set("id") .to(3) .set("full_name") @@ -348,7 +361,7 @@ private void assertBasicRowInCassandraDB() throws InterruptedException { PipelineOperator.Result result = pipelineOperator() .waitForCondition( - createConfig(jobInfo, Duration.ofMinutes(10)), () -> getRowCount(USER_TABLE) == 1); + createConfig(jobInfo, Duration.ofMinutes(10)), () -> getRowCount(USER_TABLE) == 2); assertThatResult(result).meetsConditions(); Iterable rows; try { @@ -992,6 +1005,129 @@ private void assertStringToActualRowsInCassandraDB() throws MultipleFailureExcep Row row = rows.iterator().next(); assertAll( () -> assertThat(row.getString("varchar_column")).isEqualTo("SampleVarchar2"), - () -> assertThat(row.getByte("tinyint_column")).isEqualTo((byte) 127)); + () -> assertThat(row.getByte("tinyint_column")).isEqualTo((byte) 127), + () -> assertThat(row.getLong("bigint_column")).isEqualTo(9223372036854775807L), + () -> assertThat(row.getBoolean("bool_column")).isTrue(), + () -> assertThat(row.getString("char_column")).isEqualTo("CHAR_DATA"), + () -> + assertThat(row.getLocalDate("date_column")) + .isEqualTo(java.time.LocalDate.of(2025, 1, 27)), + () -> + assertThat(row.getInstant("datetime_column")) + .isEqualTo(java.time.Instant.parse("2025-01-27T10:30:00.000Z")), + () -> + assertThat(row.getBigDecimal("decimal_column")).isEqualTo(new BigDecimal("12345.6789")), + () -> assertThat(row.getDouble("double_column")).isEqualTo(2.718281828459045), + () -> assertThat(row.getFloat("float_column")).isEqualTo(3.14159f), + + // Collections (frozen, list, set, map) + () -> + assertThat(row.getList("frozen_list_bigint_column", Long.class)) + .isEqualTo(Arrays.asList(123456789012345L, 987654321012345L)), + () -> + assertThat(row.getSet("frozen_set_bool_column", Boolean.class)) + .isEqualTo(new HashSet<>(Arrays.asList(false, true))), + () -> + assertThat(row.getMap("frozen_map_int_to_bool_column", Integer.class, Boolean.class)) + .isEqualTo(Map.of(1, true, 2, false)), + () -> + assertThat(row.getMap("frozen_map_text_to_list_column", String.class, List.class)) + .isEqualTo(Map.of("fruits", Arrays.asList("apple", "banana"))), + () -> + assertThat(row.getMap("frozen_map_text_to_set_column", String.class, Set.class)) + .isEqualTo(Map.of("vegetables", new HashSet<>(Arrays.asList("carrot", "spinach")))), + () -> + assertThat(row.getSet("frozen_set_of_maps_column", Map.class)) + .isEqualTo( + new HashSet<>( + Arrays.asList( + Map.of("key1", 10, "key2", 20), Map.of("keyA", 5, "keyB", 10)))), + + // Lists and Sets + () -> + assertThat(row.getList("list_int_column", Integer.class)) + .isEqualTo(Arrays.asList(1, 2, 3, 4, 5)), + () -> + assertThat(row.getList("list_text_column", String.class)) + .isEqualTo(Arrays.asList("apple", "banana", "cherry")), + () -> + assertThat(row.getList("list_of_sets_column", Set.class)) + .isEqualTo( + Arrays.asList( + new HashSet<>(Arrays.asList("apple", "banana")), + new HashSet<>(Arrays.asList("carrot", "spinach")))), + + // Maps + () -> + assertThat( + row.getMap("map_date_to_text_column", java.time.LocalDate.class, String.class)) + .isEqualTo( + Map.of( + java.time.LocalDate.parse("2025-01-27"), "event1", + java.time.LocalDate.parse("2025-02-01"), "event2")), + () -> + assertThat(row.getMap("map_text_to_int_column", String.class, Integer.class)) + .isEqualTo(Map.of("key1", 10, "key2", 20)), + () -> + assertThat(row.getMap("map_text_to_list_column", String.class, List.class)) + .isEqualTo( + Map.of( + "color", + Arrays.asList("red", "green"), + "fruit", + Arrays.asList("apple", "banana"))), + () -> + assertThat(row.getMap("map_text_to_set_column", String.class, Set.class)) + .isEqualTo( + Map.of( + "fruit", + new HashSet<>(Arrays.asList("apple", "banana")), + "vegetables", + new HashSet<>(Arrays.asList("carrot", "spinach")))), + + // Sets + () -> + assertThat(row.getSet("set_date_column", java.time.LocalDate.class)) + .isEqualTo( + new HashSet<>( + Arrays.asList( + java.time.LocalDate.parse("2025-01-27"), + java.time.LocalDate.parse("2025-02-01")))), + () -> + assertThat(row.getSet("set_text_column", String.class)) + .isEqualTo(new HashSet<>(Arrays.asList("apple", "orange", "banana"))), + () -> + assertThat(row.getSet("set_of_maps_column", Map.class)) + .isEqualTo( + new HashSet<>( + Arrays.asList( + Map.of("key1", 10, "key2", 20), Map.of("keyA", 5, "keyB", 10)))), + + // Other Basic Types + () -> assertThat(row.getShort("smallint_column")).isEqualTo((short) 32767), + () -> assertThat(row.getInt("mediumint_column")).isEqualTo(8388607), + () -> assertThat(row.getInt("int_column")).isEqualTo(2147483647), + () -> assertThat(row.getString("enum_column")).isEqualTo("OptionA"), + () -> assertThat(row.getString("year_column")).isEqualTo("2025"), + () -> + assertThat(row.getString("longtext_column")) + .isEqualTo( + "Very long text data that exceeds the medium text column length for long text."), + () -> assertThat(row.getString("tinytext_column")).isEqualTo("Short text for tinytext."), + () -> + assertThat(row.getString("mediumtext_column")) + .isEqualTo("Longer text data for mediumtext column."), + () -> + assertThat(row.getString("text_column")) + .isEqualTo("This is some sample text data for the text column."), + () -> + assertThat(row.getLocalTime("time_column")) + .isEqualTo(java.time.LocalTime.parse("12:30:00.000000000")), + () -> + assertThat(row.getInstant("timestamp_column")) + .isEqualTo(java.time.Instant.parse("2025-01-27T10:30:00.123456Z")), + () -> + assertThat(row.getBigInteger("varint_column")) + .isEqualTo(java.math.BigInteger.valueOf(123456789L))); } }