|
16 | 16 |
|
17 | 17 | package org.springframework.cloud.fn.supplier.debezium.it.supplier;
|
18 | 18 |
|
| 19 | +import java.time.Duration; |
19 | 20 | import java.util.function.Supplier;
|
20 | 21 |
|
21 | 22 | import org.junit.jupiter.api.Test;
|
|
41 | 42 | properties = { "spring.cloud.function.definition=debeziumSupplier",
|
42 | 43 |
|
43 | 44 | // https://debezium.io/documentation/reference/transformations/event-flattening.html
|
| 45 | + "debezium.properties.debezium.embedded.shutdown.pause.before.interrupt.ms=500", |
44 | 46 | "debezium.properties.transforms=unwrap",
|
45 | 47 | "debezium.properties.transforms.unwrap.type=io.debezium.transforms.ExtractNewRecordState",
|
46 |
| - "debezium.properties.transforms.unwrap.drop.tombstones=true", |
47 |
| - "debezium.properties.transforms.unwrap.delete.handling.mode=rewrite", |
| 48 | + "debezium.properties.transforms.unwrap.delete.tombstone.handling.mode=rewrite", |
48 | 49 | "debezium.properties.transforms.unwrap.add.fields=name,db,op,table",
|
49 | 50 |
|
50 | 51 | "debezium.properties.schema.history.internal=io.debezium.relational.history.MemorySchemaHistory",
|
51 | 52 | "debezium.properties.offset.storage=org.apache.kafka.connect.storage.MemoryOffsetBackingStore",
|
52 | 53 |
|
53 |
| - // Drop schema from the message payload. |
| 54 | + // Drop schema from the payload payload. |
54 | 55 | "debezium.properties.key.converter.schemas.enable=false",
|
55 | 56 | "debezium.properties.value.converter.schemas.enable=false",
|
56 | 57 |
|
@@ -101,52 +102,51 @@ void testDebeziumSupplier() {
|
101 | 102 | jdbcTemplate.update(
|
102 | 103 | "INSERT INTO `customers`(`first_name`,`last_name`,`email`) VALUES('Test666', 'Test666', '[email protected]')");
|
103 | 104 |
|
104 |
| - Flux<Message<?>> messageFlux = this.debeziumSupplier.get(); |
| 105 | + Flux<String> payloadFlux = this.debeziumSupplier.get() |
| 106 | + .map(Message::getPayload) |
| 107 | + .cast(byte[].class) |
| 108 | + .map(String::new); |
105 | 109 |
|
106 |
| - // Message size should correspond to the number of insert statements in: |
| 110 | + // payload size should correspond to the number of insert statements in: |
107 | 111 | // https://github.com/debezium/container-images/blob/main/examples/mysql/2.3/inventory.sql
|
108 | 112 | // filtered by Customers and Addresses table.
|
109 |
| - StepVerifier.create(messageFlux) |
| 113 | + StepVerifier.create(payloadFlux) |
110 | 114 | .expectNextCount(16) // Skip the DDL transaction logs.
|
111 | 115 |
|
112 | 116 | // Customers table
|
113 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 117 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
114 | 118 | "{\"id\":1001,\"first_name\":\"Sally\",\"last_name\":\"Thomas\",\"email\":\"[email protected]\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"customers\"}"))
|
115 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 119 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
116 | 120 | "{\"id\":1002,\"first_name\":\"George\",\"last_name\":\"Bailey\",\"email\":\"[email protected]\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"customers\"}"))
|
117 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 121 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
118 | 122 | "{\"id\":1003,\"first_name\":\"Edward\",\"last_name\":\"Walker\",\"email\":\"[email protected]\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"customers\"}"))
|
119 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 123 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
120 | 124 | "{\"id\":1004,\"first_name\":\"Anne\",\"last_name\":\"Kretchmar\",\"email\":\"[email protected]\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"customers\"}"))
|
121 | 125 |
|
122 | 126 | // NEW Customer Insert
|
123 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 127 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
124 | 128 | "{\"id\":1005,\"first_name\":\"Test666\",\"last_name\":\"Test666\",\"email\":\"[email protected]\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"customers\"}"))
|
125 | 129 |
|
126 | 130 | // Addresses table
|
127 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 131 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
128 | 132 | "{\"id\":10,\"customer_id\":1001,\"street\":\"3183 Moore Avenue\",\"city\":\"Euless\",\"state\":\"Texas\",\"zip\":\"76036\",\"type\":\"SHIPPING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
129 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 133 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
130 | 134 | "{\"id\":11,\"customer_id\":1001,\"street\":\"2389 Hidden Valley Road\",\"city\":\"Harrisburg\",\"state\":\"Pennsylvania\",\"zip\":\"17116\",\"type\":\"BILLING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
131 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 135 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
132 | 136 | "{\"id\":12,\"customer_id\":1002,\"street\":\"281 Riverside Drive\",\"city\":\"Augusta\",\"state\":\"Georgia\",\"zip\":\"30901\",\"type\":\"BILLING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
133 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 137 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
134 | 138 | "{\"id\":13,\"customer_id\":1003,\"street\":\"3787 Brownton Road\",\"city\":\"Columbus\",\"state\":\"Mississippi\",\"zip\":\"39701\",\"type\":\"SHIPPING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
135 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 139 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
136 | 140 | "{\"id\":14,\"customer_id\":1003,\"street\":\"2458 Lost Creek Road\",\"city\":\"Bethlehem\",\"state\":\"Pennsylvania\",\"zip\":\"18018\",\"type\":\"SHIPPING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
137 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 141 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
138 | 142 | "{\"id\":15,\"customer_id\":1003,\"street\":\"4800 Simpson Square\",\"city\":\"Hillsdale\",\"state\":\"Oklahoma\",\"zip\":\"73743\",\"type\":\"BILLING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
139 |
| - .assertNext((message) -> assertThat(payloadString(message)).isEqualTo( |
| 143 | + .assertNext((payload) -> assertThat(payload).isEqualTo( |
140 | 144 | "{\"id\":16,\"customer_id\":1004,\"street\":\"1289 University Hill Road\",\"city\":\"Canehill\",\"state\":\"Arkansas\",\"zip\":\"72717\",\"type\":\"LIVING\",\"__deleted\":\"false\",\"__name\":\"my-topic\",\"__db\":\"inventory\",\"__op\":\"r\",\"__table\":\"addresses\"}"))
|
141 | 145 | .thenCancel()
|
142 |
| - .verify(); |
| 146 | + .verify(Duration.ofSeconds(30)); |
143 | 147 |
|
144 | 148 | }
|
145 | 149 |
|
146 |
| - private String payloadString(Message<?> message) { |
147 |
| - return new String((byte[]) message.getPayload()); |
148 |
| - } |
149 |
| - |
150 | 150 | @SpringBootApplication(exclude = { MongoAutoConfiguration.class })
|
151 | 151 | @Import({ TestJdbcTemplateConfiguration.class })
|
152 | 152 | static class DebeziumSupplierTestApplication {
|
|
0 commit comments