@Test public void shouldReturnSameLocalDateInstanceWhenConvertingToLocalDate() { LocalDate now = LocalDate.now(); assertThat(Conversions.toLocalDate(now)).isSameAs(now); }
@Test public void shouldReturnSameLocalDateTimeInstanceWhenConvertingToLocalDateTime() { LocalDateTime now = LocalDateTime.now(); assertThat(Conversions.toLocalDateTime(now)).isSameAs(now); }
@Test public void shouldReturnSameInstanceForSameAddresses() { MongoClient client1 = clients.clientForMembers(addresses); MongoClient client2 = clients.clientForMembers(addresses); assertThat(client1).isSameAs(client2); ServerAddress[] array = addresses.toArray(new ServerAddress[addresses.size()]); MongoClient client3 = clients.clientForMembers(array); MongoClient client4 = clients.clientForMembers(array); assertThat(client3).isSameAs(client4); assertThat(client3).isSameAs(client1); String addressesStr = MongoUtil.toString(addresses); MongoClient client5 = clients.clientForMembers(addressesStr); MongoClient client6 = clients.clientForMembers(addressesStr); assertThat(client5).isSameAs(client6); assertThat(client5).isSameAs(client1); } }
@Test public void shouldNotSubdivideOneReplicaSet() { sets = ReplicaSets.parse("rs1/host1:27017,host2:27017"); List<ReplicaSets> divided = new ArrayList<>(); sets.subdivide(1, divided::add); assertThat(divided.size()).isEqualTo(1); assertThat(divided.get(0)).isSameAs(sets); }
@Test public void shouldNotSubdivideMultipleReplicaSetsIntoOneGroup() { sets = ReplicaSets.parse("rs1/host1:27017,host2:27017;rs2/host3:27017"); List<ReplicaSets> divided = new ArrayList<>(); sets.subdivide(1, divided::add); assertThat(divided.size()).isEqualTo(1); assertThat(divided.get(0)).isSameAs(sets); }
@Test public void shouldReturnSameInstanceForSameAddress() { addresses.forEach(address -> { MongoClient client1 = clients.clientFor(address); MongoClient client2 = clients.clientFor(address); assertThat(client1).isSameAs(client2); MongoClient client3 = clients.clientFor(address.toString()); MongoClient client4 = clients.clientFor(address); assertThat(client3).isSameAs(client4); assertThat(client3).isSameAs(client1); MongoClient client5 = clients.clientFor(address.toString()); MongoClient client6 = clients.clientFor(address.toString()); assertThat(client5).isSameAs(client6); assertThat(client5).isSameAs(client1); }); }
@Test public void shouldSubdivideMultipleReplicaSetsWithIntoMultipleGroups() { sets = ReplicaSets.parse("rs1/host1:27017,host2:27017;rs2/host3:27017"); List<ReplicaSets> divided = new ArrayList<>(); sets.subdivide(2, divided::add); assertThat(divided.size()).isEqualTo(2); ReplicaSets dividedSet1 = divided.get(0); assertThat(dividedSet1.replicaSetCount()).isEqualTo(1); assertThat(dividedSet1.all().get(0)).isSameAs(sets.all().get(0)); ReplicaSets dividedSet2 = divided.get(1); assertThat(dividedSet2.replicaSetCount()).isEqualTo(1); assertThat(dividedSet2.all().get(0)).isSameAs(sets.all().get(1)); }
@Test public void shouldReturnSameLocalTimeInstanceWhenConvertingToLocalTime() { LocalTime now = LocalTime.now(); assertThat(Conversions.toLocalTime(now)).isSameAs(now); }
/** * Verify that the fields in the given {@link Struct} reference the {@link Field} definitions in the given {@link Schema}. * * @param struct the {@link Struct} instance; may not be null * @param schema the {@link Schema} defining the fields in the Struct; may not be null */ public static void fieldsInSchema(Struct struct, Schema schema) { schema.fields().forEach(field -> { Object val1 = struct.get(field); Object val2 = struct.get(field.name()); assertThat(val1).isSameAs(val2); if (val1 instanceof Struct) { fieldsInSchema((Struct) val1, field.schema()); } }); }
@Test public void shouldAlwaysFindRecordMakerForCollection() { for (int i = 0; i != 100; ++i) { CollectionId id = new CollectionId("rs0", "dbA", "c" + i); RecordsForCollection records = recordMakers.forCollection(id); assertThat(records).isNotNull(); assertThat(records.collectionId()).isSameAs(id); } }
assertThat(key.schema()).isSameAs(transformed.keySchema()); assertThat(key.schema().field("id").schema()).isEqualTo(SchemaBuilder.OPTIONAL_STRING_SCHEMA); assertThat(key.get("id")).isEqualTo(objId.toString());
@Test @FixFor("DBZ-612") public void shouldGenerateRecordForUnsetOnlyUpdateEvent() throws InterruptedException { BsonTimestamp ts = new BsonTimestamp(1000, 1); CollectionId collectionId = new CollectionId("rs0", "dbA", "c1"); ObjectId objId = new ObjectId(); Document obj = new Document() .append("$unset", new Document().append("phone", true).append("active", false)) ; // given Document event = new Document().append("o", obj) .append("o2", objId) .append("ns", "dbA.c1") .append("ts", ts) .append("h", Long.valueOf(12345678)) .append("op", "u"); RecordsForCollection records = recordMakers.forCollection(collectionId); records.recordEvent(event, 1002); assertThat(produced.size()).isEqualTo(1); SourceRecord record = produced.get(0); // when SourceRecord transformed = transformation.apply(record); Struct value = (Struct) transformed.value(); // and then assert value and its schema assertThat(value.schema()).isSameAs(transformed.valueSchema()); assertThat(value.get("phone")).isEqualTo(null); assertThat(value.schema().field("phone").schema()).isEqualTo(SchemaBuilder.OPTIONAL_STRING_SCHEMA); assertThat(value.schema().fields()).hasSize(2); }
@Test public void shouldGenerateRecordForInsertEvent() throws InterruptedException { CollectionId collectionId = new CollectionId("rs0", "dbA", "c1"); BsonTimestamp ts = new BsonTimestamp(1000, 1); ObjectId objId = new ObjectId(); Document obj = new Document().append("_id", objId).append("name", "Sally"); Document event = new Document().append("o", obj) .append("ns", "dbA.c1") .append("ts", ts) .append("h", Long.valueOf(12345678)) .append("op", "i"); RecordsForCollection records = recordMakers.forCollection(collectionId); records.recordEvent(event, 1002); assertThat(produced.size()).isEqualTo(1); SourceRecord record = produced.get(0); Struct key = (Struct) record.key(); Struct value = (Struct) record.value(); assertThat(key.schema()).isSameAs(record.keySchema()); assertThat(key.get("id")).isEqualTo("{ \"$oid\" : \"" + objId + "\"}"); assertThat(value.schema()).isSameAs(record.valueSchema()); // assertThat(value.getString(FieldName.BEFORE)).isNull(); assertThat(value.getString(FieldName.AFTER)).isEqualTo(obj.toJson(WRITER_SETTINGS)); assertThat(value.getString(FieldName.OPERATION)).isEqualTo(Operation.CREATE.code()); assertThat(value.getInt64(FieldName.TIMESTAMP)).isEqualTo(1002L); Struct actualSource = value.getStruct(FieldName.SOURCE); Struct expectedSource = source.lastOffsetStruct("rs0", collectionId); assertThat(actualSource).isEqualTo(expectedSource); }
assertThat(key.schema()).isSameAs(transformed.keySchema()); assertThat(key.schema().field("id").schema()).isEqualTo(SchemaBuilder.OPTIONAL_STRING_SCHEMA); assertThat(key.get("id")).isEqualTo(objId.toString());
@Test public void shouldGenerateRecordForUpdateEvent() throws InterruptedException { BsonTimestamp ts = new BsonTimestamp(1000, 1); CollectionId collectionId = new CollectionId("rs0", "dbA", "c1"); ObjectId objId = new ObjectId(); Document obj = new Document().append("$set", new Document("name", "Sally")); Document event = new Document().append("o", obj) .append("o2", objId) .append("ns", "dbA.c1") .append("ts", ts) .append("h", Long.valueOf(12345678)) .append("op", "u"); RecordsForCollection records = recordMakers.forCollection(collectionId); records.recordEvent(event, 1002); assertThat(produced.size()).isEqualTo(1); SourceRecord record = produced.get(0); Struct key = (Struct) record.key(); Struct value = (Struct) record.value(); assertThat(key.schema()).isSameAs(record.keySchema()); assertThat(key.get("id")).isEqualTo(JSONSerializers.getStrict().serialize(objId)); assertThat(value.schema()).isSameAs(record.valueSchema()); // assertThat(value.getString(FieldName.BEFORE)).isNull(); assertThat(value.getString(FieldName.AFTER)).isNull(); assertThat(value.getString("patch")).isEqualTo(obj.toJson(WRITER_SETTINGS)); assertThat(value.getString(FieldName.OPERATION)).isEqualTo(Operation.UPDATE.code()); assertThat(value.getInt64(FieldName.TIMESTAMP)).isEqualTo(1002L); Struct actualSource = value.getStruct(FieldName.SOURCE); Struct expectedSource = source.lastOffsetStruct("rs0", collectionId); assertThat(actualSource).isEqualTo(expectedSource); }
@Test @FixFor("DBZ-582") public void shouldGenerateRecordForDeleteEventWithoutTombstone() throws InterruptedException { RecordMakers recordMakers = new RecordMakers(filters, source, topicSelector, produced::add, false); BsonTimestamp ts = new BsonTimestamp(1000, 1); CollectionId collectionId = new CollectionId("rs0", "dbA", "c1"); ObjectId objId = new ObjectId(); Document obj = new Document("_id", objId); Document event = new Document().append("o", obj) .append("ns", "dbA.c1") .append("ts", ts) .append("h", new Long(12345678)) .append("op", "d"); RecordsForCollection records = recordMakers.forCollection(collectionId); records.recordEvent(event, 1002); assertThat(produced.size()).isEqualTo(1); SourceRecord record = produced.get(0); Struct key = (Struct) record.key(); Struct value = (Struct) record.value(); assertThat(key.schema()).isSameAs(record.keySchema()); assertThat(key.get("id")).isEqualTo(JSONSerializers.getStrict().serialize(objId)); assertThat(value.schema()).isSameAs(record.valueSchema()); assertThat(value.getString(FieldName.AFTER)).isNull(); assertThat(value.getString("patch")).isNull(); assertThat(value.getString(FieldName.OPERATION)).isEqualTo(Operation.DELETE.code()); assertThat(value.getInt64(FieldName.TIMESTAMP)).isEqualTo(1002L); Struct actualSource = value.getStruct(FieldName.SOURCE); Struct expectedSource = source.lastOffsetStruct("rs0", collectionId); assertThat(actualSource).isEqualTo(expectedSource); }
context = new MySqlTaskContext(config, new Filters.Builder(config).build()); context.start(); assertThat(context.config()).isSameAs(config);