This is an automated email from the ASF dual-hosted git repository. kpvdr pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-interop-test.git
commit c79257760a509548b58fac0428aa275c4fcf8ff5 Author: QIT Development Team <[email protected]> AuthorDate: Fri Jul 31 10:13:07 2026 -0400 Restructure: JMS test matrix from N×N to star configuration (180 → 55 tests) Center every test pair on the JMS client so only real JMS interop is tested, not AMQP-to-AMQP with JMS annotations. Star pairs: JMS→AMQP, AMQP→JMS, JMS→JMS (11 pairs × 5 values). Co-Authored-By: Claude Opus 4.6 <[email protected]> --- tests/test_jms_unified.py | 71 ++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/tests/test_jms_unified.py b/tests/test_jms_unified.py index 1f00859..f9f0984 100644 --- a/tests/test_jms_unified.py +++ b/tests/test_jms_unified.py @@ -1,15 +1,18 @@ """ -JMS Interoperability Tests - Unified Client Matrix +JMS Interoperability Tests - Star Configuration -Tests JMS message interoperability across all AMQP clients and JMS client. -Structure matches test_types.py (AMQP tests) for consistency. +Tests JMS message interoperability using a star topology centered on the +Qpid JMS Client. Every test pair includes the JMS client on at least one +side, validating that each AMQP client can correctly send to and receive +from a native JMS endpoint. -Test Matrix: N×N (sender × receiver) -- Phase 2b.1: Python + JMS (2×2 = 4 tests) -- Phase 2b.2: + JavaScript (3×3 = 9 tests) -- Phase 2b.3: + C++ (4×4 = 16 tests) -- Phase 2b.4: + .NET (5×5 = 25 tests) -- Phase 2b.5: + Java ProtonJ2 (6×6 = 36 tests) +Star Pairs (11 total): +- JMS -> AMQP client (5 pairs: python-proton, javascript-rhea, cpp-proton, + dotnet-proton, java-protonj2) +- AMQP client -> JMS (5 pairs: same clients in reverse) +- JMS -> JMS (baseline) + +Test Count: 11 pairs x 5 text values = 55 tests (Phase 2b) Message Types: Incremental - Phase 2b: TextMessage only @@ -48,16 +51,25 @@ TEXT_MESSAGE_VALUES = [ # Client Configurations # ============================================================================= -# Enabled clients for testing (incrementally expand) -ENABLED_CLIENTS = [ - "python-proton", # Phase 2b.1 ✅ - "jms", # Phase 2b.1 ✅ - "javascript-rhea", # Phase 2b.2 ✅ - "cpp-proton", # Phase 2b.3 ✅ - "dotnet-proton", # Phase 2b.4 ✅ - "java-protonj2", # Phase 2b.5 ✅ +# Hub of the star: native JMS client +JMS_CLIENT = "jms" + +# Spokes of the star: AMQP clients that emulate JMS via --jms-mode +AMQP_CLIENTS = [ + "python-proton", + "javascript-rhea", + "cpp-proton", + "dotnet-proton", + "java-protonj2", ] +# Star test pairs: JMS is always on at least one side +STAR_PAIRS = ( + [pytest.param(JMS_CLIENT, c, id=f"jms->{c}") for c in AMQP_CLIENTS] + + [pytest.param(c, JMS_CLIENT, id=f"{c}->jms") for c in AMQP_CLIENTS] + + [pytest.param(JMS_CLIENT, JMS_CLIENT, id="jms->jms")] +) + # Client metadata CLIENT_INFO = { "python-proton": { @@ -337,8 +349,7 @@ def compare_messages(sent: list[dict], received: list[dict], sender: str, receiv # Test Matrix # ============================================================================= [email protected]("sender_client", ENABLED_CLIENTS) [email protected]("receiver_client", ENABLED_CLIENTS) [email protected]("sender_client,receiver_client", STAR_PAIRS) @pytest.mark.parametrize("text_value", TEXT_MESSAGE_VALUES) def test_jms_textmessage_interop( sender_client: str, @@ -349,16 +360,11 @@ def test_jms_textmessage_interop( project_root: Path, ): """ - Test JMS TextMessage interoperability across all enabled clients. - - This creates a full N×N matrix where N = number of enabled clients. - Each test sends a message from one client and receives with another. + Test JMS TextMessage interoperability using star configuration. - Examples: - - python-proton → python-proton (self-test with JMS annotation) - - python-proton → jms (AMQP JMS emulation → native JMS) - - jms → python-proton (native JMS → AMQP JMS detection) - - jms → jms (JMS baseline, always works) + The JMS client (Qpid JMS) is always on at least one side of every pair. + This validates that each AMQP client can correctly send JMS-annotated + messages to, and receive JMS messages from, the native JMS client. """ # Prepare message if sender_client == "jms": @@ -384,19 +390,16 @@ def test_jms_textmessage_interop( # ============================================================================= # Phase 2c: BytesMessage, MapMessage, StreamMessage, Message -# @pytest.mark.parametrize("sender_client", ENABLED_CLIENTS) -# @pytest.mark.parametrize("receiver_client", ENABLED_CLIENTS) +# @pytest.mark.parametrize("sender_client,receiver_client", STAR_PAIRS) # def test_jms_bytesmessage_interop(sender_client, receiver_client, ...): # pass # Phase 2d: Headers -# @pytest.mark.parametrize("sender_client", ENABLED_CLIENTS) -# @pytest.mark.parametrize("receiver_client", ENABLED_CLIENTS) +# @pytest.mark.parametrize("sender_client,receiver_client", STAR_PAIRS) # def test_jms_headers_interop(sender_client, receiver_client, ...): # pass # Phase 2e: Properties -# @pytest.mark.parametrize("sender_client", ENABLED_CLIENTS) -# @pytest.mark.parametrize("receiver_client", ENABLED_CLIENTS) +# @pytest.mark.parametrize("sender_client,receiver_client", STAR_PAIRS) # def test_jms_properties_interop(sender_client, receiver_client, ...): # pass --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
