This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new d710e0678d [Test][Connector-V2] Strengthen the MQTT source 
serialization coverage (#12410)
d710e0678d is described below

commit d710e0678d0357ac3f22ffb694f32cb21da36ac6
Author: Sepuri Sai Krishna <[email protected]>
AuthorDate: Mon Sep 21 06:04:51 2026 +0000

    [Test][Connector-V2] Strengthen the MQTT source serialization coverage 
(#12410)
---
 .../mqtt/source/MqttSourceConfigTest.java          | 34 ++++++++++++++++++++++
 .../seatunnel/mqtt/source/MqttSourceTest.java      | 14 ++++++++-
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git 
a/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceConfigTest.java
 
b/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceConfigTest.java
index f9c4497736..0582f77cd1 100644
--- 
a/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceConfigTest.java
+++ 
b/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceConfigTest.java
@@ -22,6 +22,10 @@ import org.apache.seatunnel.api.configuration.ReadonlyConfig;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -153,6 +157,36 @@ class MqttSourceConfigTest {
         
Assertions.assertTrue(sourceConfig.getClientId().startsWith("seatunnel_mqtt_source_"));
     }
 
+    @Test
+    void testConfigSurvivesJavaSerialization() throws Exception {
+        Map<String, Object> config = baseConfig();
+        config.put("username", "admin");
+        // Deliberately non-default values, so the assertions below prove the 
values round
+        // tripped rather than that defaults were rebuilt. The default qos is 
1 and validate()
+        // limits it to 0 or 1, so 0 is the only non-default that is legal; 
the default format
+        // is json.
+        config.put("qos", 0);
+        config.put("format", "text");
+        MqttSourceConfig sourceConfig = new 
MqttSourceConfig(ReadonlyConfig.fromMap(config));
+
+        byte[] serialized;
+        try (ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+                ObjectOutputStream out = new ObjectOutputStream(bytes)) {
+            out.writeObject(sourceConfig);
+            out.flush();
+            serialized = bytes.toByteArray();
+        }
+
+        try (ObjectInputStream in = new ObjectInputStream(new 
ByteArrayInputStream(serialized))) {
+            MqttSourceConfig restored = (MqttSourceConfig) in.readObject();
+            Assertions.assertEquals(sourceConfig.getUrl(), restored.getUrl());
+            Assertions.assertEquals(sourceConfig.getTopic(), 
restored.getTopic());
+            Assertions.assertEquals(sourceConfig.getUsername(), 
restored.getUsername());
+            Assertions.assertEquals(sourceConfig.getQos(), restored.getQos());
+            Assertions.assertEquals(sourceConfig.getClientId(), 
restored.getClientId());
+        }
+    }
+
     private static Map<String, Object> baseConfig() {
         Map<String, Object> config = new HashMap<>();
         config.put("url", "tcp://localhost:1883");
diff --git 
a/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceTest.java
 
b/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceTest.java
index 0e027e0f5f..72cd2caa62 100644
--- 
a/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceTest.java
+++ 
b/seatunnel-connectors-v2/connector-mqtt/src/test/java/org/apache/seatunnel/connectors/seatunnel/mqtt/source/MqttSourceTest.java
@@ -204,6 +204,9 @@ class MqttSourceTest {
     @Test
     void testSourceIsJavaSerializable() throws Exception {
         MqttSource source = new 
MqttSource(ReadonlyConfig.fromMap(baseConfig()));
+        // The engine sets the job context before it serializes the logical 
DAG, so mirror that
+        // ordering rather than serializing a source that has never had one.
+        source.setJobContext(new JobContext().setJobMode(JobMode.STREAMING));
 
         byte[] serialized;
         try (ByteArrayOutputStream bytes = new ByteArrayOutputStream();
@@ -215,7 +218,16 @@ class MqttSourceTest {
 
         try (ObjectInputStream in = new ObjectInputStream(new 
ByteArrayInputStream(serialized))) {
             MqttSource restored = (MqttSource) in.readObject();
-            Assertions.assertEquals(source.getPluginName(), 
restored.getPluginName());
+            // Assert restored state, not a constant: getPluginName() alone 
would still pass if
+            // every field were lost. The catalog table and the job context 
are the state the
+            // engine relies on after deserializing the vertex.
+            Assertions.assertEquals(
+                    source.getProducedCatalogTables().get(0).getTableId(),
+                    restored.getProducedCatalogTables().get(0).getTableId());
+            Assertions.assertEquals(
+                    source.getProducedCatalogTables().get(0).getTableSchema(),
+                    
restored.getProducedCatalogTables().get(0).getTableSchema());
+            Assertions.assertEquals(Boundedness.UNBOUNDED, 
restored.getBoundedness());
         }
     }
 

Reply via email to