diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..77041210ee
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,23 @@
+version: 2
+updates:
+- package-ecosystem: maven
+ directory: /
+ ignore:
+ - dependency-name: "org.kaazing:k3po.*"
+ versions: [ "4.x", "5.x" ]
+ - dependency-name: "com.guicedee.services:commons-*"
+ versions: [ "62" ]
+ schedule:
+ interval: daily
+- package-ecosystem: docker
+ directory: /cloud/docker-image/src/main/docker/release
+ schedule:
+ interval: daily
+- package-ecosystem: docker
+ directory: /cloud/docker-image/src/main/docker/incubator
+ schedule:
+ interval: daily
+- package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: daily
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 353ebfc537..d87d467656 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,17 +13,18 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- java: [ 11, 17 ]
+ java: [ 11, 17, 20 ]
steps:
- name: Checkout GitHub sources
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Setup JDK ${{ matrix.java }}
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v3
with:
+ distribution: zulu
java-version: ${{ matrix.java }}
- name: Cache Maven packages
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: |
~/.m2/repository
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 0000000000..d790178a93
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,91 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: CodeQL
+
+on:
+ push:
+ branches: [ "develop", "main" ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ "develop" ]
+ schedule:
+ - cron: '27 10 * * 4'
+
+jobs:
+ analyze:
+ name: Analyze
+ # Runner size impacts CodeQL analysis time. To learn more, please see:
+ # - https://gh.io/recommended-hardware-resources-for-running-codeql
+ # - https://gh.io/supported-runners-and-hardware-resources
+ # - https://gh.io/using-larger-runners
+ # Consider using larger runners for possible analysis time improvements.
+ runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
+ timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'java' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ]
+ # Use only 'java' to analyze code written in Java, Kotlin or both
+ # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+
+ # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
+
+ # Cache downloaded Maven dependencies
+ - name: Cache Maven packages
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.m2/repository
+ !~/.m2/repository/io/aklivity/zilla
+ key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+ restore-keys: ${{ runner.os }}-m2
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v2
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
+
+ # - run: |
+ # echo "Run, Build Application using script"
+ # ./location_of_script_within_repo/buildscript.sh
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
+ with:
+ category: "/language:${{matrix.language}}"
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
index 59ce113780..2e76e189d2 100644
--- a/.mvn/wrapper/maven-wrapper.properties
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -1,2 +1,2 @@
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.4/apache-maven-3.9.4-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 10e376ed00..e0f3fa5c3c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,126 @@
## [Unreleased](https://github.com/aklivity/zilla/tree/HEAD)
-[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.50...HEAD)
+[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.51...HEAD)
+
+**Implemented enhancements:**
+
+- Connection pool for `kafka` binding `heartbeat` requests [\#462](https://github.com/aklivity/zilla/issues/462)
+- Enhance `mqtt` binding configuration syntax [\#420](https://github.com/aklivity/zilla/issues/420)
+- Mqtt-Kafka session implementation [\#319](https://github.com/aklivity/zilla/issues/319)
+- Design `zilla.yaml` configuration syntax for schema types [\#310](https://github.com/aklivity/zilla/issues/310)
+- Generate `zilla.yaml` from `AsyncAPI` specification [\#256](https://github.com/aklivity/zilla/issues/256)
+- Generate `zilla.yaml` from `OpenAPI` specification\(s\) [\#254](https://github.com/aklivity/zilla/issues/254)
+- Support `kafka` consumer groups [\#215](https://github.com/aklivity/zilla/issues/215)
+- MQTT guard implementation [\#307](https://github.com/aklivity/zilla/pull/307) ([bmaidics](https://github.com/bmaidics))
+
+**Fixed bugs:**
+
+- Zilla crash during attempted WebSocket connection [\#391](https://github.com/aklivity/zilla/issues/391)
+- Index out of bounds exception with HTTP-Kafka proxy [\#293](https://github.com/aklivity/zilla/issues/293)
+
+**Closed issues:**
+
+- Send will message as data frame + reject large packets [\#364](https://github.com/aklivity/zilla/issues/364)
+- Support Kafka client request-response with MQTT clients [\#326](https://github.com/aklivity/zilla/issues/326)
+- Add guard support for MQTT binding [\#308](https://github.com/aklivity/zilla/issues/308)
+- Implement retained feature for mqtt-kafka [\#289](https://github.com/aklivity/zilla/issues/289)
+
+**Merged pull requests:**
+
+- Mqtt client publish fix [\#464](https://github.com/aklivity/zilla/pull/464) ([bmaidics](https://github.com/bmaidics))
+- Fix implicit subscribe no packetId reconnection [\#451](https://github.com/aklivity/zilla/pull/451) ([bmaidics](https://github.com/bmaidics))
+- Remove clientId from subscribeKey [\#450](https://github.com/aklivity/zilla/pull/450) ([bmaidics](https://github.com/bmaidics))
+- Rename config command to generate [\#449](https://github.com/aklivity/zilla/pull/449) ([attilakreiner](https://github.com/attilakreiner))
+- Do not include generated subcsriptionId [\#448](https://github.com/aklivity/zilla/pull/448) ([bmaidics](https://github.com/bmaidics))
+- Adjust engine backoff strategy configuration [\#446](https://github.com/aklivity/zilla/pull/446) ([jfallows](https://github.com/jfallows))
+- Don't close group stream on cluster and describe streams closer [\#444](https://github.com/aklivity/zilla/pull/444) ([akrambek](https://github.com/akrambek))
+- Engine configuration worker capacity [\#443](https://github.com/aklivity/zilla/pull/443) ([jfallows](https://github.com/jfallows))
+- Remove unused engine configuration [\#442](https://github.com/aklivity/zilla/pull/442) ([jfallows](https://github.com/jfallows))
+- Ensure socket channel has finished connecting before attempting to read [\#441](https://github.com/aklivity/zilla/pull/441) ([jfallows](https://github.com/jfallows))
+- Mqtt subscription handling bugfix [\#439](https://github.com/aklivity/zilla/pull/439) ([bmaidics](https://github.com/bmaidics))
+- Connection pool for kafka group client [\#438](https://github.com/aklivity/zilla/pull/438) ([akrambek](https://github.com/akrambek))
+- Add affinity to mqtt server and client binding [\#436](https://github.com/aklivity/zilla/pull/436) ([bmaidics](https://github.com/bmaidics))
+- Set init flag for data fragmentation in grpc [\#431](https://github.com/aklivity/zilla/pull/431) ([akrambek](https://github.com/akrambek))
+- Fix flow control issue in kafka-grpc [\#430](https://github.com/aklivity/zilla/pull/430) ([akrambek](https://github.com/akrambek))
+- Fix known issues in group client [\#428](https://github.com/aklivity/zilla/pull/428) ([akrambek](https://github.com/akrambek))
+- Enhance mqtt binding configuration syntax [\#425](https://github.com/aklivity/zilla/pull/425) ([bmaidics](https://github.com/bmaidics))
+- Buffer fragmented kafka session signal messages [\#424](https://github.com/aklivity/zilla/pull/424) ([bmaidics](https://github.com/bmaidics))
+- Fix flow control bug [\#423](https://github.com/aklivity/zilla/pull/423) ([akrambek](https://github.com/akrambek))
+- Serverref change [\#422](https://github.com/aklivity/zilla/pull/422) ([bmaidics](https://github.com/bmaidics))
+- Fix finding next partition id [\#419](https://github.com/aklivity/zilla/pull/419) ([akrambek](https://github.com/akrambek))
+- Don't end subscribe stream when unsubscribe, no subscription [\#418](https://github.com/aklivity/zilla/pull/418) ([bmaidics](https://github.com/bmaidics))
+- Remove default kafka topic names [\#416](https://github.com/aklivity/zilla/pull/416) ([bmaidics](https://github.com/bmaidics))
+- Fix consumer assignment causing decoding issue [\#414](https://github.com/aklivity/zilla/pull/414) ([akrambek](https://github.com/akrambek))
+- Add test to validate merge produce rejection on wrong partition [\#410](https://github.com/aklivity/zilla/pull/410) ([akrambek](https://github.com/akrambek))
+- Consumer related bug fixes [\#405](https://github.com/aklivity/zilla/pull/405) ([akrambek](https://github.com/akrambek))
+- Remove unused extends OptionsConfig from non-options config classes [\#403](https://github.com/aklivity/zilla/pull/403) ([jfallows](https://github.com/jfallows))
+- Support consumer protocol [\#400](https://github.com/aklivity/zilla/pull/400) ([akrambek](https://github.com/akrambek))
+- Mqtt client implementation [\#398](https://github.com/aklivity/zilla/pull/398) ([bmaidics](https://github.com/bmaidics))
+- Support build after local docker zpm install [\#396](https://github.com/aklivity/zilla/pull/396) ([jfallows](https://github.com/jfallows))
+- Adapt to consumer group changes [\#394](https://github.com/aklivity/zilla/pull/394) ([bmaidics](https://github.com/bmaidics))
+- Bump actions/checkout from 3 to 4 [\#393](https://github.com/aklivity/zilla/pull/393) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Merged consumer group support [\#390](https://github.com/aklivity/zilla/pull/390) ([akrambek](https://github.com/akrambek))
+- Session expiry [\#387](https://github.com/aklivity/zilla/pull/387) ([bmaidics](https://github.com/bmaidics))
+- Request data length is non-negative [\#386](https://github.com/aklivity/zilla/pull/386) ([jfallows](https://github.com/jfallows))
+- Fix mqtt-kafka publish bug [\#383](https://github.com/aklivity/zilla/pull/383) ([bmaidics](https://github.com/bmaidics))
+- Support configuration property definitions for custom type... [\#382](https://github.com/aklivity/zilla/pull/382) ([jfallows](https://github.com/jfallows))
+- Mqtt kafka redirect [\#381](https://github.com/aklivity/zilla/pull/381) ([bmaidics](https://github.com/bmaidics))
+- Bump org.apache.ivy:ivy from 2.5.1 to 2.5.2 in /manager [\#377](https://github.com/aklivity/zilla/pull/377) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Generate zilla.yaml for asyncapi.mqtt.proxy from an AsyncAPI definition [\#375](https://github.com/aklivity/zilla/pull/375) ([attilakreiner](https://github.com/attilakreiner))
+- Review budget debitors [\#374](https://github.com/aklivity/zilla/pull/374) ([jfallows](https://github.com/jfallows))
+- Support binding config builder exit [\#373](https://github.com/aklivity/zilla/pull/373) ([jfallows](https://github.com/jfallows))
+- Support config builder for MQTT config [\#372](https://github.com/aklivity/zilla/pull/372) ([jfallows](https://github.com/jfallows))
+- Bump org.codehaus.mojo:exec-maven-plugin from 1.6.0 to 3.1.0 [\#370](https://github.com/aklivity/zilla/pull/370) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Generate zilla.yaml from an AsyncAPI definition [\#369](https://github.com/aklivity/zilla/pull/369) ([attilakreiner](https://github.com/attilakreiner))
+- Mqtt kafka will message delivery [\#367](https://github.com/aklivity/zilla/pull/367) ([bmaidics](https://github.com/bmaidics))
+- Bump org.apache.maven.plugins:maven-plugin-plugin from 3.5 to 3.9.0 [\#366](https://github.com/aklivity/zilla/pull/366) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump junit:junit from 4.13.1 to 4.13.2 [\#365](https://github.com/aklivity/zilla/pull/365) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Send will message as data frame + reject large packets [\#363](https://github.com/aklivity/zilla/pull/363) ([bmaidics](https://github.com/bmaidics))
+- Sanitize zip entry path [\#362](https://github.com/aklivity/zilla/pull/362) ([jfallows](https://github.com/jfallows))
+- Bump org.apache.maven:maven-core from 3.6.0 to 3.8.1 [\#361](https://github.com/aklivity/zilla/pull/361) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Merge consumer group metadata [\#359](https://github.com/aklivity/zilla/pull/359) ([akrambek](https://github.com/akrambek))
+- Support dynamic behavior injection in config builder fluent API [\#358](https://github.com/aklivity/zilla/pull/358) ([jfallows](https://github.com/jfallows))
+- Bump org.apache.maven.plugins:maven-jar-plugin from 3.2.0 to 3.3.0 [\#357](https://github.com/aklivity/zilla/pull/357) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump com.squareup:javapoet from 1.9.0 to 1.13.0 [\#355](https://github.com/aklivity/zilla/pull/355) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Include JDK 20 in build matrix [\#352](https://github.com/aklivity/zilla/pull/352) ([jfallows](https://github.com/jfallows))
+- Ignore CacheFetchIT.shouldFetchFilterSyncWithData [\#351](https://github.com/aklivity/zilla/pull/351) ([attilakreiner](https://github.com/attilakreiner))
+- Metadata for group merged stream [\#349](https://github.com/aklivity/zilla/pull/349) ([akrambek](https://github.com/akrambek))
+- Bump io.fabric8:docker-maven-plugin from 0.39.1 to 0.43.2 [\#348](https://github.com/aklivity/zilla/pull/348) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump org.sonatype.plexus:plexus-sec-dispatcher from 1.3 to 1.4 [\#347](https://github.com/aklivity/zilla/pull/347) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump io.kokuwa.maven:helm-maven-plugin from 6.6.0 to 6.10.0 [\#345](https://github.com/aklivity/zilla/pull/345) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump org.apache.maven.plugin-tools:maven-plugin-annotations from 3.5 to 3.9.0 [\#344](https://github.com/aklivity/zilla/pull/344) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump alpine from 3.18.2 to 3.18.3 in /cloud/docker-image/src/main/docker/release [\#343](https://github.com/aklivity/zilla/pull/343) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump eclipse-temurin from 17-alpine to 20-alpine in /cloud/docker-image/src/main/docker/incubator [\#342](https://github.com/aklivity/zilla/pull/342) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump alpine from 3.18.2 to 3.18.3 in /cloud/docker-image/src/main/docker/incubator [\#341](https://github.com/aklivity/zilla/pull/341) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump eclipse-temurin from 17-alpine to 20-alpine in /cloud/docker-image/src/main/docker/release [\#340](https://github.com/aklivity/zilla/pull/340) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump org.apache.maven.plugins:maven-compiler-plugin from 3.8.0 to 3.11.0 [\#339](https://github.com/aklivity/zilla/pull/339) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump actions/setup-java from 1 to 3 [\#338](https://github.com/aklivity/zilla/pull/338) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump actions/checkout from 2 to 3 [\#337](https://github.com/aklivity/zilla/pull/337) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump actions/cache from 2 to 3 [\#336](https://github.com/aklivity/zilla/pull/336) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump org.moditect:moditect-maven-plugin from 1.0.0.RC1 to 1.0.0.Final [\#335](https://github.com/aklivity/zilla/pull/335) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump com.mycila:license-maven-plugin from 4.1 to 4.2 [\#334](https://github.com/aklivity/zilla/pull/334) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump org.apache.maven.plugins:maven-source-plugin from 3.0.1 to 3.3.0 [\#333](https://github.com/aklivity/zilla/pull/333) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump byteman.version from 4.0.20 to 4.0.21 [\#332](https://github.com/aklivity/zilla/pull/332) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Bump antlr4.version from 4.11.1 to 4.13.0 [\#331](https://github.com/aklivity/zilla/pull/331) ([dependabot[bot]](https://github.com/apps/dependabot))
+- Config builders [\#330](https://github.com/aklivity/zilla/pull/330) ([jfallows](https://github.com/jfallows))
+- Add hashKey support to merged stream [\#329](https://github.com/aklivity/zilla/pull/329) ([bmaidics](https://github.com/bmaidics))
+- Default group session timeout [\#328](https://github.com/aklivity/zilla/pull/328) ([akrambek](https://github.com/akrambek))
+- Include member count as part of group data ex [\#327](https://github.com/aklivity/zilla/pull/327) ([akrambek](https://github.com/akrambek))
+- Request-response mqtt-kafka [\#325](https://github.com/aklivity/zilla/pull/325) ([bmaidics](https://github.com/bmaidics))
+- Generate zilla.yaml from an OpenAPI definition [\#324](https://github.com/aklivity/zilla/pull/324) ([attilakreiner](https://github.com/attilakreiner))
+- Support zilla.yaml config reader and writer [\#323](https://github.com/aklivity/zilla/pull/323) ([jfallows](https://github.com/jfallows))
+- Ignore heartbeat if the handshake request hasn't completed yet [\#322](https://github.com/aklivity/zilla/pull/322) ([akrambek](https://github.com/akrambek))
+- Support local zpmw install [\#321](https://github.com/aklivity/zilla/pull/321) ([jfallows](https://github.com/jfallows))
+- Mqtt kafka sessions [\#318](https://github.com/aklivity/zilla/pull/318) ([bmaidics](https://github.com/bmaidics))
+- Mqtt kafka options [\#304](https://github.com/aklivity/zilla/pull/304) ([bmaidics](https://github.com/bmaidics))
+- Redirect on mqtt reset using server reference [\#303](https://github.com/aklivity/zilla/pull/303) ([bmaidics](https://github.com/bmaidics))
+- Mqtt retained feature [\#290](https://github.com/aklivity/zilla/pull/290) ([bmaidics](https://github.com/bmaidics))
+- Support Kafka consumer groups [\#262](https://github.com/aklivity/zilla/pull/262) ([akrambek](https://github.com/akrambek))
+
+## [0.9.51](https://github.com/aklivity/zilla/tree/0.9.51) (2023-07-27)
+
+[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.50...0.9.51)
**Implemented enhancements:**
diff --git a/README.md b/README.md
index 2e5a62fdfe..a641c56cbf 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ Zilla abstracts Apache Kafka® for web applications, IoT clients and microservic
Zilla has no external dependencies and does not rely on the Kafka Consumer/Producer API or Kafka Connect. Instead, it natively supports the Kafka wire protocol and uses advanced protocol mediation to establish stateless API entry points into Kafka. Zilla also addresses security enforcement, observability and connection offloading on the data path.
-When Zilla is deployed alongside Apache Kafka®, achieving an extensible yet streamlined event-driven architecture becomes much easier.
+When Zilla is deployed alongside Apache Kafka®, achieving an extensible yet streamlined event-driven architecture becomes possible.
## Contents
diff --git a/build/flyweight-maven-plugin/pom.xml b/build/flyweight-maven-plugin/pom.xml
index 2ed41013c9..5b1b1c4b68 100644
--- a/build/flyweight-maven-plugin/pom.xml
+++ b/build/flyweight-maven-plugin/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
build
- 0.9.51
+ 0.9.52
../pom.xml
diff --git a/build/flyweight-maven-plugin/src/main/java/io/aklivity/zilla/build/maven/plugins/flyweight/internal/generate/Varuint32FlyweightGenerator.java b/build/flyweight-maven-plugin/src/main/java/io/aklivity/zilla/build/maven/plugins/flyweight/internal/generate/Varuint32FlyweightGenerator.java
index 3552737de1..b5f7ea0166 100644
--- a/build/flyweight-maven-plugin/src/main/java/io/aklivity/zilla/build/maven/plugins/flyweight/internal/generate/Varuint32FlyweightGenerator.java
+++ b/build/flyweight-maven-plugin/src/main/java/io/aklivity/zilla/build/maven/plugins/flyweight/internal/generate/Varuint32FlyweightGenerator.java
@@ -233,9 +233,9 @@ private MethodSpec setMethod()
.addModifiers(PUBLIC)
.returns(flyweightType.nestedClass("Builder"))
.addParameter(int.class, "value")
- .beginControlFlow("if (value > 0x0FFFFFFF)")
+ .beginControlFlow("if (value < 0)")
.addStatement("throw new $T(String.format($S, value))", IllegalArgumentException.class,
- "Input value %d too long")
+ "Input value %d is negative")
.endControlFlow()
.addStatement("final MutableDirectBuffer buffer = buffer()")
.addStatement("int progress = offset()")
diff --git a/build/pom.xml b/build/pom.xml
index dda4af3ceb..59ebf8517e 100644
--- a/build/pom.xml
+++ b/build/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
zilla
- 0.9.51
+ 0.9.52
../pom.xml
diff --git a/cloud/docker-image/pom.xml b/cloud/docker-image/pom.xml
index 59fc9256c4..ee84364032 100644
--- a/cloud/docker-image/pom.xml
+++ b/cloud/docker-image/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
cloud
- 0.9.51
+ 0.9.52
../pom.xml
@@ -73,6 +73,12 @@
${project.version}
runtime
+
+ ${project.groupId}
+ binding-mqtt
+ ${project.version}
+ runtime
+
${project.groupId}
binding-sse
@@ -115,6 +121,12 @@
${project.version}
runtime
+
+ ${project.groupId}
+ binding-mqtt-kafka
+ ${project.version}
+ runtime
+
${project.groupId}
binding-sse-kafka
@@ -201,14 +213,18 @@
src/main/docker/*/zpmw
+ src/main/docker/*/zilla
src/main/docker/*/zilla.properties
+ src/main/docker/*/.zilla/**
+ src/main/docker/*/zpm.json.template
+ src/main/docker/*/zpm.json
+ src/main/docker/*/.zpm/**
org.codehaus.mojo
exec-maven-plugin
- 3.0.0
${project.groupId}
@@ -233,7 +249,7 @@
io.fabric8
docker-maven-plugin
- 0.39.1
+ 0.43.2
${*}
@@ -270,6 +286,9 @@
io/aklivity/zilla/manager/**
io/aklivity/zilla/incubator/**
org/agrona/**
+ org/apache/apache/**
+ org/apache/maven/maven/**
+ org/apache/maven/maven-parent/**
jakarta/json/**
jakarta/inject/**
org/leadpony/justify/**
@@ -285,6 +304,10 @@
org/slf4j/**
org/antlr/**
org/sonatype/oss/**
+ com/fasterxml/oss-parent/**
+ com/fasterxml/jackson/**
+ org/yaml/snakeyaml/**
+ org/junit/**
@@ -326,31 +349,25 @@
${project.groupId}
- binding-mqtt
- ${project.version}
- runtime
-
-
- ${project.groupId}
- binding-mqtt-kafka
+ command-dump
${project.version}
runtime
${project.groupId}
- command-dump
+ command-tune
${project.version}
runtime
${project.groupId}
- command-tune
+ exporter-otlp
${project.version}
runtime
${project.groupId}
- exporter-otlp
+ command-config
${project.version}
runtime
diff --git a/cloud/docker-image/src/main/docker/.gitignore b/cloud/docker-image/src/main/docker/.gitignore
index e52b514a42..9b5c9c3e77 100644
--- a/cloud/docker-image/src/main/docker/.gitignore
+++ b/cloud/docker-image/src/main/docker/.gitignore
@@ -1,2 +1,5 @@
zpmw
-
+zpm.json
+zpm-lock.json
+zilla.yaml
+tls/
diff --git a/cloud/docker-image/src/main/docker/incubator/Dockerfile b/cloud/docker-image/src/main/docker/incubator/Dockerfile
index 6babc87b1e..78e73cc2dd 100644
--- a/cloud/docker-image/src/main/docker/incubator/Dockerfile
+++ b/cloud/docker-image/src/main/docker/incubator/Dockerfile
@@ -13,12 +13,12 @@
# specific language governing permissions and limitations under the License.
#
-FROM eclipse-temurin:17-alpine AS build
+FROM eclipse-temurin:20-alpine AS build
COPY maven /root/.m2/repository
COPY zpmw zpmw
-COPY zpm.json zpm.json.template
+COPY zpm.json.template zpm.json.template
RUN apk add --no-cache gettext
RUN cat zpm.json.template | env VERSION=${project.version} envsubst > zpm.json
@@ -27,7 +27,7 @@ RUN apk add --no-cache wget
RUN ./zpmw install --debug --exclude-remote-repositories
RUN ./zpmw clean --keep-image
-FROM alpine
+FROM alpine:3.18.3
COPY --from=build /.zpm /opt/zilla/.zpm
COPY --from=build /zilla /opt/zilla/zilla
diff --git a/cloud/docker-image/src/main/docker/incubator/README.md b/cloud/docker-image/src/main/docker/incubator/README.md
new file mode 100644
index 0000000000..5dc79cfcf6
--- /dev/null
+++ b/cloud/docker-image/src/main/docker/incubator/README.md
@@ -0,0 +1,13 @@
+### Running locally
+
+```bash
+cat zpm.json.template | env VERSION=develop-SNAPSHOT envsubst > zpm.json
+```
+
+```bash
+./zpmw install --debug --exclude-remote-repositories
+```
+
+```
+./zilla start --config
+```
diff --git a/cloud/docker-image/src/main/docker/incubator/zpm.json b/cloud/docker-image/src/main/docker/incubator/zpm.json
deleted file mode 100644
index cfef01d5db..0000000000
--- a/cloud/docker-image/src/main/docker/incubator/zpm.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "repositories":
- [
- "https://maven.packages.aklivity.io/",
- "https://repo.maven.apache.org/maven2/"
- ],
-
- "imports":
- [
- "io.aklivity.zilla:runtime:${VERSION}",
- "io.aklivity.zilla:incubator:${VERSION}"
- ],
-
- "dependencies":
- [
- "io.aklivity.zilla:binding-amqp",
- "io.aklivity.zilla:binding-echo",
- "io.aklivity.zilla:binding-fan",
- "io.aklivity.zilla:binding-filesystem",
- "io.aklivity.zilla:binding-http",
- "io.aklivity.zilla:binding-http-filesystem",
- "io.aklivity.zilla:binding-http-kafka",
- "io.aklivity.zilla:binding-grpc",
- "io.aklivity.zilla:binding-grpc-kafka",
- "io.aklivity.zilla:binding-kafka-grpc",
- "io.aklivity.zilla:binding-kafka",
- "io.aklivity.zilla:binding-mqtt",
- "io.aklivity.zilla:binding-mqtt-kafka",
- "io.aklivity.zilla:binding-proxy",
- "io.aklivity.zilla:binding-sse",
- "io.aklivity.zilla:binding-sse-kafka",
- "io.aklivity.zilla:binding-tcp",
- "io.aklivity.zilla:binding-tls",
- "io.aklivity.zilla:binding-ws",
- "io.aklivity.zilla:command",
- "io.aklivity.zilla:command-dump",
- "io.aklivity.zilla:command-metrics",
- "io.aklivity.zilla:command-start",
- "io.aklivity.zilla:command-stop",
- "io.aklivity.zilla:command-tune",
- "io.aklivity.zilla:engine",
- "io.aklivity.zilla:exporter-prometheus",
- "io.aklivity.zilla:exporter-otlp",
- "io.aklivity.zilla:guard-jwt",
- "io.aklivity.zilla:metrics-stream",
- "io.aklivity.zilla:metrics-http",
- "io.aklivity.zilla:metrics-grpc",
- "io.aklivity.zilla:vault-filesystem",
- "org.slf4j:slf4j-simple",
- "org.antlr:antlr4-runtime"
- ]
-}
diff --git a/cloud/docker-image/src/main/docker/incubator/zpm.json.template b/cloud/docker-image/src/main/docker/incubator/zpm.json.template
new file mode 100644
index 0000000000..f50046cb33
--- /dev/null
+++ b/cloud/docker-image/src/main/docker/incubator/zpm.json.template
@@ -0,0 +1,53 @@
+{
+ "repositories":
+ [
+ "https://maven.packages.aklivity.io/",
+ "https://repo.maven.apache.org/maven2/"
+ ],
+
+ "imports":
+ [
+ "io.aklivity.zilla:runtime:${VERSION}",
+ "io.aklivity.zilla:incubator:${VERSION}"
+ ],
+
+ "dependencies":
+ [
+ "io.aklivity.zilla:binding-amqp",
+ "io.aklivity.zilla:binding-echo",
+ "io.aklivity.zilla:binding-fan",
+ "io.aklivity.zilla:binding-filesystem",
+ "io.aklivity.zilla:binding-http",
+ "io.aklivity.zilla:binding-http-filesystem",
+ "io.aklivity.zilla:binding-http-kafka",
+ "io.aklivity.zilla:binding-grpc",
+ "io.aklivity.zilla:binding-grpc-kafka",
+ "io.aklivity.zilla:binding-kafka-grpc",
+ "io.aklivity.zilla:binding-kafka",
+ "io.aklivity.zilla:binding-mqtt",
+ "io.aklivity.zilla:binding-mqtt-kafka",
+ "io.aklivity.zilla:binding-proxy",
+ "io.aklivity.zilla:binding-sse",
+ "io.aklivity.zilla:binding-sse-kafka",
+ "io.aklivity.zilla:binding-tcp",
+ "io.aklivity.zilla:binding-tls",
+ "io.aklivity.zilla:binding-ws",
+ "io.aklivity.zilla:command",
+ "io.aklivity.zilla:command-config",
+ "io.aklivity.zilla:command-dump",
+ "io.aklivity.zilla:command-metrics",
+ "io.aklivity.zilla:command-start",
+ "io.aklivity.zilla:command-stop",
+ "io.aklivity.zilla:command-tune",
+ "io.aklivity.zilla:engine",
+ "io.aklivity.zilla:exporter-prometheus",
+ "io.aklivity.zilla:exporter-otlp",
+ "io.aklivity.zilla:guard-jwt",
+ "io.aklivity.zilla:metrics-stream",
+ "io.aklivity.zilla:metrics-http",
+ "io.aklivity.zilla:metrics-grpc",
+ "io.aklivity.zilla:vault-filesystem",
+ "org.slf4j:slf4j-simple",
+ "org.antlr:antlr4-runtime"
+ ]
+}
diff --git a/cloud/docker-image/src/main/docker/release/Dockerfile b/cloud/docker-image/src/main/docker/release/Dockerfile
index 6babc87b1e..78e73cc2dd 100644
--- a/cloud/docker-image/src/main/docker/release/Dockerfile
+++ b/cloud/docker-image/src/main/docker/release/Dockerfile
@@ -13,12 +13,12 @@
# specific language governing permissions and limitations under the License.
#
-FROM eclipse-temurin:17-alpine AS build
+FROM eclipse-temurin:20-alpine AS build
COPY maven /root/.m2/repository
COPY zpmw zpmw
-COPY zpm.json zpm.json.template
+COPY zpm.json.template zpm.json.template
RUN apk add --no-cache gettext
RUN cat zpm.json.template | env VERSION=${project.version} envsubst > zpm.json
@@ -27,7 +27,7 @@ RUN apk add --no-cache wget
RUN ./zpmw install --debug --exclude-remote-repositories
RUN ./zpmw clean --keep-image
-FROM alpine
+FROM alpine:3.18.3
COPY --from=build /.zpm /opt/zilla/.zpm
COPY --from=build /zilla /opt/zilla/zilla
diff --git a/cloud/docker-image/src/main/docker/release/zpm.json b/cloud/docker-image/src/main/docker/release/zpm.json
deleted file mode 100644
index 0b2bfaccbd..0000000000
--- a/cloud/docker-image/src/main/docker/release/zpm.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "repositories":
- [
- "https://maven.packages.aklivity.io/",
- "https://repo.maven.apache.org/maven2/"
- ],
-
- "imports":
- [
- "io.aklivity.zilla:runtime:${VERSION}"
- ],
-
- "dependencies":
- [
- "io.aklivity.zilla:binding-echo",
- "io.aklivity.zilla:binding-fan",
- "io.aklivity.zilla:binding-filesystem",
- "io.aklivity.zilla:binding-http",
- "io.aklivity.zilla:binding-http-filesystem",
- "io.aklivity.zilla:binding-http-kafka",
- "io.aklivity.zilla:binding-grpc",
- "io.aklivity.zilla:binding-grpc-kafka",
- "io.aklivity.zilla:binding-kafka-grpc",
- "io.aklivity.zilla:binding-kafka",
- "io.aklivity.zilla:binding-proxy",
- "io.aklivity.zilla:binding-sse",
- "io.aklivity.zilla:binding-sse-kafka",
- "io.aklivity.zilla:binding-tcp",
- "io.aklivity.zilla:binding-tls",
- "io.aklivity.zilla:binding-ws",
- "io.aklivity.zilla:command",
- "io.aklivity.zilla:command-metrics",
- "io.aklivity.zilla:command-start",
- "io.aklivity.zilla:command-stop",
- "io.aklivity.zilla:engine",
- "io.aklivity.zilla:exporter-prometheus",
- "io.aklivity.zilla:guard-jwt",
- "io.aklivity.zilla:metrics-stream",
- "io.aklivity.zilla:metrics-http",
- "io.aklivity.zilla:metrics-grpc",
- "io.aklivity.zilla:vault-filesystem",
- "org.slf4j:slf4j-simple",
- "org.antlr:antlr4-runtime"
- ]
-}
diff --git a/cloud/docker-image/src/main/docker/release/zpm.json.template b/cloud/docker-image/src/main/docker/release/zpm.json.template
new file mode 100644
index 0000000000..8f01f75f91
--- /dev/null
+++ b/cloud/docker-image/src/main/docker/release/zpm.json.template
@@ -0,0 +1,47 @@
+{
+ "repositories":
+ [
+ "https://maven.packages.aklivity.io/",
+ "https://repo.maven.apache.org/maven2/"
+ ],
+
+ "imports":
+ [
+ "io.aklivity.zilla:runtime:${VERSION}"
+ ],
+
+ "dependencies":
+ [
+ "io.aklivity.zilla:binding-echo",
+ "io.aklivity.zilla:binding-fan",
+ "io.aklivity.zilla:binding-filesystem",
+ "io.aklivity.zilla:binding-http",
+ "io.aklivity.zilla:binding-http-filesystem",
+ "io.aklivity.zilla:binding-http-kafka",
+ "io.aklivity.zilla:binding-grpc",
+ "io.aklivity.zilla:binding-grpc-kafka",
+ "io.aklivity.zilla:binding-kafka-grpc",
+ "io.aklivity.zilla:binding-kafka",
+ "io.aklivity.zilla:binding-mqtt",
+ "io.aklivity.zilla:binding-mqtt-kafka",
+ "io.aklivity.zilla:binding-proxy",
+ "io.aklivity.zilla:binding-sse",
+ "io.aklivity.zilla:binding-sse-kafka",
+ "io.aklivity.zilla:binding-tcp",
+ "io.aklivity.zilla:binding-tls",
+ "io.aklivity.zilla:binding-ws",
+ "io.aklivity.zilla:command",
+ "io.aklivity.zilla:command-metrics",
+ "io.aklivity.zilla:command-start",
+ "io.aklivity.zilla:command-stop",
+ "io.aklivity.zilla:engine",
+ "io.aklivity.zilla:exporter-prometheus",
+ "io.aklivity.zilla:guard-jwt",
+ "io.aklivity.zilla:metrics-stream",
+ "io.aklivity.zilla:metrics-http",
+ "io.aklivity.zilla:metrics-grpc",
+ "io.aklivity.zilla:vault-filesystem",
+ "org.slf4j:slf4j-simple",
+ "org.antlr:antlr4-runtime"
+ ]
+}
diff --git a/cloud/helm-chart/pom.xml b/cloud/helm-chart/pom.xml
index 5a786bb959..e565712d38 100644
--- a/cloud/helm-chart/pom.xml
+++ b/cloud/helm-chart/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
cloud
- 0.9.51
+ 0.9.52
../pom.xml
@@ -51,7 +51,7 @@
io.kokuwa.maven
helm-maven-plugin
- 6.6.0
+ 6.10.0
true
src/main/helm
diff --git a/cloud/pom.xml b/cloud/pom.xml
index 450069bb4c..a704fed85b 100644
--- a/cloud/pom.xml
+++ b/cloud/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
zilla
- 0.9.51
+ 0.9.52
../pom.xml
diff --git a/conf/pom.xml b/conf/pom.xml
index 31ee0a4497..2f3f35627d 100644
--- a/conf/pom.xml
+++ b/conf/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
zilla
- 0.9.51
+ 0.9.52
../pom.xml
diff --git a/incubator/binding-amqp.spec/pom.xml b/incubator/binding-amqp.spec/pom.xml
index 164d288a09..a84af1ea87 100644
--- a/incubator/binding-amqp.spec/pom.xml
+++ b/incubator/binding-amqp.spec/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
incubator
- 0.9.51
+ 0.9.52
../pom.xml
diff --git a/incubator/binding-amqp/pom.xml b/incubator/binding-amqp/pom.xml
index 1afd593469..2a2ef7cc05 100644
--- a/incubator/binding-amqp/pom.xml
+++ b/incubator/binding-amqp/pom.xml
@@ -8,7 +8,7 @@
io.aklivity.zilla
incubator
- 0.9.51
+ 0.9.52
../pom.xml
diff --git a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfig.java b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/config/AmqpConditionConfig.java
similarity index 94%
rename from incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfig.java
rename to incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/config/AmqpConditionConfig.java
index 22ed7f7782..4571980517 100644
--- a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfig.java
+++ b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/config/AmqpConditionConfig.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
-package io.aklivity.zilla.runtime.binding.amqp.internal.config;
+package io.aklivity.zilla.runtime.binding.amqp.config;
import io.aklivity.zilla.runtime.binding.amqp.internal.types.AmqpCapabilities;
import io.aklivity.zilla.runtime.engine.config.ConditionConfig;
diff --git a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/AmqpConfiguration.java b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/AmqpConfiguration.java
index dc8cb66592..47a5e38fb0 100644
--- a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/AmqpConfiguration.java
+++ b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/AmqpConfiguration.java
@@ -46,7 +46,7 @@ public class AmqpConfiguration extends Configuration
AMQP_INITIAL_DEVIVERY_COUNT = config.property("initial.delivery.count", 0L);
AMQP_CLOSE_EXCHANGE_TIMEOUT = config.property("close.exchange.timeout", 10000);
AMQP_INCOMING_LOCALES = config.property(String[].class, "incoming.locales",
- s -> s.split("\\s+"), c -> AMQP_INCOMING_LOCALES_DEFAULT);
+ s -> s.split("\\s+"), AMQP_INCOMING_LOCALES_DEFAULT);
AMQP_CONFIG = config;
}
diff --git a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapter.java b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapter.java
index f497ee70ee..ffb70b35e3 100644
--- a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapter.java
+++ b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapter.java
@@ -20,6 +20,7 @@
import jakarta.json.JsonObjectBuilder;
import jakarta.json.bind.adapter.JsonbAdapter;
+import io.aklivity.zilla.runtime.binding.amqp.config.AmqpConditionConfig;
import io.aklivity.zilla.runtime.binding.amqp.internal.AmqpBinding;
import io.aklivity.zilla.runtime.binding.amqp.internal.types.AmqpCapabilities;
import io.aklivity.zilla.runtime.engine.config.ConditionConfig;
diff --git a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionMatcher.java b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionMatcher.java
index 46253cd837..8bc02d652c 100644
--- a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionMatcher.java
+++ b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionMatcher.java
@@ -18,6 +18,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import io.aklivity.zilla.runtime.binding.amqp.config.AmqpConditionConfig;
import io.aklivity.zilla.runtime.binding.amqp.internal.types.AmqpCapabilities;
public final class AmqpConditionMatcher
diff --git a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpRouteConfig.java b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpRouteConfig.java
index b64396f68c..c2041c48e7 100644
--- a/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpRouteConfig.java
+++ b/incubator/binding-amqp/src/main/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpRouteConfig.java
@@ -20,11 +20,11 @@
import java.util.List;
import java.util.function.LongPredicate;
+import io.aklivity.zilla.runtime.binding.amqp.config.AmqpConditionConfig;
import io.aklivity.zilla.runtime.binding.amqp.internal.types.AmqpCapabilities;
-import io.aklivity.zilla.runtime.engine.config.OptionsConfig;
import io.aklivity.zilla.runtime.engine.config.RouteConfig;
-public final class AmqpRouteConfig extends OptionsConfig
+public final class AmqpRouteConfig
{
public final long id;
diff --git a/incubator/binding-amqp/src/main/moditect/module-info.java b/incubator/binding-amqp/src/main/moditect/module-info.java
index a4f7f980cb..b89cf580bf 100644
--- a/incubator/binding-amqp/src/main/moditect/module-info.java
+++ b/incubator/binding-amqp/src/main/moditect/module-info.java
@@ -17,6 +17,8 @@
{
requires io.aklivity.zilla.runtime.engine;
+ exports io.aklivity.zilla.runtime.binding.amqp.config;
+
provides io.aklivity.zilla.runtime.engine.binding.BindingFactorySpi
with io.aklivity.zilla.runtime.binding.amqp.internal.AmqpBindingFactorySpi;
diff --git a/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapterTest.java b/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapterTest.java
index 60884ecbb2..90b509f550 100644
--- a/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapterTest.java
+++ b/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/config/AmqpConditionConfigAdapterTest.java
@@ -29,6 +29,8 @@
import org.junit.Before;
import org.junit.Test;
+import io.aklivity.zilla.runtime.binding.amqp.config.AmqpConditionConfig;
+
public class AmqpConditionConfigAdapterTest
{
private Jsonb jsonb;
diff --git a/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AdvisoryIT.java b/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AdvisoryIT.java
index f67fc69e9f..c38b02dd34 100644
--- a/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AdvisoryIT.java
+++ b/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AdvisoryIT.java
@@ -42,9 +42,7 @@ public class AdvisoryIT
private final EngineRule engine = new EngineRule()
.directory("target/zilla-itests")
- .commandBufferCapacity(2048)
- .responseBufferCapacity(2048)
- .counterValuesBufferCapacity(8192)
+ .countersBufferCapacity(8192)
.configure(AMQP_CONTAINER_ID, "server")
.configure(ENGINE_DRAIN_ON_CLOSE, false)
.configure(AMQP_CLOSE_EXCHANGE_TIMEOUT, 500)
diff --git a/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AmqpServerIT.java b/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AmqpServerIT.java
index 75eb20bfae..2f3e2218b8 100644
--- a/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AmqpServerIT.java
+++ b/incubator/binding-amqp/src/test/java/io/aklivity/zilla/runtime/binding/amqp/internal/stream/server/AmqpServerIT.java
@@ -49,9 +49,7 @@ public class AmqpServerIT
private final EngineRule engine = new EngineRule()
.directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
+ .countersBufferCapacity(8192)
.configure(AMQP_CONTAINER_ID, "server")
.configure(ENGINE_DRAIN_ON_CLOSE, false)
.configure(AMQP_CLOSE_EXCHANGE_TIMEOUT, 500)
diff --git a/incubator/binding-mqtt-kafka.spec/NOTICE b/incubator/binding-mqtt-kafka.spec/NOTICE
deleted file mode 100644
index 9377db206e..0000000000
--- a/incubator/binding-mqtt-kafka.spec/NOTICE
+++ /dev/null
@@ -1,21 +0,0 @@
-Licensed under the Aklivity Community License (the "License"); you may not use
-this file except in compliance with the License. You may obtain a copy of the
-License at
-
- https://www.aklivity.io/aklivity-community-license/
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-WARRANTIES OF ANY KIND, either express or implied. See the License for the
-specific language governing permissions and limitations under the License.
-
-This project includes:
- agrona under The Apache License, Version 2.0
- ICU4J under Unicode/ICU License
- Jakarta JSON Processing API under Eclipse Public License 2.0 or GNU General Public License, version 2 with the GNU Classpath Exception
- org.leadpony.justify under The Apache Software License, Version 2.0
- zilla::incubator::binding-mqtt.spec under The Apache Software License, Version 2.0
- zilla::specs::binding-kafka.spec under The Apache Software License, Version 2.0
- zilla::specs::binding-proxy.spec under The Apache Software License, Version 2.0
- zilla::specs::engine.spec under The Apache Software License, Version 2.0
-
diff --git a/incubator/binding-mqtt-kafka.spec/pom.xml b/incubator/binding-mqtt-kafka.spec/pom.xml
deleted file mode 100644
index ba8f7b56f6..0000000000
--- a/incubator/binding-mqtt-kafka.spec/pom.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
-
- 4.0.0
-
- io.aklivity.zilla
- incubator
- 0.9.51
- ../pom.xml
-
-
- binding-mqtt-kafka.spec
- zilla::incubator::binding-mqtt-kafka.spec
-
-
-
- Aklivity Community License Agreement
- https://www.aklivity.io/aklivity-community-license/
- repo
-
-
-
-
- 11
- 11
- 1.00
- 0
-
-
-
-
- org.kaazing
- k3po.lang
- provided
-
-
- ${project.groupId}
- engine.spec
- ${project.version}
-
-
- ${project.groupId}
- binding-mqtt.spec
- ${project.version}
-
-
- ${project.groupId}
- binding-kafka.spec
- ${project.version}
-
-
- junit
- junit
- test
-
-
- org.kaazing
- k3po.junit
- test
-
-
- org.hamcrest
- hamcrest-library
- test
-
-
-
-
-
-
- src/main/resources
-
-
- src/main/scripts
-
-
-
-
-
- org.jasig.maven
- maven-notice-plugin
-
-
- ${project.groupId}
- flyweight-maven-plugin
- ${project.version}
-
- core mqtt kafka
- io.aklivity.zilla.specs.binding.mqtt.kafka.internal.types
-
-
-
-
- validate
- generate
-
-
-
-
-
- com.mycila
- license-maven-plugin
-
-
- maven-checkstyle-plugin
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- org.moditect
- moditect-maven-plugin
-
-
- org.kaazing
- k3po-maven-plugin
-
-
- ${project.groupId}
- engine
- ${project.version}
- test-jar
-
-
- ${project.groupId}
- engine
- ${project.version}
-
-
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
- io/aklivity/zilla/specs/binding/mqtt/kafka/internal/types/**/*.class
-
-
-
- BUNDLE
-
-
- INSTRUCTION
- COVEREDRATIO
- ${jacoco.coverage.ratio}
-
-
- CLASS
- MISSEDCOUNT
- ${jacoco.missed.count}
-
-
-
-
-
-
-
-
-
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/schema/mqtt.kafka.schema.patch.json b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/schema/mqtt.kafka.schema.patch.json
deleted file mode 100644
index e596826c38..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/schema/mqtt.kafka.schema.patch.json
+++ /dev/null
@@ -1,50 +0,0 @@
-[
- {
- "op": "add",
- "path": "/$defs/binding/properties/type/enum/-",
- "value": "mqtt-kafka"
- },
- {
- "op": "add",
- "path": "/$defs/binding/allOf/-",
- "value":
- {
- "if":
- {
- "properties":
- {
- "type":
- {
- "const": "mqtt-kafka"
- }
- }
- },
- "then":
- {
- "properties":
- {
- "type":
- {
- "const": "mqtt-kafka"
- },
- "kind":
- {
- "enum": [ "proxy" ]
- },
- "vault": false,
- "options": false,
- "routes": false
- },
- "anyOf":
- [
- {
- "required":
- [
- "exit"
- ]
- }
- ]
- }
- }
- }
-]
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.abort/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.abort/client.rpt
deleted file mode 100644
index 03d42cb8c5..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.abort/client.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.abort/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.abort/server.rpt
deleted file mode 100644
index 4e8812f240..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.abort/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.reset/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.reset/client.rpt
deleted file mode 100644
index dbfe5cc1e1..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.reset/client.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.reset/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.reset/server.rpt
deleted file mode 100644
index 43a6bb2fe5..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.client.sent.reset/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.empty.message/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.empty.message/client.rpt
deleted file mode 100644
index 6bb9ec3c76..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.empty.message/client.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .build()
- .build()}
-
-write zilla:data.empty
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.empty.message/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.empty.message/server.rpt
deleted file mode 100644
index 8aedc49335..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.empty.message/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .build()
- .build()}
-
-read zilla:data.empty
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.multiple.messages/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.multiple.messages/client.rpt
deleted file mode 100644
index 8a506a658d..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.multiple.messages/client.rpt
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message1"
-write flush
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message2"
-write flush
-
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message3"
-write flush
-
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.multiple.messages/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.multiple.messages/server.rpt
deleted file mode 100644
index 75a80dc739..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.multiple.messages/server.rpt
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message1"
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message2"
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message3"
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.one.message/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.one.message/client.rpt
deleted file mode 100644
index b9d3d28ab1..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.one.message/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .headerInt("zilla:timeout-ms", 15000)
- .header("zilla:content-type", "message")
- .header("zilla:format", "TEXT")
- .header("zilla:reply-to", "sensor/one")
- .header("zilla:correlation-id", "info")
- .build()
- .build()}
-
-write "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.one.message/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.one.message/server.rpt
deleted file mode 100644
index e598440227..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.one.message/server.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .headerInt("zilla:timeout-ms", 15000)
- .header("zilla:content-type", "message")
- .header("zilla:format", "TEXT")
- .header("zilla:reply-to", "sensor/one")
- .header("zilla:correlation-id", "info")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.abort/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.abort/client.rpt
deleted file mode 100644
index 85e541a7b4..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.abort/client.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.abort/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.abort/server.rpt
deleted file mode 100644
index d1655b8bb3..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.abort/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.data/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.data/client.rpt
deleted file mode 100644
index 28f6ca1b52..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.data/client.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.data/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.data/server.rpt
deleted file mode 100644
index 8ba85b97fb..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.data/server.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-write zilla:data.empty
-
-write aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.flush/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.flush/client.rpt
deleted file mode 100644
index d5561c9f80..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.flush/client.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.flush/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.flush/server.rpt
deleted file mode 100644
index 6b232483f0..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.flush/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.reset/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.reset/client.rpt
deleted file mode 100644
index d8050b11e2..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.reset/client.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.reset/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.reset/server.rpt
deleted file mode 100644
index ed35626006..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.server.sent.reset/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.distinct/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.distinct/client.rpt
deleted file mode 100644
index a9a56b7bed..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.distinct/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensors/1")
- .header("zilla:topic", "sensors")
- .header("zilla:topic", "1")
- .header("zilla:local", "755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .header("zilla:format", "TEXT")
- .header("row1", "1")
- .header("row2", "2")
- .build()
- .build()}
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.distinct/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.distinct/server.rpt
deleted file mode 100644
index f822453ebe..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.distinct/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensors/1")
- .header("zilla:topic", "sensors")
- .header("zilla:topic", "1")
- .header("zilla:local", "755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .header("zilla:format", "TEXT")
- .header("row1", "1")
- .header("row2", "2")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.repeated/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.repeated/client.rpt
deleted file mode 100644
index 900025fe31..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.repeated/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensors/1")
- .header("zilla:topic", "sensors")
- .header("zilla:topic", "1")
- .header("zilla:local", "755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .header("zilla:format", "TEXT")
- .header("row1", "1")
- .header("row1", "2")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.repeated/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.repeated/server.rpt
deleted file mode 100644
index 3a5c073c81..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.properties.repeated/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensors/1")
- .header("zilla:topic", "sensors")
- .header("zilla:topic", "1")
- .header("zilla:local", "755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .header("zilla:format", "TEXT")
- .header("row1", "1")
- .header("row1", "2")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.property/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.property/client.rpt
deleted file mode 100644
index 1b33c42dc8..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.property/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensors/1")
- .header("zilla:topic", "sensors")
- .header("zilla:topic", "1")
- .header("zilla:local", "755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .header("zilla:format", "TEXT")
- .header("row", "1")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.property/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.property/server.rpt
deleted file mode 100644
index 7dccd60e84..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/publish.with.user.property/server.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensors/1")
- .header("zilla:topic", "sensors")
- .header("zilla:topic", "1")
- .header("zilla:local", "755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .header("zilla:format", "TEXT")
- .header("row", "1")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.abort/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.abort/client.rpt
deleted file mode 100644
index b0f9ea4a60..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.abort/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.abort/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.abort/server.rpt
deleted file mode 100644
index 53ea0af8be..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.abort/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.data/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.data/client.rpt
deleted file mode 100644
index 554ae22210..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.data/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.data/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.data/server.rpt
deleted file mode 100644
index fba059b653..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.data/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.reset/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.reset/client.rpt
deleted file mode 100644
index 0e6fba6d82..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.reset/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.reset/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.reset/server.rpt
deleted file mode 100644
index 57b89768d0..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.client.sent.reset/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt
deleted file mode 100644
index c952290dd9..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .headerInt("zilla:timeout-ms", 15000)
- .header("zilla:content-type", "message")
- .header("zilla:format", "TEXT")
- .header("zilla:reply-to", "sensor/one")
- .header("zilla:correlation-id", "info")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt
deleted file mode 100644
index 710ae2fb00..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .timestamp(kafka:timestamp())
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .headerInt("zilla:timeout-ms", 15000)
- .header("zilla:content-type", "message")
- .header("zilla:format", "TEXT")
- .header("zilla:reply-to", "sensor/one")
- .header("zilla:correlation-id", "info")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.user.properties.unaltered/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.user.properties.unaltered/client.rpt
deleted file mode 100644
index 4eb92d03a2..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.user.properties.unaltered/client.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .header("row1", "1")
- .header("row2", "2")
- .header("row2", "3")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.user.properties.unaltered/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.user.properties.unaltered/server.rpt
deleted file mode 100644
index e9bede539e..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message.user.properties.unaltered/server.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .timestamp(kafka:timestamp())
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .header("row1", "1")
- .header("row2", "2")
- .header("row2", "3")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message/client.rpt
deleted file mode 100644
index b865d030ac..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message/client.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message/server.rpt
deleted file mode 100644
index ec9540c790..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.one.message/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .timestamp(kafka:timestamp())
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.publish.no.local/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.publish.no.local/client.rpt
deleted file mode 100644
index d1e22a07b8..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.publish.no.local/client.rpt
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .headerNot("zilla:local", "client")
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-connected
-
-write notify FIRST_CONNECTED
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client2")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-read "message2"
-
-
-connect await FIRST_CONNECTED
- "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.publish.no.local/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.publish.no.local/server.rpt
deleted file mode 100644
index 21bce7ec08..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.publish.no.local/server.rpt
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .headerNot("zilla:local", "client")
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .timestamp(kafka:timestamp())
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client2")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message2"
-write flush
-
-accepted
-
-read zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("PRODUCE_ONLY")
- .topic("mqtt_messages")
- .partition(-1, -2)
- .ackMode("LEADER_ONLY")
- .build()
- .build()}
-
-
-connected
-
-
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .deferred(0)
- .partition(-1, -1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.overlapping.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.overlapping.wildcard/client.rpt
deleted file mode 100644
index 4751574dcd..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.overlapping.wildcard/client.rpt
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skipMany()
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .sequence(1)
- .build()
- .build()
- .build()
- .build()}
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .filters(3)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one/1")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:topic", "1")
- .header("zilla:local", "client2")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message"
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.overlapping.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.overlapping.wildcard/server.rpt
deleted file mode 100644
index a3bbe5e066..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.overlapping.wildcard/server.rpt
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skipMany()
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .sequence(1)
- .build()
- .build()
- .build()
- .build()}
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .timestamp(kafka:timestamp())
- .filters(3)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one/1")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:topic", "1")
- .header("zilla:local", "client2")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.wildcard/client.rpt
deleted file mode 100644
index 2280a88751..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.wildcard/client.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-connected
-
-
-read zilla:data.ext ${kafka:matchDataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-read "message"
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.wildcard/server.rpt
deleted file mode 100644
index 4b0ddeaf67..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.receive.message.wildcard/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-
-write zilla:data.ext ${kafka:dataEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .timestamp(kafka:timestamp())
- .filters(1)
- .partition(0, 1, 2)
- .progress(0, 2)
- .progress(1, 1)
- .key("sensor/one")
- .header("zilla:topic", "sensor")
- .header("zilla:topic", "one")
- .header("zilla:local", "client")
- .header("zilla:format", "TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.abort/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.abort/client.rpt
deleted file mode 100644
index b7c2947199..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.abort/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.abort/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.abort/server.rpt
deleted file mode 100644
index f750ba6e33..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.abort/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.flush/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.flush/client.rpt
deleted file mode 100644
index 7e23945e68..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.flush/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.flush/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.flush/server.rpt
deleted file mode 100644
index 769380e04a..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.flush/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.reset/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.reset/client.rpt
deleted file mode 100644
index aa1cceafcb..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.reset/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.reset/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.reset/server.rpt
deleted file mode 100644
index 7a0609532c..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.server.sent.reset/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.multi.level.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.multi.level.wildcard/client.rpt
deleted file mode 100644
index eb9e9456b6..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.multi.level.wildcard/client.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.multi.level.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.multi.level.wildcard/server.rpt
deleted file mode 100644
index 3f731f0f29..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.multi.level.wildcard/server.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt
deleted file mode 100644
index 5678d76dbd..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .sequence(1)
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt
deleted file mode 100644
index 2b497d8eb0..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .sequence(1)
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.level.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.level.wildcard/client.rpt
deleted file mode 100644
index 837a263e35..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.level.wildcard/client.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.level.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.level.wildcard/server.rpt
deleted file mode 100644
index 79017a9ae0..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.single.level.wildcard/server.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.two.single.level.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.two.single.level.wildcard/client.rpt
deleted file mode 100644
index cfd88f651b..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.two.single.level.wildcard/client.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skip(1)
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.two.single.level.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.two.single.level.wildcard/server.rpt
deleted file mode 100644
index 1861b76c4b..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filter.two.single.level.wildcard/server.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skip(1)
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.both.exact/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.both.exact/client.rpt
deleted file mode 100644
index 71623130fd..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.both.exact/client.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.both.exact/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.both.exact/server.rpt
deleted file mode 100644
index ee7855019f..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.both.exact/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-
-connected
-
-
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt
deleted file mode 100644
index ce061a5158..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("device")
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt
deleted file mode 100644
index a59d16c0ff..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("device")
- .skipMany()
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.both.exact/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.both.exact/client.rpt
deleted file mode 100644
index 961aa5b7da..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.both.exact/client.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-
-connected
-
-write advise zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .build()
- .build()}
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.both.exact/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.both.exact/server.rpt
deleted file mode 100644
index a09ec9ad48..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.both.exact/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .build()
- .build()}
-
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt
deleted file mode 100644
index 39be054da7..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("device")
- .skipMany()
- .build()
- .build()
- .build()
- .build()}
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt
deleted file mode 100644
index b9347e2956..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("device")
- .skipMany()
- .build()
- .build()
- .build()
- .build()}
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.overlapping.wildcards/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.overlapping.wildcards/client.rpt
deleted file mode 100644
index 7d46cfe584..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.overlapping.wildcards/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skipMany()
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .sequence("1")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.overlapping.wildcards/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.overlapping.wildcards/server.rpt
deleted file mode 100644
index 34778e844f..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/subscribe.topic.filters.overlapping.wildcards/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .skipMany()
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .skip(1)
- .sequence("1")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.after.subscribe/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.after.subscribe/client.rpt
deleted file mode 100644
index 3f1848188a..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.after.subscribe/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write close
-read closed
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.after.subscribe/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.after.subscribe/server.rpt
deleted file mode 100644
index d5ff77cc79..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.after.subscribe/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read closed
-write close
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.topic.filter.single/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.topic.filter.single/client.rpt
deleted file mode 100644
index d5c1573ee4..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.topic.filter.single/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${kafka:beginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .build()
- .build()}
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.topic.filter.single/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.topic.filter.single/server.rpt
deleted file mode 100644
index e9a955fe0b..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka/unsubscribe.topic.filter.single/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/kafka0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${kafka:matchBeginEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .topic("mqtt_messages")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("one")
- .build()
- .build()
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .evaluation("EAGER")
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${kafka:flushEx()
- .typeId(zilla:id("kafka"))
- .merged()
- .capabilities("FETCH_ONLY")
- .filter()
- .headers("zilla:topic")
- .sequence("sensor")
- .sequence("two")
- .build()
- .build()
- .build()
- .build()}
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.empty.message/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.empty.message/client.rpt
deleted file mode 100644
index aefebf981a..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.empty.message/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-write zilla:data.empty
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.empty.message/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.empty.message/server.rpt
deleted file mode 100644
index 2ab73c22f8..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.empty.message/server.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.multiple.messages/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.multiple.messages/client.rpt
deleted file mode 100644
index f6814f1033..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.multiple.messages/client.rpt
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-write "message1"
-write flush
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-write "message2"
-write flush
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-write "message3"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.multiple.messages/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.multiple.messages/server.rpt
deleted file mode 100644
index bb7207c9b7..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.multiple.messages/server.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-read "message1"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-read "message2"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-read "message3"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.one.message/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.one.message/client.rpt
deleted file mode 100644
index 32e92654da..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.one.message/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-write "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.one.message/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.one.message/server.rpt
deleted file mode 100644
index 44b70e87bd..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.one.message/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.abort/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.abort/server.rpt
deleted file mode 100644
index 47cd3c75b2..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.abort/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.data/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.data/server.rpt
deleted file mode 100644
index 3144b8ec89..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.data/server.rpt
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.flush/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.flush/server.rpt
deleted file mode 100644
index d1f2b4a10b..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.flush/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.reset/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.reset/server.rpt
deleted file mode 100644
index 971687400a..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.server.sent.reset/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.distinct/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.distinct/client.rpt
deleted file mode 100644
index a822ca4c87..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.distinct/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("sensors/1")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensors/1")
- .format("TEXT")
- .userProperty("row1", "1")
- .userProperty("row2", "2")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.distinct/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.distinct/server.rpt
deleted file mode 100644
index bdbd6d99bd..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.distinct/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("sensors/1")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensors/1")
- .format("TEXT")
- .userProperty("row1", "1")
- .userProperty("row2", "2")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.repeated/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.repeated/client.rpt
deleted file mode 100644
index 4d2aee3178..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.repeated/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("sensors/1")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensors/1")
- .format("TEXT")
- .userProperty("row1", "1")
- .userProperty("row1", "2")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.repeated/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.repeated/server.rpt
deleted file mode 100644
index f433deb0ea..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.properties.repeated/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("sensors/1")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensors/1")
- .format("TEXT")
- .userProperty("row1", "1")
- .userProperty("row1", "2")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.property/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.property/client.rpt
deleted file mode 100644
index 7d068f7ed9..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.property/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("sensors/1")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensors/1")
- .format("TEXT")
- .userProperty("row", "1")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.property/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.property/server.rpt
deleted file mode 100644
index d6f0e84f86..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/publish.with.user.property/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("sensors/1")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensors/1")
- .format("TEXT")
- .userProperty("row", "1")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
-
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.abort/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.abort/client.rpt
deleted file mode 100644
index d5055b5edf..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.abort/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.abort/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.abort/server.rpt
deleted file mode 100644
index c9203bad55..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.abort/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.data/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.data/client.rpt
deleted file mode 100644
index 982a36477f..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.data/client.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write abort
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.data/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.data/server.rpt
deleted file mode 100644
index 51f8ee0ecb..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.data/server.rpt
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-read aborted
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.reset/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.reset/client.rpt
deleted file mode 100644
index 229c326ab4..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.reset/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-read abort
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.reset/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.reset/server.rpt
deleted file mode 100644
index 0579bfee55..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.client.sent.reset/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-write aborted
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.one.message/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.one.message/client.rpt
deleted file mode 100644
index 44776a4901..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.one.message/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-read "message"
\ No newline at end of file
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.one.message/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.one.message/server.rpt
deleted file mode 100644
index 7663c47042..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.one.message/server.rpt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.publish.no.local/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.publish.no.local/client.rpt
deleted file mode 100644
index 7255e543f2..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.publish.no.local/client.rpt
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "NO_LOCAL", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-write notify SUBSCRIBED
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-read "message2"
-
-
-connect await SUBSCRIBED
- "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.publish.no.local/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.publish.no.local/server.rpt
deleted file mode 100644
index 05531897d5..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.publish.no.local/server.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "NO_LOCAL", "SEND_RETAINED")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-write "message2"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.receive.message.overlapping.wildcard/client.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.receive.message.overlapping.wildcard/client.rpt
deleted file mode 100644
index 85e4b4534f..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.receive.message.overlapping.wildcard/client.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-connect "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/#", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/+/#", 1)
- .filter("sensor/+/1", 2)
- .build()
- .build()}
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one/1")
- .subscriptionId(1)
- .subscriptionId(2)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.receive.message.overlapping.wildcard/server.rpt b/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.receive.message.overlapping.wildcard/server.rpt
deleted file mode 100644
index 0cca50e6eb..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt/subscribe.receive.message.overlapping.wildcard/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc
-#
-# Licensed under the Aklivity Community License (the "License"); you may not use
-# this file except in compliance with the License. You may obtain a copy of the
-# License at
-#
-# https://www.aklivity.io/aklivity-community-license/
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-accept "zilla://streams/mqtt0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/#", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/+/#", 1)
- .filter("sensor/+/1", 2)
- .build()
- .build()}
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one/1")
- .subscriptionId(1)
- .subscriptionId(2)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/config/SchemaTest.java b/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/config/SchemaTest.java
deleted file mode 100644
index 70e6503724..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/config/SchemaTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.kafka.config;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.nullValue;
-
-import jakarta.json.JsonObject;
-
-import org.junit.Rule;
-import org.junit.Test;
-
-import io.aklivity.zilla.specs.engine.config.ConfigSchemaRule;
-
-public class SchemaTest
-{
- @Rule
- public final ConfigSchemaRule schema = new ConfigSchemaRule()
- .schemaPatch("io/aklivity/zilla/specs/binding/mqtt/kafka/schema/mqtt.kafka.schema.patch.json")
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/kafka/config");
-
-
- @Test
- public void shouldValidateProxy()
- {
- JsonObject config = schema.validate("proxy.yaml");
-
- assertThat(config, not(nullValue()));
- }
-}
diff --git a/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/KafkaIT.java b/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/KafkaIT.java
deleted file mode 100644
index ea3d9100b5..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/KafkaIT.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.kafka.streams;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class KafkaIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("kafka", "io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${kafka}/publish.client.sent.abort/client",
- "${kafka}/publish.client.sent.abort/server"})
- public void shouldPublishReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.client.sent.reset/client",
- "${kafka}/publish.client.sent.reset/server"})
- public void shouldPublishReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.server.sent.abort/client",
- "${kafka}/publish.server.sent.abort/server"})
- public void shouldPublishReceiveServerSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.server.sent.flush/client",
- "${kafka}/publish.server.sent.flush/server"})
- public void shouldPublishReceiveServerSentFlush() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.server.sent.reset/client",
- "${kafka}/publish.server.sent.reset/server"})
- public void shouldPublishReceiveServerSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.server.sent.data/client",
- "${kafka}/publish.server.sent.data/server"})
- public void shouldPublishAbortWhenServerSentData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.empty.message/client",
- "${kafka}/publish.empty.message/server"})
- public void shouldSendEmptyMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.one.message/client",
- "${kafka}/publish.one.message/server"})
- public void shouldSendOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.multiple.messages/client",
- "${kafka}/publish.multiple.messages/server"})
- public void shouldSendMultipleMessages() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.with.user.properties.distinct/client",
- "${kafka}/publish.with.user.properties.distinct/server"})
- public void shouldSendWithDistinctUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.with.user.properties.repeated/client",
- "${kafka}/publish.with.user.properties.repeated/server"})
- public void shouldSendWithRepeatedUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/publish.with.user.property/client",
- "${kafka}/publish.with.user.property/server"})
- public void shouldSendWithUserProperty() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.client.sent.abort/client",
- "${kafka}/subscribe.client.sent.abort/server"})
- public void shouldSubscribeReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.client.sent.data/client",
- "${kafka}/subscribe.client.sent.data/server"})
- public void shouldSubscribeAbortWhenClientSentData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.client.sent.reset/client",
- "${kafka}/subscribe.client.sent.reset/server"})
- public void shouldSubscribeReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.server.sent.abort/client",
- "${kafka}/subscribe.server.sent.abort/server"})
- public void shouldSubscribeReceiveServerSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.server.sent.flush/client",
- "${kafka}/subscribe.server.sent.flush/server"})
- public void shouldSubscribeReceiveServerSentFlush() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.server.sent.reset/client",
- "${kafka}/subscribe.server.sent.reset/server"})
- public void shouldSubscribeReceiveServerSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.one.message/client",
- "${kafka}/subscribe.one.message/server"})
- public void shouldReceiveOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.one.message.receive.response.topic.and.correlation.data/client",
- "${kafka}/subscribe.one.message.receive.response.topic.and.correlation.data/server"})
- public void shouldReceiveCorrelationData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.one.message.user.properties.unaltered/client",
- "${kafka}/subscribe.one.message.user.properties.unaltered/server"})
- public void shouldReceiveOneMessageWithUserPropertiesUnaltered() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.publish.no.local/client",
- "${kafka}/subscribe.publish.no.local/server"})
- public void shouldNotReceiveLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.receive.message.wildcard/client",
- "${kafka}/subscribe.receive.message.wildcard/server"})
- public void shouldReceiveOneMessageWithPatternTopic() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.receive.message.overlapping.wildcard/client",
- "${kafka}/subscribe.receive.message.overlapping.wildcard/server"})
- public void shouldReceiveMessageOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filter.multi.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.multi.level.wildcard/server"})
- public void shouldFilterMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filter.single.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.single.level.wildcard/server"})
- public void shouldFilterSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filter.single.and.multi.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.single.and.multi.level.wildcard/server"})
- public void shouldFilterSingleAndMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filter.two.single.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.two.single.level.wildcard/server"})
- public void shouldFilterTwoSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filters.aggregated.both.exact/client",
- "${kafka}/subscribe.topic.filters.aggregated.both.exact/server"})
- public void shouldFilterAggregatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filters.isolated.both.exact/client",
- "${kafka}/subscribe.topic.filters.isolated.both.exact/server"})
- public void shouldFilterIsolatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filters.overlapping.wildcards/client",
- "${kafka}/subscribe.topic.filters.overlapping.wildcards/server"})
- public void shouldFilterOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filters.aggregated.exact.and.wildcard/client",
- "${kafka}/subscribe.topic.filters.aggregated.exact.and.wildcard/server"})
- public void shouldFilterAggregatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/subscribe.topic.filters.isolated.exact.and.wildcard/client",
- "${kafka}/subscribe.topic.filters.isolated.exact.and.wildcard/server"})
- public void shouldFilterIsolatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/unsubscribe.after.subscribe/client",
- "${kafka}/unsubscribe.after.subscribe/server"})
- public void shouldAcknowledge() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${kafka}/unsubscribe.topic.filter.single/client",
- "${kafka}/unsubscribe.topic.filter.single/server"})
- public void shouldAcknowledgeSingleTopicFilter() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/MqttIT.java b/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/MqttIT.java
deleted file mode 100644
index 9fd5a92980..0000000000
--- a/incubator/binding-mqtt-kafka.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/kafka/streams/MqttIT.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.kafka.streams;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class MqttIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("mqtt", "io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${mqtt}/publish.client.sent.abort/client",
- "${mqtt}/publish.client.sent.abort/server"})
- public void shouldReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.client.sent.reset/client",
- "${mqtt}/publish.client.sent.reset/server"})
- public void shouldReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.server.sent.abort/client",
- "${mqtt}/publish.server.sent.abort/server"})
- public void shouldPublishReceiveServerSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.server.sent.flush/client",
- "${mqtt}/publish.server.sent.flush/server"})
- public void shouldPublishReceiveServerSentFlush() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.server.sent.reset/client",
- "${mqtt}/publish.server.sent.reset/server"})
- public void shouldPublishReceiveServerSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.server.sent.data/client",
- "${mqtt}/publish.server.sent.data/server"})
- public void shouldPublishAbortWhenServerSentData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.empty.message/client",
- "${mqtt}/publish.empty.message/server"})
- public void shouldSendEmptyMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.one.message/client",
- "${mqtt}/publish.one.message/server"})
- public void shouldSendOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.multiple.messages/client",
- "${mqtt}/publish.multiple.messages/server"})
- public void shouldSendMultipleMessages() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.with.user.properties.distinct/client",
- "${mqtt}/publish.with.user.properties.distinct/server"})
- public void shouldSendWithDistinctUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.with.user.properties.repeated/client",
- "${mqtt}/publish.with.user.properties.repeated/server"})
- public void shouldSendWithRepeatedUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/publish.with.user.property/client",
- "${mqtt}/publish.with.user.property/server"})
- public void shouldSendWithUserProperty() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.client.sent.abort/client",
- "${mqtt}/subscribe.client.sent.abort/server"})
- public void shouldSubscribeReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.client.sent.data/client",
- "${mqtt}/subscribe.client.sent.data/server"})
- public void shouldSubscribeAbortWhenClientSentData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.client.sent.reset/client",
- "${mqtt}/subscribe.client.sent.reset/server"})
- public void shouldSubscribeReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.server.sent.abort/client",
- "${mqtt}/subscribe.server.sent.abort/server"})
- public void shouldSubscribeReceiveServerSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.server.sent.flush/client",
- "${mqtt}/subscribe.server.sent.flush/server"})
- public void shouldSubscribeReceiveServerSentFlush() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.server.sent.reset/client",
- "${mqtt}/subscribe.server.sent.reset/server"})
- public void shouldSubscribeReceiveServerSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.one.message/client",
- "${mqtt}/subscribe.one.message/server"})
- public void shouldReceiveOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.one.message.receive.response.topic.and.correlation.data/client",
- "${mqtt}/subscribe.one.message.receive.response.topic.and.correlation.data/server"})
- public void shouldReceiveCorrelationData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.publish.no.local/client",
- "${mqtt}/subscribe.publish.no.local/server"})
- public void shouldNotReceiveLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.receive.message.overlapping.wildcard/client",
- "${mqtt}/subscribe.receive.message.overlapping.wildcard/server"})
- public void shouldReceiveMessageOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.receive.message.wildcard/client",
- "${mqtt}/subscribe.receive.message.wildcard/server"})
- public void shouldReceiveOneMessageWithPatternTopic() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filter.multi.level.wildcard/client",
- "${mqtt}/subscribe.topic.filter.multi.level.wildcard/server"})
- public void shouldFilterMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filter.single.level.wildcard/client",
- "${mqtt}/subscribe.topic.filter.single.level.wildcard/server"})
- public void shouldFilterSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filter.single.and.multi.level.wildcard/client",
- "${mqtt}/subscribe.topic.filter.single.and.multi.level.wildcard/server"})
- public void shouldFilterSingleAndMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.one.message.user.properties.unaltered/client",
- "${mqtt}/subscribe.one.message.user.properties.unaltered/server"})
- public void shouldReceiveOneMessageWithUserPropertiesUnaltered() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filter.two.single.level.wildcard/client",
- "${mqtt}/subscribe.topic.filter.two.single.level.wildcard/server"})
- public void shouldFilterTwoSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filters.aggregated.both.exact/client",
- "${mqtt}/subscribe.topic.filters.aggregated.both.exact/server"})
- public void shouldFilterAggregatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filters.isolated.both.exact/client",
- "${mqtt}/subscribe.topic.filters.isolated.both.exact/server"})
- public void shouldFilterIsolatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filters.overlapping.wildcards/client",
- "${mqtt}/subscribe.topic.filters.overlapping.wildcards/server"})
- public void shouldFilterOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filters.aggregated.exact.and.wildcard/client",
- "${mqtt}/subscribe.topic.filters.aggregated.exact.and.wildcard/server"})
- public void shouldFilterAggregatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/subscribe.topic.filters.isolated.exact.and.wildcard/client",
- "${mqtt}/subscribe.topic.filters.isolated.exact.and.wildcard/server"})
- public void shouldFilterIsolatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/unsubscribe.after.subscribe/client",
- "${mqtt}/unsubscribe.after.subscribe/server"})
- public void shouldAcknowledge() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${mqtt}/unsubscribe.topic.filter.single/client",
- "${mqtt}/unsubscribe.topic.filter.single/server"})
- public void shouldAcknowledgeSingleTopicFilter() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt-kafka/pom.xml b/incubator/binding-mqtt-kafka/pom.xml
deleted file mode 100644
index 84554f8413..0000000000
--- a/incubator/binding-mqtt-kafka/pom.xml
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
- 4.0.0
-
- io.aklivity.zilla
- incubator
- 0.9.51
- ../pom.xml
-
-
- binding-mqtt-kafka
- zilla::incubator::binding-mqtt-kafka
-
-
-
- Aklivity Community License Agreement
- https://www.aklivity.io/aklivity-community-license/
- repo
-
-
-
-
- 11
- 11
- 0.90
- 0
-
-
-
-
- ${project.groupId}
- binding-mqtt-kafka.spec
- ${project.version}
- provided
-
-
- ${project.groupId}
- engine
- ${project.version}
- provided
-
-
- ${project.groupId}
- engine
- test-jar
- ${project.version}
- test
-
-
- junit
- junit
- test
-
-
- org.hamcrest
- hamcrest
- test
-
-
- com.vtence.hamcrest
- hamcrest-jpa
- test
-
-
- com.github.npathai
- hamcrest-optional
- test
-
-
- org.mockito
- mockito-core
- test
-
-
- org.kaazing
- k3po.junit
- test
-
-
- org.kaazing
- k3po.lang
- test
-
-
- org.openjdk.jmh
- jmh-core
- test
-
-
- org.openjdk.jmh
- jmh-generator-annprocess
- test
-
-
-
-
-
-
- org.jasig.maven
- maven-notice-plugin
-
-
- ${project.groupId}
- flyweight-maven-plugin
- ${project.version}
-
- core mqtt kafka
- io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types
-
-
-
-
- generate
-
-
-
-
-
- com.mycila
- license-maven-plugin
-
-
- maven-checkstyle-plugin
-
-
- maven-dependency-plugin
-
-
- process-resources
-
- unpack
-
-
-
-
- ${project.groupId}
- binding-mqtt-kafka.spec
-
-
- ^\Qio/aklivity/zilla/specs/binding/mqtt/kafka/\E
- io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/
-
-
-
-
- io/aklivity/zilla/specs/binding/mqtt/kafka/schema/mqtt.kafka.schema.patch.json
- ${project.build.directory}/classes
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- org.moditect
- moditect-maven-plugin
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- test-jar
-
-
-
-
-
- org.kaazing
- k3po-maven-plugin
-
-
- ${project.groupId}
- engine
- ${project.version}
- test-jar
-
-
- ${project.groupId}
- engine
- ${project.version}
-
-
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
- io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/types/**/*.class
-
-
-
- BUNDLE
-
-
- INSTRUCTION
- COVEREDRATIO
- ${jacoco.coverage.ratio}
-
-
- CLASS
- MISSEDCOUNT
- ${jacoco.missed.count}
-
-
-
-
-
-
-
- io.gatling
- maven-shade-plugin
-
-
-
- org.agrona:agrona
- io.aklivity.zilla:engine
- org.openjdk.jmh:jmh-core
- net.sf.jopt-simple:jopt-simple
- org.apache.commons:commons-math3
- commons-cli:commons-cli
- com.github.biboudis:jmh-profilers
-
-
-
-
-
-
-
diff --git a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/MqttKafkaConfiguration.java b/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/MqttKafkaConfiguration.java
deleted file mode 100644
index 256e54bdbc..0000000000
--- a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/MqttKafkaConfiguration.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.kafka.internal;
-
-import io.aklivity.zilla.runtime.engine.Configuration;
-
-public class MqttKafkaConfiguration extends Configuration
-{
- private static final ConfigurationDef MQTT_KAFKA_CONFIG;
-
- public static final PropertyDef KAFKA_MESSAGES_TOPIC;
-
- static
- {
- final ConfigurationDef config = new ConfigurationDef("zilla.binding.mqtt.kafka");
- KAFKA_MESSAGES_TOPIC = config.property("messages.topic", "mqtt_messages");
- MQTT_KAFKA_CONFIG = config;
- }
-
- public MqttKafkaConfiguration(
- Configuration config)
- {
- super(MQTT_KAFKA_CONFIG, config);
- }
-
- public String kafkaMessagesTopic()
- {
- return KAFKA_MESSAGES_TOPIC.get(this);
- }
-}
diff --git a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/config/MqttKafkaBindingConfig.java b/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/config/MqttKafkaBindingConfig.java
deleted file mode 100644
index 044e5918a5..0000000000
--- a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/config/MqttKafkaBindingConfig.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config;
-
-import static java.util.stream.Collectors.toList;
-
-import java.util.List;
-
-import io.aklivity.zilla.runtime.engine.config.BindingConfig;
-import io.aklivity.zilla.runtime.engine.config.KindConfig;
-
-public class MqttKafkaBindingConfig
-{
- public final long id;
- public final String entry;
- public final KindConfig kind;
- public final List routes;
-
- public MqttKafkaBindingConfig(
- BindingConfig binding)
- {
- this.id = binding.id;
- this.entry = binding.entry;
- this.kind = binding.kind;
- this.routes = binding.routes.stream().map(MqttKafkaRouteConfig::new).collect(toList());
- }
-
- public MqttKafkaRouteConfig resolve(
- long authorization)
- {
- return routes.stream()
- .filter(r -> r.authorized(authorization))
- .findFirst()
- .orElse(null);
- }
-}
diff --git a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaPublishFactory.java b/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaPublishFactory.java
deleted file mode 100644
index 665433e21e..0000000000
--- a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaPublishFactory.java
+++ /dev/null
@@ -1,1159 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.stream;
-
-import static java.time.Instant.now;
-
-import java.nio.ByteOrder;
-import java.util.function.LongFunction;
-import java.util.function.LongUnaryOperator;
-
-import org.agrona.DirectBuffer;
-import org.agrona.MutableDirectBuffer;
-import org.agrona.concurrent.UnsafeBuffer;
-
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.MqttKafkaConfiguration;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaBindingConfig;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaHeaderHelper;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaRouteConfig;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.Array32FW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.Flyweight;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaAckMode;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaCapabilities;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaHeaderFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaKeyFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.MqttPayloadFormat;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.MqttPayloadFormatFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.OctetsFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.String16FW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.AbortFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.BeginFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.DataFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.EndFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.ExtensionFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.FlushFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.KafkaBeginExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.KafkaDataExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttBeginExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttDataExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttPublishBeginExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttPublishDataExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.ResetFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.WindowFW;
-import io.aklivity.zilla.runtime.engine.EngineContext;
-import io.aklivity.zilla.runtime.engine.binding.BindingHandler;
-import io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer;
-import io.aklivity.zilla.runtime.engine.concurrent.Signaler;
-
-public class MqttKafkaPublishFactory implements BindingHandler
-{
- //TODO: these defaults should come from the binding config
- private static final String KAFKA_MESSAGES_TOPIC_NAME = "mqtt_messages";
- private static final KafkaAckMode KAFKA_DEFAULT_ACK_MODE = KafkaAckMode.LEADER_ONLY;
- private static final String MQTT_TYPE_NAME = "mqtt";
- private static final String KAFKA_TYPE_NAME = "kafka";
-
- private final OctetsFW emptyRO = new OctetsFW().wrap(new UnsafeBuffer(0L, 0), 0, 0);
- private final BeginFW beginRO = new BeginFW();
- private final DataFW dataRO = new DataFW();
- private final EndFW endRO = new EndFW();
- private final AbortFW abortRO = new AbortFW();
- private final FlushFW flushRO = new FlushFW();
-
- private final BeginFW.Builder beginRW = new BeginFW.Builder();
- private final DataFW.Builder dataRW = new DataFW.Builder();
- private final EndFW.Builder endRW = new EndFW.Builder();
- private final AbortFW.Builder abortRW = new AbortFW.Builder();
- private final FlushFW.Builder flushRW = new FlushFW.Builder();
-
- private final WindowFW windowRO = new WindowFW();
- private final ResetFW resetRO = new ResetFW();
-
- private final WindowFW.Builder windowRW = new WindowFW.Builder();
- private final ResetFW.Builder resetRW = new ResetFW.Builder();
-
- private final ExtensionFW extensionRO = new ExtensionFW();
- private final MqttBeginExFW mqttBeginExRO = new MqttBeginExFW();
- private final MqttDataExFW mqttDataExRO = new MqttDataExFW();
- private final KafkaDataExFW kafkaDataExRO = new KafkaDataExFW();
-
- private final MqttDataExFW.Builder mqttDataExRW = new MqttDataExFW.Builder();
-
- private final KafkaBeginExFW.Builder kafkaBeginExRW = new KafkaBeginExFW.Builder();
- private final KafkaDataExFW.Builder kafkaDataExRW = new KafkaDataExFW.Builder();
- private final Array32FW.Builder kafkaHeadersRW =
- new Array32FW.Builder<>(new KafkaHeaderFW.Builder(), new KafkaHeaderFW());
- private final MutableDirectBuffer writeBuffer;
- private final MutableDirectBuffer keyBuffer;
- private final MutableDirectBuffer headerIntValueBuffer;
- private final MutableDirectBuffer extBuffer;
- private final MutableDirectBuffer kafkaHeadersBuffer;
- private final BindingHandler streamFactory;
- private final LongUnaryOperator supplyInitialId;
- private final LongUnaryOperator supplyReplyId;
- private final MqttKafkaHeaderHelper helper;
- private final int mqttTypeId;
- private final int kafkaTypeId;
- private final Signaler signaler;
- private final LongFunction supplyBinding;
- private KafkaKeyFW key;
-
- private OctetsFW[] topicNameHeaders;
- private OctetsFW clientIdOctets;
- private String16FW binaryFormat;
- private String16FW textFormat;
-
- public MqttKafkaPublishFactory(
- MqttKafkaConfiguration config,
- EngineContext context,
- LongFunction supplyBinding)
- {
- this.mqttTypeId = context.supplyTypeId(MQTT_TYPE_NAME);
- this.kafkaTypeId = context.supplyTypeId(KAFKA_TYPE_NAME);
- this.writeBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.keyBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.headerIntValueBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.extBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.kafkaHeadersBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.helper = new MqttKafkaHeaderHelper();
- this.signaler = context.signaler();
- this.streamFactory = context.streamFactory();
- this.supplyInitialId = context::supplyInitialId;
- this.supplyReplyId = context::supplyReplyId;
- this.supplyBinding = supplyBinding;
- this.binaryFormat = new String16FW(MqttPayloadFormat.BINARY.name());
- this.textFormat = new String16FW(MqttPayloadFormat.TEXT.name());
- }
-
- @Override
- public MessageConsumer newStream(
- int msgTypeId,
- DirectBuffer buffer,
- int index,
- int length,
- MessageConsumer mqtt)
- {
- final BeginFW begin = beginRO.wrap(buffer, index, index + length);
- final long originId = begin.originId();
- final long routedId = begin.routedId();
- final long initialId = begin.streamId();
- final long authorization = begin.authorization();
-
- final OctetsFW extension = begin.extension();
- final MqttBeginExFW mqttBeginEx = extension.get(mqttBeginExRO::tryWrap);
-
- assert mqttBeginEx.kind() == MqttBeginExFW.KIND_PUBLISH;
- final MqttPublishBeginExFW mqttPublishBeginEx = mqttBeginEx.publish();
- String topicName = mqttPublishBeginEx.topic().asString();
- assert topicName != null;
-
- String[] topicHeaders = topicName.split("/");
- topicNameHeaders = new OctetsFW[topicHeaders.length];
- for (int i = 0; i < topicHeaders.length; i++)
- {
- String16FW topicHeader = new String16FW(topicHeaders[i]);
- topicNameHeaders[i] = new OctetsFW().wrap(topicHeader.value(), 0, topicHeader.length());
- }
- clientIdOctets = new OctetsFW()
- .wrap(mqttPublishBeginEx.clientId().value(), 0, mqttPublishBeginEx.clientId().length());
- final DirectBuffer topicNameBuffer = mqttPublishBeginEx.topic().value();
- key = new KafkaKeyFW.Builder()
- .wrap(keyBuffer, 0, keyBuffer.capacity())
- .length(topicNameBuffer.capacity())
- .value(topicNameBuffer, 0, topicNameBuffer.capacity())
- .build();
-
- final MqttKafkaBindingConfig binding = supplyBinding.apply(routedId);
-
- final MqttKafkaRouteConfig resolved = binding != null ? binding.resolve(authorization) : null;
-
-
- MessageConsumer newStream = null;
-
- if (resolved != null)
- {
- final long resolvedId = resolved.id;
- newStream = new MqttPublishProxy(mqtt, originId, routedId, initialId, resolvedId)::onMqttMessage;
- }
-
- return newStream;
- }
-
- private final class MqttPublishProxy
- {
- private final MessageConsumer mqtt;
- private final long originId;
- private final long routedId;
- private final long initialId;
- private final long replyId;
- private final KafkaProxy delegate;
-
- private int state;
-
- private long initialSeq;
- private long initialAck;
- private int initialMax;
-
- private long replySeq;
- private long replyAck;
- private int replyMax;
- private int replyPad;
-
- private MqttPublishProxy(
- MessageConsumer mqtt,
- long originId,
- long routedId,
- long initialId,
- long resolvedId)
- {
- this.mqtt = mqtt;
- this.originId = originId;
- this.routedId = routedId;
- this.initialId = initialId;
- this.replyId = supplyReplyId.applyAsLong(initialId);
- this.delegate = new KafkaProxy(originId, resolvedId, this);
- }
-
- private void onMqttMessage(
- int msgTypeId,
- DirectBuffer buffer,
- int index,
- int length)
- {
- switch (msgTypeId)
- {
- case BeginFW.TYPE_ID:
- final BeginFW begin = beginRO.wrap(buffer, index, index + length);
- onMqttBegin(begin);
- break;
- case DataFW.TYPE_ID:
- final DataFW data = dataRO.wrap(buffer, index, index + length);
- onMqttData(data);
- break;
- case EndFW.TYPE_ID:
- final EndFW end = endRO.wrap(buffer, index, index + length);
- onMqttEnd(end);
- break;
- case AbortFW.TYPE_ID:
- final AbortFW abort = abortRO.wrap(buffer, index, index + length);
- onMqttAbort(abort);
- break;
- case ResetFW.TYPE_ID:
- final ResetFW reset = resetRO.wrap(buffer, index, index + length);
- onMqttReset(reset);
- break;
- case WindowFW.TYPE_ID:
- final WindowFW window = windowRO.wrap(buffer, index, index + length);
- onMqttWindow(window);
- break;
- }
- }
-
- private void onMqttBegin(
- BeginFW begin)
- {
- final long sequence = begin.sequence();
- final long acknowledge = begin.acknowledge();
- final long traceId = begin.traceId();
- final long authorization = begin.authorization();
- final long affinity = begin.affinity();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
- assert acknowledge >= initialAck;
-
- initialSeq = sequence;
- initialAck = acknowledge;
- state = MqttKafkaState.openingInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doKafkaBegin(traceId, authorization, affinity);
- }
-
- private void onMqttData(
- DataFW data)
- {
- final long sequence = data.sequence();
- final long acknowledge = data.acknowledge();
- final long traceId = data.traceId();
- final long authorization = data.authorization();
- final long budgetId = data.budgetId();
- final int reserved = data.reserved();
- final int flags = data.flags();
- final OctetsFW payload = data.payload();
- final OctetsFW extension = data.extension();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
-
- initialSeq = sequence;
-
- assert initialAck <= initialSeq;
-
- Flyweight kafkaDataEx = emptyRO;
- MqttDataExFW mqttDataEx = null;
- if (extension.sizeof() > 0)
- {
- mqttDataEx = extension.get(mqttDataExRO::tryWrap);
- }
-
- assert mqttDataEx.kind() == MqttDataExFW.KIND_PUBLISH;
- final MqttPublishDataExFW mqttPublishDataEx = mqttDataEx.publish();
- kafkaHeadersRW.wrap(kafkaHeadersBuffer, 0, kafkaHeadersBuffer.capacity());
-
- for (OctetsFW topicHeader : topicNameHeaders)
- {
- addHeader(helper.kafkaTopicHeaderName, topicHeader);
- }
-
- addHeader(helper.kafkaLocalHeaderName, clientIdOctets);
-
- if (mqttPublishDataEx.expiryInterval() != -1)
- {
- addHeader(helper.kafkaTimeoutHeaderName, mqttPublishDataEx.expiryInterval() * 1000);
- }
-
- if (mqttPublishDataEx.contentType().asString() != null)
- {
- addHeader(helper.kafkaContentTypeHeaderName, mqttPublishDataEx.contentType());
- }
-
- if (payload.sizeof() != 0 && mqttPublishDataEx.format() != null)
- {
- addHeader(helper.kafkaFormatHeaderName, mqttPublishDataEx.format());
- }
-
- if (mqttPublishDataEx.responseTopic().asString() != null)
- {
- addHeader(helper.kafkaReplyToHeaderName, mqttPublishDataEx.responseTopic());
- }
-
- if (mqttPublishDataEx.correlation().bytes() != null)
- {
- addHeader(helper.kafkaCorrelationHeaderName, mqttPublishDataEx.correlation().bytes());
- }
-
- mqttPublishDataEx.properties().forEach(property ->
- addHeader(property.key(), property.value()));
-
- final int deferred = mqttPublishDataEx.deferred();
- kafkaDataEx = kafkaDataExRW
- .wrap(extBuffer, 0, extBuffer.capacity())
- .typeId(kafkaTypeId)
- .merged(m -> m
- .deferred(deferred)
- .timestamp(now().toEpochMilli())
- .partition(p -> p.partitionId(-1).partitionOffset(-1))
- .key(b -> b.set(key))
- .headers(kafkaHeadersRW.build()))
- .build();
-
- //TODO: do this onMqttData for subscribe
- // doMqttReset(traceId);
- // delegate.doKafkaAbort(traceId, authorization);
- delegate.doKafkaData(traceId, authorization, budgetId, reserved, flags, payload, kafkaDataEx);
- }
-
-
- private void onMqttEnd(
- EndFW end)
- {
- final long sequence = end.sequence();
- final long acknowledge = end.acknowledge();
- final long traceId = end.traceId();
- final long authorization = end.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
-
- initialSeq = sequence;
- state = MqttKafkaState.closeInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doKafkaEnd(traceId, initialSeq, authorization);
- }
-
- private void onMqttAbort(
- AbortFW abort)
- {
- final long sequence = abort.sequence();
- final long acknowledge = abort.acknowledge();
- final long traceId = abort.traceId();
- final long authorization = abort.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
-
- initialSeq = sequence;
- state = MqttKafkaState.closeInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doKafkaAbort(traceId, authorization);
- }
-
- private void onMqttReset(
- ResetFW reset)
- {
- final long sequence = reset.sequence();
- final long acknowledge = reset.acknowledge();
- final int maximum = reset.maximum();
- final long traceId = reset.traceId();
-
- assert acknowledge <= sequence;
- assert sequence <= replySeq;
- assert acknowledge >= replyAck;
- assert maximum >= replyMax;
-
- replyAck = acknowledge;
- replyMax = maximum;
- state = MqttKafkaState.closeReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doKafkaReset(traceId);
- }
-
- private void onMqttWindow(
- WindowFW window)
- {
- final long sequence = window.sequence();
- final long acknowledge = window.acknowledge();
- final int maximum = window.maximum();
- final long traceId = window.traceId();
- final long authorization = window.authorization();
- final long budgetId = window.budgetId();
- final int padding = window.padding();
- final int capabilities = window.capabilities();
-
- assert acknowledge <= sequence;
- assert sequence <= replySeq;
- assert acknowledge >= replyAck;
- assert maximum >= replyMax;
-
- replyAck = acknowledge;
- replyMax = maximum;
- replyPad = padding;
- state = MqttKafkaState.openReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doKafkaWindow(traceId, authorization, budgetId, padding, capabilities);
- }
-
- private void doMqttBegin(
- long traceId,
- long authorization,
- long affinity)
- {
- replySeq = delegate.replySeq;
- replyAck = delegate.replyAck;
- replyMax = delegate.replyMax;
- state = MqttKafkaState.openingReply(state);
-
- doBegin(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, affinity);
- }
-
- private void doMqttData(
- long traceId,
- long authorization,
- long budgetId,
- int reserved,
- int flags,
- OctetsFW payload,
- Flyweight extension)
- {
- doData(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, budgetId, flags, reserved, payload, extension);
-
- replySeq += reserved;
-
- assert replySeq <= replyAck + replyMax;
- }
-
- private void doMqttFlush(
- long traceId,
- long authorization,
- long budgetId,
- int reserved)
- {
- replySeq = delegate.replySeq;
-
- doFlush(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId, authorization, budgetId, reserved);
- }
-
- private void doMqttAbort(
- long traceId,
- long authorization)
- {
- if (!MqttKafkaState.replyClosed(state))
- {
- replySeq = delegate.replySeq;
- state = MqttKafkaState.closeReply(state);
-
- doAbort(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId, authorization);
- }
- }
-
- private void doMqttEnd(
- long traceId,
- long authorization)
- {
- if (!MqttKafkaState.replyClosed(state))
- {
- replySeq = delegate.replySeq;
- state = MqttKafkaState.closeReply(state);
-
- doEnd(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId, authorization);
- }
- }
-
- private void doMqttWindow(
- long authorization,
- long traceId,
- long budgetId,
- int padding,
- int capabilities)
- {
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
-
- doWindow(mqtt, originId, routedId, initialId, initialSeq, initialAck, initialMax,
- traceId, authorization, budgetId, padding, 0, capabilities);
- }
-
- private void doMqttReset(
- long traceId)
- {
- if (!MqttKafkaState.initialClosed(state))
- {
- state = MqttKafkaState.closeInitial(state);
-
- doReset(mqtt, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId);
- }
- }
- }
-
- private void addHeader(
- OctetsFW key,
- int value)
- {
- headerIntValueBuffer.putInt(0, value, ByteOrder.BIG_ENDIAN);
- kafkaHeadersRW.item(h ->
- {
- h.nameLen(key.sizeof());
- h.name(key);
- h.valueLen(4);
- h.value(headerIntValueBuffer, 0, 4);
- });
- }
-
- private void addHeader(
- OctetsFW key,
- OctetsFW value)
- {
- kafkaHeadersRW.item(h ->
- {
- h.nameLen(key.sizeof());
- h.name(key);
- h.valueLen(value.sizeof());
- h.value(value);
- });
- }
-
- private void addHeader(
- OctetsFW key,
- MqttPayloadFormatFW format)
- {
- String16FW value = format.get() == MqttPayloadFormat.BINARY ? binaryFormat : textFormat;
- addHeader(key, value);
- }
-
- private void addHeader(
- OctetsFW key,
- String16FW value)
- {
- DirectBuffer buffer = value.value();
- kafkaHeadersRW.item(h ->
- {
- h.nameLen(key.sizeof());
- h.name(key);
- h.valueLen(value.length());
- h.value(buffer, 0, buffer.capacity());
- });
- }
-
- private void addHeader(String16FW key, String16FW value)
- {
- DirectBuffer keyBuffer = key.value();
- DirectBuffer valueBuffer = value.value();
- kafkaHeadersRW.item(h ->
- {
- h.nameLen(key.length());
- h.name(keyBuffer, 0, keyBuffer.capacity());
- h.valueLen(value.length());
- h.value(valueBuffer, 0, valueBuffer.capacity());
- });
- }
-
-
- final class KafkaProxy
- {
- private MessageConsumer kafka;
- private final long originId;
- private final long routedId;
- private final long initialId;
- private final long replyId;
- private final MqttPublishProxy delegate;
-
- private int state;
-
- private long initialSeq;
- private long initialAck;
- private int initialMax;
-
- private long replySeq;
- private long replyAck;
- private int replyMax;
- private int replyPad;
-
- private KafkaProxy(
- long originId,
- long routedId,
- MqttPublishProxy delegate)
- {
- this.originId = originId;
- this.routedId = routedId;
- this.delegate = delegate;
- this.initialId = supplyInitialId.applyAsLong(routedId);
- this.replyId = supplyReplyId.applyAsLong(initialId);
- }
-
- private void doKafkaBegin(
- long traceId,
- long authorization,
- long affinity)
- {
- initialSeq = delegate.initialSeq;
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
- state = MqttKafkaState.openingInitial(state);
-
- kafka = newKafkaStream(this::onKafkaMessage, originId, routedId, initialId, initialSeq, initialAck, initialMax,
- traceId, authorization, affinity);
- }
-
- private void doKafkaData(
- long traceId,
- long authorization,
- long budgetId,
- int reserved,
- int flags,
- OctetsFW payload,
- Flyweight extension)
- {
- doData(kafka, originId, routedId, initialId, initialSeq, initialAck, initialMax,
- traceId, authorization, budgetId, flags, reserved, payload, extension);
-
- initialSeq += reserved;
-
- assert initialSeq <= initialAck + initialMax;
- }
-
- private void doKafkaEnd(
- long traceId,
- long sequence,
- long authorization)
- {
- if (!MqttKafkaState.initialClosed(state))
- {
- initialSeq = delegate.initialSeq;
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
- state = MqttKafkaState.closeInitial(state);
-
- doEnd(kafka, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId, authorization);
- }
- }
-
- private void doKafkaAbort(
- long traceId,
- long authorization)
- {
- if (!MqttKafkaState.initialClosed(state))
- {
- initialSeq = delegate.initialSeq;
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
- state = MqttKafkaState.closeInitial(state);
-
- doAbort(kafka, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId, authorization);
- }
- }
-
- private void onKafkaMessage(
- int msgTypeId,
- DirectBuffer buffer,
- int index,
- int length)
- {
- switch (msgTypeId)
- {
- case BeginFW.TYPE_ID:
- final BeginFW begin = beginRO.wrap(buffer, index, index + length);
- onKafkaBegin(begin);
- break;
- case DataFW.TYPE_ID:
- final DataFW data = dataRO.wrap(buffer, index, index + length);
- onKafkaData(data);
- break;
- case EndFW.TYPE_ID:
- final EndFW end = endRO.wrap(buffer, index, index + length);
- onKafkaEnd(end);
- break;
- case AbortFW.TYPE_ID:
- final AbortFW abort = abortRO.wrap(buffer, index, index + length);
- onKafkaAbort(abort);
- break;
- case FlushFW.TYPE_ID:
- final FlushFW flush = flushRO.wrap(buffer, index, index + length);
- onKafkaFlush(flush);
- break;
- case WindowFW.TYPE_ID:
- final WindowFW window = windowRO.wrap(buffer, index, index + length);
- onKafkaWindow(window);
- break;
- case ResetFW.TYPE_ID:
- final ResetFW reset = resetRO.wrap(buffer, index, index + length);
- onKafkaReset(reset);
- break;
- }
- }
-
- private void onKafkaBegin(
- BeginFW begin)
- {
- final long sequence = begin.sequence();
- final long acknowledge = begin.acknowledge();
- final int maximum = begin.maximum();
- final long traceId = begin.traceId();
- final long authorization = begin.authorization();
- final long affinity = begin.affinity();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
- assert acknowledge >= replyAck;
-
- replySeq = sequence;
- replyAck = acknowledge;
- replyMax = maximum;
- state = MqttKafkaState.openingReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doMqttBegin(traceId, authorization, affinity);
- }
-
- private void onKafkaData(
- DataFW data)
- {
- final long sequence = data.sequence();
- final long acknowledge = data.acknowledge();
- final long traceId = data.traceId();
- final long authorization = data.authorization();
- final long budgetId = data.budgetId();
- final int reserved = data.reserved();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence + reserved;
-
- assert replyAck <= replySeq;
- doKafkaReset(traceId);
- delegate.doMqttAbort(traceId, authorization);
- }
-
- private void onKafkaEnd(
- EndFW end)
- {
- final long sequence = end.sequence();
- final long acknowledge = end.acknowledge();
- final long traceId = end.traceId();
- final long authorization = end.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
- state = MqttKafkaState.closeReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doMqttEnd(traceId, authorization);
- }
-
- private void onKafkaFlush(
- FlushFW flush)
- {
- final long sequence = flush.sequence();
- final long acknowledge = flush.acknowledge();
- final long traceId = flush.traceId();
- final long authorization = flush.authorization();
- final long budgetId = flush.budgetId();
- final int reserved = flush.reserved();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
-
- assert replyAck <= replySeq;
-
- delegate.doMqttFlush(traceId, authorization, budgetId, reserved);
- }
-
- private void onKafkaAbort(
- AbortFW abort)
- {
- final long sequence = abort.sequence();
- final long acknowledge = abort.acknowledge();
- final long traceId = abort.traceId();
- final long authorization = abort.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
- state = MqttKafkaState.closeReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doMqttAbort(traceId, authorization);
- }
-
- private void onKafkaWindow(
- WindowFW window)
- {
- final long sequence = window.sequence();
- final long acknowledge = window.acknowledge();
- final int maximum = window.maximum();
- final long authorization = window.authorization();
- final long traceId = window.traceId();
- final long budgetId = window.budgetId();
- final int padding = window.padding();
- final int capabilities = window.capabilities();
-
- assert acknowledge <= sequence;
- assert acknowledge >= delegate.initialAck;
- assert maximum >= delegate.initialMax;
-
- initialAck = acknowledge;
- initialMax = maximum;
- state = MqttKafkaState.openInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doMqttWindow(authorization, traceId, budgetId, padding, capabilities);
- }
-
- private void onKafkaReset(
- ResetFW reset)
- {
- final long sequence = reset.sequence();
- final long acknowledge = reset.acknowledge();
- final long traceId = reset.traceId();
-
- assert acknowledge <= sequence;
- assert acknowledge >= delegate.initialAck;
-
- delegate.initialAck = acknowledge;
-
- assert delegate.initialAck <= delegate.initialSeq;
-
- delegate.doMqttReset(traceId);
- }
-
- private void doKafkaReset(
- long traceId)
- {
- if (!MqttKafkaState.replyClosed(state))
- {
- state = MqttKafkaState.closeReply(state);
-
- doReset(kafka, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId);
- }
- }
-
- private void doKafkaWindow(
- long traceId,
- long authorization,
- long budgetId,
- int padding,
- int capabilities)
- {
- replyAck = delegate.replyAck;
- replyMax = delegate.replyMax;
- replyPad = delegate.replyPad;
-
- doWindow(kafka, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, budgetId, padding, replyPad, capabilities);
- }
- }
-
-
- private void doBegin(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long affinity)
- {
- final BeginFW begin = beginRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .affinity(affinity)
- .build();
-
- receiver.accept(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof());
- }
-
- private void doData(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long budgetId,
- int flags,
- int reserved,
- OctetsFW payload,
- Flyweight extension)
- {
- final DataFW frame = dataRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .flags(flags)
- .budgetId(budgetId)
- .reserved(reserved)
- .payload(payload)
- .extension(extension.buffer(), extension.offset(), extension.sizeof())
- .build();
-
- receiver.accept(frame.typeId(), frame.buffer(), frame.offset(), frame.sizeof());
- }
-
- private void doEnd(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization)
- {
- final EndFW end = endRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .build();
-
- receiver.accept(end.typeId(), end.buffer(), end.offset(), end.sizeof());
- }
-
- private void doAbort(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization)
- {
- final AbortFW abort = abortRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .build();
-
- receiver.accept(abort.typeId(), abort.buffer(), abort.offset(), abort.sizeof());
- }
-
- private void doFlush(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long budgetId,
- int reserved)
- {
- final FlushFW flush = flushRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .budgetId(budgetId)
- .reserved(reserved)
- .build();
-
- receiver.accept(flush.typeId(), flush.buffer(), flush.offset(), flush.sizeof());
- }
-
- private MessageConsumer newKafkaStream(
- MessageConsumer sender,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long affinity)
- {
- final KafkaBeginExFW kafkaBeginEx =
- kafkaBeginExRW.wrap(writeBuffer, BeginFW.FIELD_OFFSET_EXTENSION, writeBuffer.capacity())
- .typeId(kafkaTypeId)
- .merged(m -> m.capabilities(c -> c.set(KafkaCapabilities.PRODUCE_ONLY))
- .topic(KAFKA_MESSAGES_TOPIC_NAME)
- .partitionsItem(p -> p.partitionId(-1).partitionOffset(-2L))
- .ackMode(b -> b.set(KAFKA_DEFAULT_ACK_MODE)))
- .build();
-
-
- final BeginFW begin = beginRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .affinity(affinity)
- .extension(kafkaBeginEx.buffer(), kafkaBeginEx.offset(), kafkaBeginEx.sizeof())
- .build();
-
- MessageConsumer receiver =
- streamFactory.newStream(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof(), sender);
-
- receiver.accept(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof());
-
- return receiver;
- }
-
- private void doWindow(
- MessageConsumer sender,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long budgetId,
- int padding,
- int minimum,
- int capabilities)
- {
- final WindowFW window = windowRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .budgetId(budgetId)
- .padding(padding)
- .minimum(minimum)
- .capabilities(capabilities)
- .build();
-
- sender.accept(window.typeId(), window.buffer(), window.offset(), window.sizeof());
- }
-
- private void doReset(
- MessageConsumer sender,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId)
- {
- final ResetFW reset = resetRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .build();
-
- sender.accept(reset.typeId(), reset.buffer(), reset.offset(), reset.sizeof());
- }
-}
diff --git a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java b/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java
deleted file mode 100644
index 8e68a70bd1..0000000000
--- a/incubator/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.stream;
-
-
-import static io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.MqttSubscribeFlags.NO_LOCAL;
-
-import java.util.function.LongFunction;
-import java.util.function.LongUnaryOperator;
-
-import org.agrona.DirectBuffer;
-import org.agrona.MutableDirectBuffer;
-import org.agrona.collections.IntArrayList;
-import org.agrona.concurrent.UnsafeBuffer;
-
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.MqttKafkaConfiguration;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaBindingConfig;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaHeaderHelper;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaRouteConfig;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.Array32FW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.Flyweight;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaCapabilities;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaConditionFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaEvaluation;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaHeaderFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaOffsetFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.KafkaSkip;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.MqttPayloadFormat;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.MqttTopicFilterFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.OctetsFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.String16FW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.AbortFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.BeginFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.DataFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.EndFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.ExtensionFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.FlushFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.KafkaBeginExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.KafkaDataExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.KafkaFlushExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.KafkaMergedDataExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttBeginExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttDataExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttFlushExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttSubscribeBeginExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.MqttSubscribeFlushExFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.ResetFW;
-import io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.types.stream.WindowFW;
-import io.aklivity.zilla.runtime.engine.EngineContext;
-import io.aklivity.zilla.runtime.engine.binding.BindingHandler;
-import io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer;
-import io.aklivity.zilla.runtime.engine.concurrent.Signaler;
-
-public class MqttKafkaSubscribeFactory implements BindingHandler
-{
- private static final String MQTT_TYPE_NAME = "mqtt";
- private static final String KAFKA_TYPE_NAME = "kafka";
- private static final String MQTT_SINGLE_LEVEL_WILDCARD = "+";
- private static final String MQTT_MULTI_LEVEL_WILDCARD = "#";
- private static final int NO_LOCAL_FLAG = 1 << NO_LOCAL.ordinal();
-
- private final OctetsFW emptyRO = new OctetsFW().wrap(new UnsafeBuffer(0L, 0), 0, 0);
- private final BeginFW beginRO = new BeginFW();
- private final DataFW dataRO = new DataFW();
- private final EndFW endRO = new EndFW();
- private final AbortFW abortRO = new AbortFW();
- private final FlushFW flushRO = new FlushFW();
-
- private final BeginFW.Builder beginRW = new BeginFW.Builder();
- private final DataFW.Builder dataRW = new DataFW.Builder();
- private final EndFW.Builder endRW = new EndFW.Builder();
- private final AbortFW.Builder abortRW = new AbortFW.Builder();
- private final FlushFW.Builder flushRW = new FlushFW.Builder();
- private final OctetsFW.Builder octetsRW = new OctetsFW.Builder();
-
- private final WindowFW windowRO = new WindowFW();
- private final ResetFW resetRO = new ResetFW();
-
- private final WindowFW.Builder windowRW = new WindowFW.Builder();
- private final ResetFW.Builder resetRW = new ResetFW.Builder();
-
- private final ExtensionFW extensionRO = new ExtensionFW();
- private final MqttBeginExFW mqttBeginExRO = new MqttBeginExFW();
- private final MqttFlushExFW mqttFlushExRO = new MqttFlushExFW();
- private final MqttDataExFW mqttDataExRO = new MqttDataExFW();
- private final KafkaDataExFW kafkaDataExRO = new KafkaDataExFW();
- private final KafkaHeaderFW kafkaHeaderRO = new KafkaHeaderFW();
-
- private final MqttDataExFW.Builder mqttDataExRW = new MqttDataExFW.Builder();
-
- private final KafkaBeginExFW.Builder kafkaBeginExRW = new KafkaBeginExFW.Builder();
- private final KafkaFlushExFW.Builder kafkaFlushExRW = new KafkaFlushExFW.Builder();
-
- private final MutableDirectBuffer writeBuffer;
- private final MutableDirectBuffer extBuffer;
- private final BindingHandler streamFactory;
- private final LongUnaryOperator supplyInitialId;
- private final LongUnaryOperator supplyReplyId;
- private final int mqttTypeId;
- private final int kafkaTypeId;
- private final Signaler signaler;
- private final LongFunction supplyBinding;
- private final MqttKafkaHeaderHelper helper;
-
- private String clientId;
- private Array32FW filters;
- private IntArrayList subscriptionIds = new IntArrayList();
- private String16FW kafkaMessagesTopicName;
-
- public MqttKafkaSubscribeFactory(
- MqttKafkaConfiguration config,
- EngineContext context,
- LongFunction supplyBinding)
- {
- this.mqttTypeId = context.supplyTypeId(MQTT_TYPE_NAME);
- this.kafkaTypeId = context.supplyTypeId(KAFKA_TYPE_NAME);
- this.writeBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.extBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]);
- this.signaler = context.signaler();
- this.streamFactory = context.streamFactory();
- this.supplyInitialId = context::supplyInitialId;
- this.supplyReplyId = context::supplyReplyId;
- this.supplyBinding = supplyBinding;
- this.helper = new MqttKafkaHeaderHelper();
- this.kafkaMessagesTopicName = new String16FW(config.kafkaMessagesTopic());
- }
-
- @Override
- public MessageConsumer newStream(
- int msgTypeId,
- DirectBuffer buffer,
- int index,
- int length,
- MessageConsumer mqtt)
- {
- final BeginFW begin = beginRO.wrap(buffer, index, index + length);
- final long originId = begin.originId();
- final long routedId = begin.routedId();
- final long initialId = begin.streamId();
- final long authorization = begin.authorization();
-
- final OctetsFW extension = begin.extension();
- final MqttBeginExFW mqttBeginEx = extension.get(mqttBeginExRO::tryWrap);
-
- assert mqttBeginEx.kind() == MqttBeginExFW.KIND_SUBSCRIBE;
- final MqttSubscribeBeginExFW mqttSubscribeBeginEx = mqttBeginEx.subscribe();
- clientId = mqttSubscribeBeginEx.clientId().asString();
- filters = mqttSubscribeBeginEx.filters();
-
- final MqttKafkaBindingConfig binding = supplyBinding.apply(routedId);
-
- final MqttKafkaRouteConfig resolved = binding != null ? binding.resolve(authorization) : null;
-
-
- MessageConsumer newStream = null;
-
- if (resolved != null)
- {
- final long resolvedId = resolved.id;
- newStream = new MqttSubscribeProxy(mqtt, originId, routedId, initialId, resolvedId)::onMqttMessage;
- }
-
- return newStream;
- }
-
- private final class MqttSubscribeProxy
- {
- private final MessageConsumer mqtt;
- private final long originId;
- private final long routedId;
- private final long initialId;
- private final long replyId;
- private final KafkaProxy delegate;
-
- private int state;
-
- private long initialSeq;
- private long initialAck;
- private int initialMax;
-
- private long replySeq;
- private long replyAck;
- private int replyMax;
- private int replyPad;
-
- private MqttSubscribeProxy(
- MessageConsumer mqtt,
- long originId,
- long routedId,
- long initialId,
- long resolvedId)
- {
- this.mqtt = mqtt;
- this.originId = originId;
- this.routedId = routedId;
- this.initialId = initialId;
- this.replyId = supplyReplyId.applyAsLong(initialId);
- this.delegate = new KafkaProxy(originId, resolvedId, this);
- }
-
- private void onMqttMessage(
- int msgTypeId,
- DirectBuffer buffer,
- int index,
- int length)
- {
- switch (msgTypeId)
- {
- case BeginFW.TYPE_ID:
- final BeginFW begin = beginRO.wrap(buffer, index, index + length);
- onMqttBegin(begin);
- break;
- case FlushFW.TYPE_ID:
- final FlushFW flush = flushRO.wrap(buffer, index, index + length);
- onMqttFlush(flush);
- break;
- case DataFW.TYPE_ID:
- final DataFW data = dataRO.wrap(buffer, index, index + length);
- onMqttData(data);
- break;
- case EndFW.TYPE_ID:
- final EndFW end = endRO.wrap(buffer, index, index + length);
- onMqttEnd(end);
- break;
- case AbortFW.TYPE_ID:
- final AbortFW abort = abortRO.wrap(buffer, index, index + length);
- onMqttAbort(abort);
- break;
- case ResetFW.TYPE_ID:
- final ResetFW reset = resetRO.wrap(buffer, index, index + length);
- onMqttReset(reset);
- break;
- case WindowFW.TYPE_ID:
- final WindowFW window = windowRO.wrap(buffer, index, index + length);
- onMqttWindow(window);
- break;
- }
- }
-
- private void onMqttBegin(
- BeginFW begin)
- {
- final long sequence = begin.sequence();
- final long acknowledge = begin.acknowledge();
- final long traceId = begin.traceId();
- final long authorization = begin.authorization();
- final long affinity = begin.affinity();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
- assert acknowledge >= initialAck;
-
- initialSeq = sequence;
- initialAck = acknowledge;
- state = MqttKafkaState.openingInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doKafkaBegin(traceId, authorization, affinity);
- }
-
- private void onMqttFlush(
- FlushFW flush)
- {
- final long sequence = flush.sequence();
- final long acknowledge = flush.acknowledge();
- final long traceId = flush.traceId();
- final long authorization = flush.authorization();
- final long budgetId = flush.budgetId();
- final int reserved = flush.reserved();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
-
- assert replyAck <= replySeq;
-
- final OctetsFW extension = flush.extension();
- final MqttFlushExFW mqttFlushEx = extension.get(mqttFlushExRO::tryWrap);
-
- assert mqttFlushEx.kind() == MqttFlushExFW.KIND_SUBSCRIBE;
- final MqttSubscribeFlushExFW mqttSubscribeFlushEx = mqttFlushEx.subscribe();
-
- filters = mqttSubscribeFlushEx.filters();
- subscriptionIds.clear();
-
-
- final KafkaFlushExFW kafkaFlushEx =
- kafkaFlushExRW.wrap(writeBuffer, FlushFW.FIELD_OFFSET_EXTENSION, writeBuffer.capacity())
- .typeId(kafkaTypeId)
- .merged(m ->
- {
- m.capabilities(c -> c.set(KafkaCapabilities.FETCH_ONLY));
- filters.forEach(filter ->
-
- m.filtersItem(f ->
- {
- f.conditionsItem(ci ->
- {
- subscriptionIds.add((int) filter.subscriptionId());
- buildHeaders(ci, filter.pattern().asString());
- });
- boolean noLocal = (filter.flags() & NO_LOCAL_FLAG) != 0;
- if (noLocal)
- {
- final DirectBuffer valueBuffer = new String16FW(clientId).value();
- f.conditionsItem(i -> i.not(n -> n.condition(c -> c.header(h ->
- h.nameLen(helper.kafkaLocalHeaderName.sizeof())
- .name(helper.kafkaLocalHeaderName)
- .valueLen(valueBuffer.capacity())
- .value(valueBuffer, 0, valueBuffer.capacity())))));
- }
- }));
- })
- .build();
-
- delegate.doKafkaFlush(traceId, authorization, budgetId, reserved, kafkaFlushEx);
- }
-
- private void onMqttData(
- DataFW data)
- {
- final long sequence = data.sequence();
- final long acknowledge = data.acknowledge();
- final long traceId = data.traceId();
- final long authorization = data.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
-
- initialSeq = sequence;
-
- assert initialAck <= initialSeq;
-
- doMqttReset(traceId);
- delegate.doKafkaAbort(traceId, authorization);
- }
-
-
- private void onMqttEnd(
- EndFW end)
- {
- final long sequence = end.sequence();
- final long acknowledge = end.acknowledge();
- final long traceId = end.traceId();
- final long authorization = end.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
-
- initialSeq = sequence;
- state = MqttKafkaState.closeInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doKafkaEnd(traceId, initialSeq, authorization);
- }
-
- private void onMqttAbort(
- AbortFW abort)
- {
- final long sequence = abort.sequence();
- final long acknowledge = abort.acknowledge();
- final long traceId = abort.traceId();
- final long authorization = abort.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= initialSeq;
-
- initialSeq = sequence;
- state = MqttKafkaState.closeInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doKafkaAbort(traceId, authorization);
- }
-
- private void onMqttReset(
- ResetFW reset)
- {
- final long sequence = reset.sequence();
- final long acknowledge = reset.acknowledge();
- final int maximum = reset.maximum();
- final long traceId = reset.traceId();
-
- assert acknowledge <= sequence;
- assert sequence <= replySeq;
- assert acknowledge >= replyAck;
- assert maximum >= replyMax;
-
- replyAck = acknowledge;
- replyMax = maximum;
- state = MqttKafkaState.closeReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doKafkaReset(traceId);
- }
-
- private void onMqttWindow(
- WindowFW window)
- {
- final long sequence = window.sequence();
- final long acknowledge = window.acknowledge();
- final int maximum = window.maximum();
- final long traceId = window.traceId();
- final long authorization = window.authorization();
- final long budgetId = window.budgetId();
- final int padding = window.padding();
- final int capabilities = window.capabilities();
-
- assert acknowledge <= sequence;
- assert sequence <= replySeq;
- assert acknowledge >= replyAck;
- assert maximum >= replyMax;
-
- replyAck = acknowledge;
- replyMax = maximum;
- replyPad = padding;
- state = MqttKafkaState.openReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doKafkaWindow(traceId, authorization, budgetId, padding, capabilities);
- }
-
- private void doMqttBegin(
- long traceId,
- long authorization,
- long affinity)
- {
- replySeq = delegate.replySeq;
- replyAck = delegate.replyAck;
- replyMax = delegate.replyMax;
- state = MqttKafkaState.openingReply(state);
-
- doBegin(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, affinity);
- }
-
- private void doMqttData(
- long traceId,
- long authorization,
- long budgetId,
- int reserved,
- int flags,
- OctetsFW payload,
- Flyweight extension)
- {
- doData(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, budgetId, flags, reserved, payload, extension);
-
- replySeq += reserved;
-
- assert replySeq <= replyAck + replyMax;
- }
-
- private void doMqttFlush(
- long traceId,
- long authorization,
- long budgetId,
- int reserved)
- {
- replySeq = delegate.replySeq;
-
- doFlush(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, budgetId, reserved, emptyRO);
- }
-
- private void doMqttAbort(
- long traceId,
- long authorization)
- {
- if (!MqttKafkaState.replyClosed(state))
- {
- replySeq = delegate.replySeq;
- state = MqttKafkaState.closeReply(state);
-
- doAbort(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId, authorization);
- }
- }
-
- private void doMqttEnd(
- long traceId,
- long authorization)
- {
- if (!MqttKafkaState.replyClosed(state))
- {
- replySeq = delegate.replySeq;
- state = MqttKafkaState.closeReply(state);
-
- doEnd(mqtt, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId, authorization);
- }
- }
-
- private void doMqttWindow(
- long authorization,
- long traceId,
- long budgetId,
- int padding,
- int capabilities)
- {
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
-
- doWindow(mqtt, originId, routedId, initialId, initialSeq, initialAck, initialMax,
- traceId, authorization, budgetId, padding, 0, capabilities);
- }
-
- private void doMqttReset(
- long traceId)
- {
- if (!MqttKafkaState.initialClosed(state))
- {
- state = MqttKafkaState.closeInitial(state);
-
- doReset(mqtt, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId);
- }
- }
- }
-
- final class KafkaProxy
- {
- private MessageConsumer kafka;
- private final long originId;
- private final long routedId;
- private final long initialId;
- private final long replyId;
- private final MqttSubscribeProxy delegate;
-
- private int state;
-
- private long initialSeq;
- private long initialAck;
- private int initialMax;
-
- private long replySeq;
- private long replyAck;
- private int replyMax;
- private int replyPad;
-
- private KafkaProxy(
- long originId,
- long routedId,
- MqttSubscribeProxy delegate)
- {
- this.originId = originId;
- this.routedId = routedId;
- this.delegate = delegate;
- this.initialId = supplyInitialId.applyAsLong(routedId);
- this.replyId = supplyReplyId.applyAsLong(initialId);
- }
-
- private void doKafkaBegin(
- long traceId,
- long authorization,
- long affinity)
- {
- initialSeq = delegate.initialSeq;
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
- state = MqttKafkaState.openingInitial(state);
-
- kafka = newKafkaStream(this::onKafkaMessage, originId, routedId, initialId, initialSeq, initialAck, initialMax,
- traceId, authorization, affinity);
- }
-
- private void doKafkaFlush(
- long traceId,
- long authorization,
- long budgetId,
- int reserved,
- Flyweight extension)
- {
- initialSeq = delegate.initialSeq;
-
- doFlush(kafka, originId, routedId, initialId, initialSeq, initialAck, initialMax,
- traceId, authorization, budgetId, reserved, extension);
- }
-
- private void doKafkaEnd(
- long traceId,
- long sequence,
- long authorization)
- {
- if (!MqttKafkaState.initialClosed(state))
- {
- initialSeq = delegate.initialSeq;
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
- state = MqttKafkaState.closeInitial(state);
-
- doEnd(kafka, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId, authorization);
- }
- }
-
- private void doKafkaAbort(
- long traceId,
- long authorization)
- {
- if (!MqttKafkaState.initialClosed(state))
- {
- initialSeq = delegate.initialSeq;
- initialAck = delegate.initialAck;
- initialMax = delegate.initialMax;
- state = MqttKafkaState.closeInitial(state);
-
- doAbort(kafka, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId, authorization);
- }
- }
-
- private void onKafkaMessage(
- int msgTypeId,
- DirectBuffer buffer,
- int index,
- int length)
- {
- switch (msgTypeId)
- {
- case BeginFW.TYPE_ID:
- final BeginFW begin = beginRO.wrap(buffer, index, index + length);
- onKafkaBegin(begin);
- break;
- case DataFW.TYPE_ID:
- final DataFW data = dataRO.wrap(buffer, index, index + length);
- onKafkaData(data);
- break;
- case EndFW.TYPE_ID:
- final EndFW end = endRO.wrap(buffer, index, index + length);
- onKafkaEnd(end);
- break;
- case AbortFW.TYPE_ID:
- final AbortFW abort = abortRO.wrap(buffer, index, index + length);
- onKafkaAbort(abort);
- break;
- case FlushFW.TYPE_ID:
- final FlushFW flush = flushRO.wrap(buffer, index, index + length);
- onKafkaFlush(flush);
- break;
- case WindowFW.TYPE_ID:
- final WindowFW window = windowRO.wrap(buffer, index, index + length);
- onKafkaWindow(window);
- break;
- case ResetFW.TYPE_ID:
- final ResetFW reset = resetRO.wrap(buffer, index, index + length);
- onKafkaReset(reset);
- break;
- }
- }
-
- private void onKafkaBegin(
- BeginFW begin)
- {
- final long sequence = begin.sequence();
- final long acknowledge = begin.acknowledge();
- final int maximum = begin.maximum();
- final long traceId = begin.traceId();
- final long authorization = begin.authorization();
- final long affinity = begin.affinity();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
- assert acknowledge >= replyAck;
-
- replySeq = sequence;
- replyAck = acknowledge;
- replyMax = maximum;
- state = MqttKafkaState.openingReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doMqttBegin(traceId, authorization, affinity);
- }
-
- private void onKafkaData(
- DataFW data)
- {
- final long sequence = data.sequence();
- final long acknowledge = data.acknowledge();
- final long traceId = data.traceId();
- final long authorization = data.authorization();
- final long budgetId = data.budgetId();
- final int reserved = data.reserved();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence + reserved;
-
- assert replyAck <= replySeq;
-
- if (replySeq > replyAck + replyMax)
- {
- doKafkaReset(traceId);
- delegate.doMqttAbort(traceId, authorization);
- }
- else
- {
- final int flags = data.flags();
- final OctetsFW payload = data.payload();
- final OctetsFW extension = data.extension();
- final ExtensionFW dataEx = extension.get(extensionRO::tryWrap);
- final KafkaDataExFW kafkaDataEx =
- dataEx != null && dataEx.typeId() == kafkaTypeId ? extension.get(kafkaDataExRO::tryWrap) : null;
- final KafkaMergedDataExFW kafkaMergedDataEx =
- kafkaDataEx != null && kafkaDataEx.kind() == KafkaDataExFW.KIND_MERGED ? kafkaDataEx.merged() : null;
- final Array32FW progress = kafkaMergedDataEx != null ? kafkaMergedDataEx.progress() : null;
- final OctetsFW key = kafkaMergedDataEx != null ? kafkaMergedDataEx.key().value() : null;
- final Array32FW headers = kafkaMergedDataEx != null ? kafkaMergedDataEx.headers() : null;
- //TODO: data
- final long filters = kafkaMergedDataEx != null ? kafkaMergedDataEx.filters() : 0;
-
- if (key != null)
- {
- String topicName = kafkaMergedDataEx.key().value()
- .get((b, o, m) -> b.getStringWithoutLengthUtf8(o, m - o));
- helper.visit(kafkaMergedDataEx);
- final Flyweight mqttSubscribeDataEx = mqttDataExRW.wrap(extBuffer, 0, extBuffer.capacity())
- .typeId(mqttTypeId)
- .subscribe(b ->
- {
- b.topic(topicName);
- for (int i = 0; i < subscriptionIds.size(); i++)
- {
- if (((filters >> i) & 1) == 1)
- {
- int index = i;
- b.subscriptionIdsItem(c -> c.set(subscriptionIds.get(index)));
- }
- }
- if (helper.timeout != -1)
- {
- b.expiryInterval(helper.timeout / 1000);
- }
- if (helper.contentType != null)
- {
- b.contentType(
- helper.contentType.buffer(), helper.contentType.offset(), helper.contentType.sizeof());
- }
- if (helper.format != null)
- {
- b.format(f -> f.set(MqttPayloadFormat.valueOf(helper.format)));
- }
- if (helper.replyTo != null)
- {
- b.responseTopic(
- helper.replyTo.buffer(), helper.replyTo.offset(), helper.replyTo.sizeof());
- }
- if (helper.correlation != null)
- {
- b.correlation(c -> c.bytes(helper.correlation));
- }
-
- final DirectBuffer buffer = kafkaMergedDataEx.buffer();
- final int limit = kafkaMergedDataEx.limit();
- helper.userPropertiesOffsets.forEach(o ->
- {
- final KafkaHeaderFW header = kafkaHeaderRO.wrap(buffer, o, limit);
- final OctetsFW name = header.name();
- final OctetsFW value = header.value();
- if (value != null)
- {
- b.propertiesItem(pi -> pi
- .key(name.buffer(), name.offset(), name.sizeof())
- .value(value.buffer(), value.offset(), value.sizeof()));
- }
- });
- }).build();
-
- delegate.doMqttData(traceId, authorization, budgetId, reserved, flags, payload, mqttSubscribeDataEx);
- }
- }
- }
-
- private void onKafkaEnd(
- EndFW end)
- {
- final long sequence = end.sequence();
- final long acknowledge = end.acknowledge();
- final long traceId = end.traceId();
- final long authorization = end.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
- state = MqttKafkaState.closeReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doMqttEnd(traceId, authorization);
- }
-
- private void onKafkaFlush(
- FlushFW flush)
- {
- final long sequence = flush.sequence();
- final long acknowledge = flush.acknowledge();
- final long traceId = flush.traceId();
- final long authorization = flush.authorization();
- final long budgetId = flush.budgetId();
- final int reserved = flush.reserved();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
-
- assert replyAck <= replySeq;
-
- delegate.doMqttFlush(traceId, authorization, budgetId, reserved);
- }
-
- private void onKafkaAbort(
- AbortFW abort)
- {
- final long sequence = abort.sequence();
- final long acknowledge = abort.acknowledge();
- final long traceId = abort.traceId();
- final long authorization = abort.authorization();
-
- assert acknowledge <= sequence;
- assert sequence >= replySeq;
-
- replySeq = sequence;
- state = MqttKafkaState.closeReply(state);
-
- assert replyAck <= replySeq;
-
- delegate.doMqttAbort(traceId, authorization);
- }
-
- private void onKafkaWindow(
- WindowFW window)
- {
- final long sequence = window.sequence();
- final long acknowledge = window.acknowledge();
- final int maximum = window.maximum();
- final long authorization = window.authorization();
- final long traceId = window.traceId();
- final long budgetId = window.budgetId();
- final int padding = window.padding();
- final int capabilities = window.capabilities();
-
- assert acknowledge <= sequence;
- assert acknowledge >= delegate.initialAck;
- assert maximum >= delegate.initialMax;
-
- initialAck = acknowledge;
- initialMax = maximum;
- state = MqttKafkaState.openInitial(state);
-
- assert initialAck <= initialSeq;
-
- delegate.doMqttWindow(authorization, traceId, budgetId, padding, capabilities);
- }
-
- private void onKafkaReset(
- ResetFW reset)
- {
- final long sequence = reset.sequence();
- final long acknowledge = reset.acknowledge();
- final long traceId = reset.traceId();
-
- assert acknowledge <= sequence;
- assert acknowledge >= delegate.initialAck;
-
- delegate.initialAck = acknowledge;
-
- assert delegate.initialAck <= delegate.initialSeq;
-
- delegate.doMqttReset(traceId);
- }
-
- private void doKafkaReset(
- long traceId)
- {
- if (!MqttKafkaState.replyClosed(state))
- {
- state = MqttKafkaState.closeReply(state);
-
- doReset(kafka, originId, routedId, replyId, replySeq, replyAck, replyMax, traceId);
- }
- }
-
- private void doKafkaWindow(
- long traceId,
- long authorization,
- long budgetId,
- int padding,
- int capabilities)
- {
- replyAck = delegate.replyAck;
- replyMax = delegate.replyMax;
- replyPad = delegate.replyPad;
-
- doWindow(kafka, originId, routedId, replyId, replySeq, replyAck, replyMax,
- traceId, authorization, budgetId, padding, replyPad, capabilities);
- }
- }
-
-
- private void doBegin(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long affinity)
- {
- final BeginFW begin = beginRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .affinity(affinity)
- .build();
-
- receiver.accept(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof());
- }
-
- private void doData(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long budgetId,
- int flags,
- int reserved,
- OctetsFW payload,
- Flyweight extension)
- {
- final DataFW frame = dataRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .flags(flags)
- .budgetId(budgetId)
- .reserved(reserved)
- .payload(payload)
- .extension(extension.buffer(), extension.offset(), extension.sizeof())
- .build();
-
- receiver.accept(frame.typeId(), frame.buffer(), frame.offset(), frame.sizeof());
- }
-
- private void doEnd(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization)
- {
- final EndFW end = endRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .build();
-
- receiver.accept(end.typeId(), end.buffer(), end.offset(), end.sizeof());
- }
-
- private void doAbort(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization)
- {
- final AbortFW abort = abortRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .build();
-
- receiver.accept(abort.typeId(), abort.buffer(), abort.offset(), abort.sizeof());
- }
-
- private void doFlush(
- MessageConsumer receiver,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long budgetId,
- int reserved,
- Flyweight extension)
- {
- final FlushFW flush = flushRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .budgetId(budgetId)
- .reserved(reserved)
- .extension(extension.buffer(), extension.offset(), extension.sizeof())
- .build();
-
- receiver.accept(flush.typeId(), flush.buffer(), flush.offset(), flush.sizeof());
- }
-
- private MessageConsumer newKafkaStream(
- MessageConsumer sender,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long affinity)
- {
- final KafkaBeginExFW kafkaBeginEx =
- kafkaBeginExRW.wrap(writeBuffer, BeginFW.FIELD_OFFSET_EXTENSION, writeBuffer.capacity())
- .typeId(kafkaTypeId)
- .merged(m ->
- {
- m.capabilities(c -> c.set(KafkaCapabilities.FETCH_ONLY));
- m.topic(kafkaMessagesTopicName);
- m.partitionsItem(p ->
- p.partitionId(-1)
- .partitionOffset(-1L));
- filters.forEach(filter ->
-
- m.filtersItem(f ->
- {
- f.conditionsItem(ci ->
- {
- subscriptionIds.add((int) filter.subscriptionId());
- buildHeaders(ci, filter.pattern().asString());
- });
- boolean noLocal = (filter.flags() & NO_LOCAL_FLAG) != 0;
- if (noLocal)
- {
- final DirectBuffer valueBuffer = new String16FW(clientId).value();
- f.conditionsItem(i -> i.not(n -> n.condition(c -> c.header(h ->
- h.nameLen(helper.kafkaLocalHeaderName.sizeof())
- .name(helper.kafkaLocalHeaderName)
- .valueLen(valueBuffer.capacity())
- .value(valueBuffer, 0, valueBuffer.capacity())))));
- }
- }));
- m.evaluation(b -> b.set(KafkaEvaluation.EAGER));
- })
- .build();
-
-
- final BeginFW begin = beginRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .affinity(affinity)
- .extension(kafkaBeginEx.buffer(), kafkaBeginEx.offset(), kafkaBeginEx.sizeof())
- .build();
-
- MessageConsumer receiver =
- streamFactory.newStream(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof(), sender);
-
- receiver.accept(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof());
-
- return receiver;
- }
-
- private void buildHeaders(
- KafkaConditionFW.Builder conditionBuilder,
- String pattern)
- {
- String[] headers = pattern.split("/");
- conditionBuilder.headers(hb ->
- {
- hb.nameLen(helper.kafkaTopicHeaderName.sizeof());
- hb.name(helper.kafkaTopicHeaderName);
- for (String header : headers)
- {
- if (header.equals(MQTT_SINGLE_LEVEL_WILDCARD))
- {
- hb.valuesItem(vi -> vi.skip(sb -> sb.set(KafkaSkip.SKIP)));
- }
- else if (header.equals(MQTT_MULTI_LEVEL_WILDCARD))
- {
- hb.valuesItem(vi -> vi.skip(sb -> sb.set(KafkaSkip.SKIP_MANY)));
- }
- else
- {
- final DirectBuffer valueBuffer = new String16FW(header).value();
- hb.valuesItem(vi -> vi.value(vb -> vb.length(valueBuffer.capacity())
- .value(valueBuffer, 0, valueBuffer.capacity())));
-
- }
- }
- });
- }
-
- private void doWindow(
- MessageConsumer sender,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId,
- long authorization,
- long budgetId,
- int padding,
- int minimum,
- int capabilities)
- {
- final WindowFW window = windowRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .authorization(authorization)
- .budgetId(budgetId)
- .padding(padding)
- .minimum(minimum)
- .capabilities(capabilities)
- .build();
-
- sender.accept(window.typeId(), window.buffer(), window.offset(), window.sizeof());
- }
-
- private void doReset(
- MessageConsumer sender,
- long originId,
- long routedId,
- long streamId,
- long sequence,
- long acknowledge,
- int maximum,
- long traceId)
- {
- final ResetFW reset = resetRW.wrap(writeBuffer, 0, writeBuffer.capacity())
- .originId(originId)
- .routedId(routedId)
- .streamId(streamId)
- .sequence(sequence)
- .acknowledge(acknowledge)
- .maximum(maximum)
- .traceId(traceId)
- .build();
-
- sender.accept(reset.typeId(), reset.buffer(), reset.offset(), reset.sizeof());
- }
-}
diff --git a/incubator/binding-mqtt-kafka/src/main/moditect/module-info.java b/incubator/binding-mqtt-kafka/src/main/moditect/module-info.java
deleted file mode 100644
index 2fe3bda1fa..0000000000
--- a/incubator/binding-mqtt-kafka/src/main/moditect/module-info.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-module io.aklivity.zilla.runtime.binding.mqtt.kafka
-{
- requires io.aklivity.zilla.runtime.engine;
-
- provides io.aklivity.zilla.runtime.engine.binding.BindingFactorySpi
- with io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.MqttKafkaBindingFactorySpi;
-
- provides io.aklivity.zilla.runtime.engine.config.ConditionConfigAdapterSpi
- with io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.config.MqttKafkaConditionConfigAdapter;
-
-}
diff --git a/incubator/binding-mqtt-kafka/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaPublishProxyIT.java b/incubator/binding-mqtt-kafka/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaPublishProxyIT.java
deleted file mode 100644
index 132459d1c4..0000000000
--- a/incubator/binding-mqtt-kafka/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaPublishProxyIT.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.stream;
-
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_BUFFER_SLOT_CAPACITY;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-
-public class MqttKafkaPublishProxyIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("mqtt", "io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt")
- .addScriptRoot("kafka", "io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(ENGINE_BUFFER_SLOT_CAPACITY, 8192)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/kafka/config")
- .external("kafka0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.client.sent.abort/client",
- "${kafka}/publish.client.sent.abort/server"})
- public void shouldReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.client.sent.reset/client",
- "${kafka}/publish.client.sent.reset/server"})
- public void shouldReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.server.sent.abort/client",
- "${kafka}/publish.server.sent.abort/server"})
- public void shouldReceiveServerSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.server.sent.flush/client",
- "${kafka}/publish.server.sent.flush/server"})
- public void shouldReceiveServerSentFlush() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.server.sent.reset/client",
- "${kafka}/publish.server.sent.reset/server"})
- public void shouldReceiveServerSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.server.sent.data/client",
- "${kafka}/publish.server.sent.data/server"})
- public void shouldAbortWhenServerSentData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.one.message/client",
- "${kafka}/publish.one.message/server"})
- public void shouldSendOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.empty.message/client",
- "${kafka}/publish.empty.message/server"})
- public void shouldSendEmptyMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.multiple.messages/client",
- "${kafka}/publish.multiple.messages/server"})
- public void shouldSendMultipleMessages() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.with.user.property/client",
- "${kafka}/publish.with.user.property/server"})
- public void shouldSendWithUserProperty() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.with.user.properties.distinct/client",
- "${kafka}/publish.with.user.properties.distinct/server"})
- public void shouldSendWithDistinctUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/publish.with.user.properties.repeated/client",
- "${kafka}/publish.with.user.properties.repeated/server"})
- public void shouldSendWithRepeatedUserProperties() throws Exception
- {
- k3po.finish();
- }
-
-}
diff --git a/incubator/binding-mqtt-kafka/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeProxyIT.java b/incubator/binding-mqtt-kafka/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeProxyIT.java
deleted file mode 100644
index bc646e6e76..0000000000
--- a/incubator/binding-mqtt-kafka/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeProxyIT.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc
- *
- * Licensed under the Aklivity Community License (the "License"); you may not use
- * this file except in compliance with the License. You may obtain a copy of the
- * License at
- *
- * https://www.aklivity.io/aklivity-community-license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OF ANY KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.kafka.internal.stream;
-
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_BUFFER_SLOT_CAPACITY;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-
-public class MqttKafkaSubscribeProxyIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("mqtt", "io/aklivity/zilla/specs/binding/mqtt/kafka/streams/mqtt")
- .addScriptRoot("kafka", "io/aklivity/zilla/specs/binding/mqtt/kafka/streams/kafka");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(ENGINE_BUFFER_SLOT_CAPACITY, 8192)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/kafka/config")
- .external("kafka0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.client.sent.abort/client",
- "${kafka}/subscribe.client.sent.abort/server"})
- public void shouldReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.client.sent.data/client",
- "${kafka}/subscribe.client.sent.data/server"})
- public void shouldAbortWhenClientSentData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.client.sent.reset/client",
- "${kafka}/subscribe.client.sent.reset/server"})
- public void shouldReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.server.sent.abort/client",
- "${kafka}/subscribe.server.sent.abort/server"})
- public void shouldReceiveServerSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.server.sent.flush/client",
- "${kafka}/subscribe.server.sent.flush/server"})
- public void shouldReceiveServerSentFlush() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.server.sent.reset/client",
- "${kafka}/subscribe.server.sent.reset/server"})
- public void shouldReceiveServerSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.one.message/client",
- "${kafka}/subscribe.one.message/server"})
- public void shouldReceiveOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.one.message.receive.response.topic.and.correlation.data/client",
- "${kafka}/subscribe.one.message.receive.response.topic.and.correlation.data/server"})
- public void shouldReceiveCorrelationData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.one.message.user.properties.unaltered/client",
- "${kafka}/subscribe.one.message.user.properties.unaltered/server"})
- public void shouldReceiveOneMessageWithUserPropertiesUnaltered() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.publish.no.local/client",
- "${kafka}/subscribe.publish.no.local/server"})
- public void shouldNotReceiveLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.receive.message.overlapping.wildcard/client",
- "${kafka}/subscribe.receive.message.overlapping.wildcard/server"})
- public void shouldReceiveMessageOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.receive.message.wildcard/client",
- "${kafka}/subscribe.receive.message.wildcard/server"})
- public void shouldReceiveOneMessageWithPatternTopic() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filter.multi.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.multi.level.wildcard/server"})
- public void shouldFilterMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filter.single.and.multi.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.single.and.multi.level.wildcard/server"})
- public void shouldFilterSingleAndMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filter.single.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.single.level.wildcard/server"})
- public void shouldFilterSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filter.two.single.level.wildcard/client",
- "${kafka}/subscribe.topic.filter.two.single.level.wildcard/server"})
- public void shouldFilterTwoSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filters.aggregated.both.exact/client",
- "${kafka}/subscribe.topic.filters.aggregated.both.exact/server"})
- public void shouldFilterAggregatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filters.aggregated.exact.and.wildcard/client",
- "${kafka}/subscribe.topic.filters.aggregated.exact.and.wildcard/server"})
- public void shouldFilterAggregatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filters.isolated.both.exact/client",
- "${kafka}/subscribe.topic.filters.isolated.both.exact/server"})
- public void shouldFilterIsolatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filters.isolated.exact.and.wildcard/client",
- "${kafka}/subscribe.topic.filters.isolated.exact.and.wildcard/server"})
- public void shouldFilterIsolatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/subscribe.topic.filters.overlapping.wildcards/client",
- "${kafka}/subscribe.topic.filters.overlapping.wildcards/server"})
- public void shouldFilterOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/unsubscribe.after.subscribe/client",
- "${kafka}/unsubscribe.after.subscribe/server"})
- public void shouldAcknowledge() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("proxy.yaml")
- @Specification({
- "${mqtt}/unsubscribe.topic.filter.single/client",
- "${kafka}/unsubscribe.topic.filter.single/server"})
- public void shouldAcknowledgeSingleTopicFilter() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/pom.xml b/incubator/binding-mqtt.spec/pom.xml
deleted file mode 100644
index af964a16db..0000000000
--- a/incubator/binding-mqtt.spec/pom.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
- 4.0.0
-
- io.aklivity.zilla
- incubator
- 0.9.51
- ../pom.xml
-
-
- binding-mqtt.spec
- zilla::incubator::binding-mqtt.spec
-
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
-
- 11
- 11
- 0.94
- 0
-
-
-
-
- org.kaazing
- k3po.lang
- provided
-
-
- ${project.groupId}
- engine.spec
- ${project.version}
-
-
- junit
- junit
- test
-
-
- org.kaazing
- k3po.junit
- test
-
-
- org.hamcrest
- hamcrest-library
- test
-
-
-
-
-
-
- src/main/resources
-
-
- src/main/scripts
-
-
-
-
-
- org.jasig.maven
- maven-notice-plugin
-
-
- ${project.groupId}
- flyweight-maven-plugin
- ${project.version}
-
- core mqtt
- io.aklivity.zilla.specs.binding.mqtt.internal.types
-
-
-
-
- validate
- generate
-
-
-
-
-
- com.mycila
- license-maven-plugin
-
-
- maven-checkstyle-plugin
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- org.moditect
- moditect-maven-plugin
-
-
- org.kaazing
- k3po-maven-plugin
-
-
- ${project.groupId}
- engine
- ${project.version}
- test-jar
-
-
- ${project.groupId}
- engine
- ${project.version}
-
-
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
- io/aklivity/zilla/specs/binding/mqtt/internal/types/**/*.class
-
-
-
- BUNDLE
-
-
- INSTRUCTION
- COVEREDRATIO
- ${jacoco.coverage.ratio}
-
-
- CLASS
- MISSEDCOUNT
- ${jacoco.missed.count}
-
-
-
-
-
-
-
-
-
diff --git a/incubator/binding-mqtt.spec/src/main/resources/META-INF/zilla/mqtt.idl b/incubator/binding-mqtt.spec/src/main/resources/META-INF/zilla/mqtt.idl
deleted file mode 100644
index a4718e0f40..0000000000
--- a/incubator/binding-mqtt.spec/src/main/resources/META-INF/zilla/mqtt.idl
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-scope mqtt
-{
- enum MqttSubscribeFlags (uint8)
- {
- SEND_RETAINED(0),
- RETAIN_AS_PUBLISHED(1),
- NO_LOCAL(2),
- RETAIN(3)
- }
-
- enum MqttQoS (uint8)
- {
- AT_MOST_ONCE(0),
- AT_LEAST_ONCE(1),
- EXACTLY_ONCE(2)
- }
-
- enum MqttPublishFlags (uint8)
- {
- RETAIN(0)
- }
-
- enum MqttCapabilities (uint8)
- {
- PUBLISH_ONLY(1),
- SUBSCRIBE_ONLY(2),
- SESSION(3)
- }
-
- enum MqttEndReasonCode (uint8)
- {
- DISCONNECT(0),
- KEEP_ALIVE_EXPIRY(1),
- DISCONNECT_WITH_WILL(2)
- }
-
- enum MqttPayloadFormat
- {
- BINARY,
- TEXT
- }
-
- struct MqttBinary
- {
- int32 length;
- octets[length] bytes = null;
- }
-
- struct MqttUserProperty
- {
- string16 key;
- string16 value;
- }
-
- struct MqttTopicFilter
- {
- uint32 subscriptionId = 0;
- uint8 qos = 0;
- uint8 flags = 1;
- string16 pattern;
- }
-
- struct MqttSessionState
- {
- string16 clientId;
- MqttTopicFilter[] subscriptions;
- }
-
- struct MqttMessage
- {
- string16 topic = null;
- int32 delay = 0;
- uint8 qos = 0;
- uint8 flags = 0;
- int32 expiryInterval = -1;
- string16 contentType = null;
- MqttPayloadFormat format = BINARY;
- string16 responseTopic = null;
- MqttBinary correlation;
- MqttUserProperty[] properties;
- MqttBinary payload;
- }
-
- scope stream
- {
- enum MqttExtensionKind (uint8)
- {
- SESSION (2),
- SUBSCRIBE (1),
- PUBLISH (0)
- }
-
- union MqttBeginEx switch (uint8) extends core::stream::Extension
- {
- case 0: mqtt::stream::MqttPublishBeginEx publish;
- case 1: mqtt::stream::MqttSubscribeBeginEx subscribe;
- case 2: mqtt::stream::MqttSessionBeginEx session;
- }
-
- struct MqttSessionBeginEx
- {
- string16 clientId;
- int32 expiry = 0;
- MqttMessage will;
- }
-
- struct MqttSubscribeBeginEx
- {
- string16 clientId;
- MqttTopicFilter[] filters;
- }
-
- struct MqttPublishBeginEx
- {
- string16 clientId;
- string16 topic;
- }
-
- union MqttDataEx switch (uint8) extends core::stream::Extension
- {
- case 0: mqtt::stream::MqttPublishDataEx publish;
- case 1: mqtt::stream::MqttSubscribeDataEx subscribe;
- }
-
- struct MqttSubscribeDataEx
- {
- int32 deferred = 0; // INIT only (TODO: move to DATA frame)
- string16 topic = null;
- uint8 qos = 0;
- uint8 flags = 0;
- varuint32[] subscriptionIds;
- int32 expiryInterval = -1;
- string16 contentType = null;
- MqttPayloadFormat format = BINARY;
- string16 responseTopic = null;
- MqttBinary correlation;
- MqttUserProperty[] properties;
- }
-
- struct MqttPublishDataEx
- {
- int32 deferred = 0; // INIT only (TODO: move to DATA frame)
- string16 topic = null;
- uint8 qos = 0;
- uint8 flags = 0;
- int32 expiryInterval = -1;
- string16 contentType = null;
- MqttPayloadFormat format = BINARY;
- string16 responseTopic = null;
- MqttBinary correlation;
- MqttUserProperty[] properties;
- }
-
- struct MqttEndEx extends core::stream::Extension
- {
- MqttEndReasonCode reasonCode = DISCONNECT;
- }
-
- union MqttFlushEx switch (uint8) extends core::stream::Extension
- {
- case 1: mqtt::stream::MqttSubscribeFlushEx subscribe;
- }
-
- struct MqttSubscribeFlushEx
- {
- MqttTopicFilter[] filters;
- }
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.sessions.yaml b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.sessions.yaml
deleted file mode 100644
index 1b38a58862..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.sessions.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
----
-name: test
-bindings:
- net0:
- type: mqtt
- kind: server
- routes:
- - exit: app0
- when:
- - capabilities: session
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.publish.only.yaml b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.publish.only.yaml
deleted file mode 100644
index 2d55dc5836..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.publish.only.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
----
-name: test
-bindings:
- net0:
- type: mqtt
- kind: server
- routes:
- - exit: app0
- when:
- - topic: sensor/one
- capabilities: publish
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.subscribe.only.yaml b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.subscribe.only.yaml
deleted file mode 100644
index b6ab15bf65..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.subscribe.only.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
----
-name: test
-bindings:
- net0:
- type: mqtt
- kind: server
- routes:
- - exit: app0
- when:
- - topic: sensor/one
- capabilities: subscribe
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.yaml b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.yaml
deleted file mode 100644
index 765e5b4c09..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/config/server.when.topic.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
----
-name: test
-bindings:
- net0:
- type: mqtt
- kind: server
- routes:
- - exit: app0
- when:
- - topic: sensor/one
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/schema/mqtt.schema.patch.json b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/schema/mqtt.schema.patch.json
deleted file mode 100644
index 21575a7bcd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/schema/mqtt.schema.patch.json
+++ /dev/null
@@ -1,87 +0,0 @@
-[
- {
- "op": "add",
- "path": "/$defs/binding/properties/type/enum/-",
- "value": "mqtt"
- },
- {
- "op": "add",
- "path": "/$defs/binding/allOf/-",
- "value":
- {
- "if":
- {
- "properties":
- {
- "type":
- {
- "const": "mqtt"
- }
- }
- },
- "then":
- {
- "properties":
- {
- "type":
- {
- "const": "mqtt"
- },
- "kind":
- {
- "enum": [ "server" ]
- },
- "vault": false,
- "options": false,
- "routes":
- {
- "items":
- {
- "properties":
- {
- "when":
- {
- "items":
- {
- "additionalProperties": false,
- "properties":
- {
- "topic":
- {
- "title": "Topic",
- "type": "string"
- },
- "capabilities":
- {
- "title": "Capabilities",
- "type": "string",
- "enum": [ "session", "publish", "subscribe", "publish_and_subscribe" ],
- "default": "publish_and_subscribe"
- }
- }
- }
- },
- "with": false
- }
- }
- }
- },
- "anyOf":
- [
- {
- "required":
- [
- "exit"
- ]
- },
- {
- "required":
- [
- "routes"
- ]
- }
- ]
- }
- }
- }
-]
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/client.sent.abort/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/client.sent.abort/client.rpt
deleted file mode 100644
index 42bd77a5c9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/client.sent.abort/client.rpt
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-connected
-
-write abort
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/client.sent.abort/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/client.sent.abort/server.rpt
deleted file mode 100644
index 128b64c61c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/client.sent.abort/server.rpt
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-connected
-
-read aborted
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/connect.max.packet.size.exceeded/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/connect.max.packet.size.exceeded/client.rpt
deleted file mode 100644
index 6add586d14..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/connect.max.packet.size.exceeded/client.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .build()
- .build()}
-
-read "message that should not arrive to client, since it exceeds max packet limit"
-
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/connect.max.packet.size.exceeded/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/connect.max.packet.size.exceeded/server.rpt
deleted file mode 100644
index fe0b5d0540..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/connect.max.packet.size.exceeded/server.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .build()
- .build()}
-
-write "message that should not arrive to client, since it exceeds max packet limit"
-write flush
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.message/client.rpt
deleted file mode 100644
index 9218fc2e2b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.message/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-write zilla:data.empty
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.message/server.rpt
deleted file mode 100644
index a6480e979d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.message/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.retained.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.retained.message/client.rpt
deleted file mode 100644
index 56622b6ab3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.retained.message/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-write zilla:data.empty
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.retained.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.retained.message/server.rpt
deleted file mode 100644
index a73248bd47..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.empty.retained.message/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.message.with.topic.alias/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.message.with.topic.alias/client.rpt
deleted file mode 100644
index 8a47c697ab..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.message.with.topic.alias/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.message.with.topic.alias/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.message.with.topic.alias/server.rpt
deleted file mode 100644
index 97a141e137..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.message.with.topic.alias/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.distinct/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.distinct/client.rpt
deleted file mode 100644
index 55f81d6eb8..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.distinct/client.rpt
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message1"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message3"
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/two")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-write "message2"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-write "message4"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.distinct/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.distinct/server.rpt
deleted file mode 100644
index e5908d22bf..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.distinct/server.rpt
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message1"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message3"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/two")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-read "message2"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .qos("AT_MOST_ONCE")
- .build()
- .build()}
-
-read "message4"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.invalid.scope/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.invalid.scope/client.rpt
deleted file mode 100644
index 1c75847256..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.invalid.scope/client.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message1"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message2"
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.invalid.scope/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.invalid.scope/server.rpt
deleted file mode 100644
index 8684321d2f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.invalid.scope/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message1"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message2"
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.repeated/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.repeated/client.rpt
deleted file mode 100644
index a5967e8832..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.repeated/client.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message1"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message2"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message3"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.repeated/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.repeated/server.rpt
deleted file mode 100644
index aefdff5a25..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.repeated/server.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message1"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message2"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message3"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.replaced/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.replaced/client.rpt
deleted file mode 100644
index 0beb41c4a2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.replaced/client.rpt
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message1"
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/two")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-write "message2"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-write "message3"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.replaced/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.replaced/server.rpt
deleted file mode 100644
index 984617ccd3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.messages.with.topic.alias.replaced/server.rpt
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message1"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/two")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-read "message2"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-read "message3"
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.multiple.messages/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.multiple.messages/client.rpt
deleted file mode 100644
index af278c7e21..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.multiple.messages/client.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message1"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "test"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-write "message3"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.multiple.messages/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.multiple.messages/server.rpt
deleted file mode 100644
index 635bc856e7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.multiple.messages/server.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message1"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "test"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .build()
- .build()}
-
-read "message3"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message.subscribe.unfragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message.subscribe.unfragmented/client.rpt
deleted file mode 100644
index bf770b1dd7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message.subscribe.unfragmented/client.rpt
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-write "message"
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-write "message2"
-
-write notify PUBLISHED
-
-connect await PUBLISHED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message.subscribe.unfragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message.subscribe.unfragmented/server.rpt
deleted file mode 100644
index 1e5af8308b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message.subscribe.unfragmented/server.rpt
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-read "message"
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-read "message2"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message/client.rpt
deleted file mode 100644
index f650efd701..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message/client.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-write "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message/server.rpt
deleted file mode 100644
index d23c11c3cd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.one.message/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .qos("AT_MOST_ONCE")
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.retained/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.retained/client.rpt
deleted file mode 100644
index 4fc78dd93d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.retained/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-
-write "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.retained/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.retained/server.rpt
deleted file mode 100644
index 74f758d9c5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.retained/server.rpt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.distinct/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.distinct/client.rpt
deleted file mode 100644
index be574df74d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.distinct/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("/sensors/1")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("/sensors/1")
- .userProperty("row1", "1")
- .userProperty("row2", "2")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.distinct/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.distinct/server.rpt
deleted file mode 100644
index cc503e4eec..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.distinct/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("/sensors/1")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("/sensors/1")
- .userProperty("row1", "1")
- .userProperty("row2", "2")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.repeated/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.repeated/client.rpt
deleted file mode 100644
index 4a45d83c7b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.repeated/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("/sensors/1")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("/sensors/1")
- .userProperty("row1", "1")
- .userProperty("row1", "2")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.repeated/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.repeated/server.rpt
deleted file mode 100644
index 5bf728ae4c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.properties.repeated/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("/sensors/1")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("/sensors/1")
- .userProperty("row1", "1")
- .userProperty("row1", "2")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.property/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.property/client.rpt
deleted file mode 100644
index f29fccc076..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.property/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("/sensors/1")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("/sensors/1")
- .userProperty("row", "1")
- .build()
- .build()}
-
-write "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.property/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.property/server.rpt
deleted file mode 100644
index dad063c03d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/publish.with.user.property/server.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("755452d5-e2ef-4113-b9c6-2f53de96fd76")
- .topic("/sensors/1")
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("/sensors/1")
- .userProperty("row", "1")
- .build()
- .build()}
-
-read "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}"
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.abort.reconnect.non.clean.start/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.abort.reconnect.non.clean.start/client.rpt
deleted file mode 100644
index a5432b0a7d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.abort.reconnect.non.clean.start/client.rpt
+++ /dev/null
@@ -1,109 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write abort
-write notify SESSION_READY
-
-
-connect await SESSION_READY
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-connected
-
-write abort
-write notify ABORTED
-
-
-connect await ABORTED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write notify SESSION_READY2
-
-connect await SESSION_READY2
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.abort.reconnect.non.clean.start/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.abort.reconnect.non.clean.start/server.rpt
deleted file mode 100644
index 81c799aa72..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.abort.reconnect.non.clean.start/server.rpt
+++ /dev/null
@@ -1,102 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-
-read aborted
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read aborted
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.client.takeover/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.client.takeover/client.rpt
deleted file mode 100644
index d79c901aa3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.client.takeover/client.rpt
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write notify FIRST_CONNECTED
-
-read closed
-write close
-
-connect await FIRST_CONNECTED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-connected
-
-write close
-read closed
-
-write notify DISCONNECTED
-
-
-connect await DISCONNECTED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write notify SESSION_READY2
-
-connect await SESSION_READY2
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.client.takeover/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.client.takeover/server.rpt
deleted file mode 100644
index 81dc1dedde..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.client.takeover/server.rpt
+++ /dev/null
@@ -1,108 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read await CLIENT_TAKEOVER
-
-write close
-read closed
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read closed
-write close
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write notify CLIENT_TAKEOVER
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.connect.with.session.expiry/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.connect.with.session.expiry/client.rpt
deleted file mode 100644
index 7c06e2e3a0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.connect.with.session.expiry/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .expiry(1)
- .build()
- .build()}
-connected
-
-read zilla:data.empty
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.connect.with.session.expiry/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.connect.with.session.expiry/server.rpt
deleted file mode 100644
index 113f780150..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.connect.with.session.expiry/server.rpt
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .expiry(1)
- .build()
- .build()}
-connected
-
-write zilla:data.empty
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.exists.clean.start/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.exists.clean.start/client.rpt
deleted file mode 100644
index 26a9a80ed1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.exists.clean.start/client.rpt
+++ /dev/null
@@ -1,88 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write notify CLIENT_TAKEOVER
-
-read closed
-write close
-
-write notify SESSION_READY
-
-connect await SESSION_READY
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write close
-read closed
-
-connect await SESSION_READY
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write zilla:data.empty
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.exists.clean.start/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.exists.clean.start/server.rpt
deleted file mode 100644
index 026b97886b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.exists.clean.start/server.rpt
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read await CLIENT_TAKEOVER
-
-write close
-read closed
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read closed
-write close
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read zilla:data.empty
-write notify CLIENT_TAKEOVER
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe.via.session.state/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe.via.session.state/client.rpt
deleted file mode 100644
index 9ea474d72b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe.via.session.state/client.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one")
- .build()}
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe.via.session.state/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe.via.session.state/server.rpt
deleted file mode 100644
index e24c364374..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe.via.session.state/server.rpt
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one")
- .build()}
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe/client.rpt
deleted file mode 100644
index ac18737ae1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe/client.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe/server.rpt
deleted file mode 100644
index b40a5ad9a5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.subscribe/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe.deferred/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe.deferred/client.rpt
deleted file mode 100644
index 781d702696..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe.deferred/client.rpt
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .subscription("sensor/two", 1)
- .build()}
-
-write notify UNSUBSCRIBE_ALL_FILTERS
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .subscription("sensor/two", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .build()}
-
-read ${mqtt:session()
- .clientId("client")
- .build()}
-
-write notify SESSION_FINISHED
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe.deferred/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe.deferred/server.rpt
deleted file mode 100644
index 113ba9999a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe.deferred/server.rpt
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .subscription("sensor/two", 1)
- .build()}
-
-read await UNSUBSCRIBE_ALL_FILTERS
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .subscription("sensor/two", 1)
- .build()}
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .build()}
-write flush
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe/client.rpt
deleted file mode 100644
index e9c72a820c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe/client.rpt
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .build()}
-
-read ${mqtt:session()
- .clientId("client")
- .build()}
-
-write notify SESSION_READY
-
-
-connect await SESSION_READY
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe/server.rpt
deleted file mode 100644
index 9d0e5a0525..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.after.subscribe/server.rpt
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .build()}
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.via.session.state/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.via.session.state/client.rpt
deleted file mode 100644
index fb769fed46..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.via.session.state/client.rpt
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-
-read zilla:data.empty
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write notify SUBSCRIBED
-
-read ${mqtt:session()
- .clientId("client")
- .build()}
-
-write notify SESSION_READY
-
-
-connect await SESSION_READY
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.via.session.state/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.via.session.state/server.rpt
deleted file mode 100644
index cf0094889c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.unsubscribe.via.session.state/server.rpt
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("client")
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-
-write ${mqtt:session()
- .clientId("client")
- .subscription("sensor/one", 1)
- .build()}
-write flush
-
-read await SUBSCRIBED
-write ${mqtt:session()
- .clientId("client")
- .build()}
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.disconnect.with.will.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.disconnect.with.will.message/client.rpt
deleted file mode 100644
index 327eacf0dd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.disconnect.with.will.message/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write zilla:end.ext ${mqtt:endEx()
- .typeId(zilla:id("mqtt"))
- .reason("DISCONNECT_WITH_WILL")
- .build()}
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.disconnect.with.will.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.disconnect.with.will.message/server.rpt
deleted file mode 100644
index 7fa2aa8b91..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.disconnect.with.will.message/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read zilla:end.ext ${mqtt:endEx()
- .typeId(zilla:id("mqtt"))
- .reason("DISCONNECT_WITH_WILL")
- .build()}
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.no.ping.within.keep.alive/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.no.ping.within.keep.alive/client.rpt
deleted file mode 100644
index 1a916fea30..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.no.ping.within.keep.alive/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write zilla:end.ext ${mqtt:endEx()
- .typeId(zilla:id("mqtt"))
- .reason("KEEP_ALIVE_EXPIRY")
- .build()}
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.no.ping.within.keep.alive/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.no.ping.within.keep.alive/server.rpt
deleted file mode 100644
index 7d09b0668c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.no.ping.within.keep.alive/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read zilla:end.ext ${mqtt:endEx()
- .typeId(zilla:id("mqtt"))
- .reason("KEEP_ALIVE_EXPIRY")
- .build()}
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.normal.disconnect/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.normal.disconnect/client.rpt
deleted file mode 100644
index 108080f362..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.normal.disconnect/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
-
-write zilla:end.ext ${mqtt:endEx()
- .typeId(zilla:id("mqtt"))
- .reason("DISCONNECT")
- .build()}
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.normal.disconnect/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.normal.disconnect/server.rpt
deleted file mode 100644
index 94489d98e3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.normal.disconnect/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
-
-read zilla:end.ext ${mqtt:endEx()
- .typeId(zilla:id("mqtt"))
- .reason("DISCONNECT")
- .build()}
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.retain/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.retain/client.rpt
deleted file mode 100644
index ce41ce3f68..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.retain/client.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .flags("RETAIN")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-read zilla:data.empty
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.retain/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.retain/server.rpt
deleted file mode 100644
index 7cbdb75f40..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/session.will.message.retain/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .session()
- .clientId("one")
- .will()
- .topic("wills/one")
- .flags("RETAIN")
- .format("TEXT")
- .payload("client one session expired")
- .build()
- .build()
- .build()}
-
-connected
-
-write zilla:data.empty
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.get.retained.as.published/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.get.retained.as.published/client.rpt
deleted file mode 100644
index 7ed66fc3ea..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.get.retained.as.published/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.get.retained.as.published/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.get.retained.as.published/server.rpt
deleted file mode 100644
index 79ac93bf98..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.get.retained.as.published/server.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt
deleted file mode 100644
index 8bd244254b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt
deleted file mode 100644
index f5bfae2423..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .expiryInterval(15)
- .contentType("message")
- .format("TEXT")
- .responseTopic("sensor/one")
- .correlation("info")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.user.properties.unaltered/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.user.properties.unaltered/client.rpt
deleted file mode 100644
index 6f76abc1cf..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.user.properties.unaltered/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .userProperty("row1", "1")
- .userProperty("row1", "2")
- .build()
- .build()}
-
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.user.properties.unaltered/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.user.properties.unaltered/server.rpt
deleted file mode 100644
index 857c759faa..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message.user.properties.unaltered/server.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .userProperty("row1", "1")
- .userProperty("row1", "2")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message/client.rpt
deleted file mode 100644
index 2d946a1a43..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message/server.rpt
deleted file mode 100644
index 4a5cdf05c0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.one.message/server.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.publish.no.local/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.publish.no.local/client.rpt
deleted file mode 100644
index 016b74d411..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.publish.no.local/client.rpt
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "NO_LOCAL", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-read "message2"
-
-write notify SUBSCRIBED
-
-
-connect await SUBSCRIBED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-write "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.publish.no.local/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.publish.no.local/server.rpt
deleted file mode 100644
index 7a05efdbe0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.publish.no.local/server.rpt
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "NO_LOCAL", "SEND_RETAINED")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-write "message2"
-write flush
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.publish.retained.no.replay/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.publish.retained.no.replay/client.rpt
deleted file mode 100644
index cbddf7285c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.publish.retained.no.replay/client.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client2")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-
-write "message"
-write flush
-
-
-write notify PUBLISHED
-
-connect await PUBLISHED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client1")
- .filter("sensor/one", 1, "AT_MOST_ONCE")
- .build()
- .build()}
-
-connected
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.publish.retained.no.replay/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.publish.retained.no.replay/server.rpt
deleted file mode 100644
index 42f1dcd638..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.publish.retained.no.replay/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client2")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-
-read "message"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client1")
- .filter("sensor/one", 1, "AT_MOST_ONCE")
- .build()
- .build()}
-
-connected
-
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.replay.retained.no.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.replay.retained.no.packet.id/client.rpt
deleted file mode 100644
index 83ec82fc6d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.replay.retained.no.packet.id/client.rpt
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client1")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-
-write "message"
-write flush
-write notify RETAIN_PUBLISHED
-
-connect await RETAIN_PUBLISHED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client2")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.replay.retained.no.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.replay.retained.no.packet.id/server.rpt
deleted file mode 100644
index 2e5df58b86..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.qos0.replay.retained.no.packet.id/server.rpt
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client1")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .flags("RETAIN")
- .build()
- .build()}
-
-read "message"
-
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client2")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.overlapping.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.overlapping.wildcard/client.rpt
deleted file mode 100644
index e7f855d63f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.overlapping.wildcard/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/#", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/+/#", 1)
- .filter("sensor/+/1", 2)
- .build()
- .build()}
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one/1")
- .subscriptionId(1)
- .subscriptionId(2)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.overlapping.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.overlapping.wildcard/server.rpt
deleted file mode 100644
index fcb3fbf8b0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.overlapping.wildcard/server.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/#", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/+/#", 1)
- .filter("sensor/+/1", 2)
- .build()
- .build()}
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one/1")
- .subscriptionId(1)
- .subscriptionId(2)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.wildcard/client.rpt
deleted file mode 100644
index 74d45ce695..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.wildcard/client.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.wildcard/server.rpt
deleted file mode 100644
index a13fc5d8dc..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message.wildcard/server.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message/client.rpt
deleted file mode 100644
index 86006a1a7a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message/client.rpt
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-read "message"
-
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-write "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message/server.rpt
deleted file mode 100644
index f5f5b16fba..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.receive.message/server.rpt
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-write "message"
-
-accepted
-
-read zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/one")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/one")
- .format("TEXT")
- .build()
- .build()}
-read "message"
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.retain.as.published/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.retain.as.published/client.rpt
deleted file mode 100644
index 63d6ae8673..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.retain.as.published/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED", "RETAIN_AS_PUBLISHED")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.retain.as.published/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.retain.as.published/server.rpt
deleted file mode 100644
index 562ad9c206..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.retain.as.published/server.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1, "AT_MOST_ONCE", "SEND_RETAINED", "RETAIN_AS_PUBLISHED")
- .build()
- .build()}
-
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .topic("sensor/one")
- .flags("RETAIN")
- .subscriptionId(1)
- .format("TEXT")
- .build()
- .build()}
-
-write "message"
-write flush
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.multi.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.multi.level.wildcard/client.rpt
deleted file mode 100644
index fd61ba9ff8..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.multi.level.wildcard/client.rpt
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.multi.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.multi.level.wildcard/server.rpt
deleted file mode 100644
index 496fea1a0c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.multi.level.wildcard/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt
deleted file mode 100644
index ed61885ebf..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/1/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt
deleted file mode 100644
index 8a13815211..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/1/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.exact/client.rpt
deleted file mode 100644
index 32c4bf265f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.exact/client.rpt
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.exact/server.rpt
deleted file mode 100644
index b2725ffb3c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.exact/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.level.wildcard/client.rpt
deleted file mode 100644
index 7d5f7d7bfb..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.level.wildcard/client.rpt
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.level.wildcard/server.rpt
deleted file mode 100644
index 997484b097..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.single.level.wildcard/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.two.single.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.two.single.level.wildcard/client.rpt
deleted file mode 100644
index a718e65d67..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.two.single.level.wildcard/client.rpt
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/+", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.two.single.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.two.single.level.wildcard/server.rpt
deleted file mode 100644
index 85e8ee4607..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filter.two.single.level.wildcard/server.rpt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/+", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.both.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.both.exact/client.rpt
deleted file mode 100644
index bccc5a676f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.both.exact/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.both.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.both.exact/server.rpt
deleted file mode 100644
index 07dc698f05..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.both.exact/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt
deleted file mode 100644
index 8a716db1b7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("device/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt
deleted file mode 100644
index 8f18a8eb6d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("device/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.disjoint.wildcards/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.disjoint.wildcards/client.rpt
deleted file mode 100644
index 91ab3c94bb..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.disjoint.wildcards/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/#", 1)
- .filter("device/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.disjoint.wildcards/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.disjoint.wildcards/server.rpt
deleted file mode 100644
index 3e87f226e0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.disjoint.wildcards/server.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/#", 1)
- .filter("device/#", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.exact/client.rpt
deleted file mode 100644
index 71f67b8c52..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.exact/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/one", 1)
- .filter("sensor/two", 2)
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.exact/server.rpt
deleted file mode 100644
index 0e4e1a761a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.exact/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/one", 1)
- .filter("sensor/two", 2)
- .build()
- .build()}
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.wildcard/client.rpt
deleted file mode 100644
index 127e186273..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.wildcard/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/#", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/#", 1)
- .filter("device/#", 2)
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.wildcard/server.rpt
deleted file mode 100644
index d7a7bb2088..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.both.wildcard/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/#", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/#", 1)
- .filter("device/#", 2)
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt
deleted file mode 100644
index f91aafaeb5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/one", 1)
- .filter("device/#", 2)
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt
deleted file mode 100644
index 1c11615786..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/one", 1)
- .filter("device/#", 2)
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.overlapping.wildcards/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.overlapping.wildcards/client.rpt
deleted file mode 100644
index 4cf5f87625..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.overlapping.wildcards/client.rpt
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/#", 1)
- .filter("sensor/+/1", 1)
- .build()
- .build()}
-
-connected
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.overlapping.wildcards/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.overlapping.wildcards/server.rpt
deleted file mode 100644
index 1661014959..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/subscribe.topic.filters.overlapping.wildcards/server.rpt
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/+/#", 1)
- .filter("sensor/+/1", 1)
- .build()
- .build()}
-
-connected
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.after.subscribe/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.after.subscribe/client.rpt
deleted file mode 100644
index 2863642652..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.after.subscribe/client.rpt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.after.subscribe/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.after.subscribe/server.rpt
deleted file mode 100644
index 06ce00f3e1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.after.subscribe/server.rpt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .build()
- .build()}
-
-connected
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.aggregated.topic.filters.both.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.aggregated.topic.filters.both.exact/client.rpt
deleted file mode 100644
index 3dc75793ec..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.aggregated.topic.filters.both.exact/client.rpt
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.aggregated.topic.filters.both.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.aggregated.topic.filters.both.exact/server.rpt
deleted file mode 100644
index 5c00c727b7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.aggregated.topic.filters.both.exact/server.rpt
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.publish.unfragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.publish.unfragmented/client.rpt
deleted file mode 100644
index 71aa582a5f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.publish.unfragmented/client.rpt
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-write notify SUBSCRIBED
-
-connect await SUBSCRIBED
- "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/two")
- .build()
- .build()}
-connected
-
-write zilla:data.ext ${mqtt:dataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-write "message"
-
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.publish.unfragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.publish.unfragmented/server.rpt
deleted file mode 100644
index 1c1780bb18..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.publish.unfragmented/server.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .clientId("client")
- .topic("sensor/two")
- .build()
- .build()}
-
-connected
-
-read zilla:data.ext ${mqtt:matchDataEx()
- .typeId(zilla:id("mqtt"))
- .publish()
- .topic("sensor/two")
- .build()
- .build()}
-
-read "message"
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.topic.filter.single/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.topic.filter.single/client.rpt
deleted file mode 100644
index b1d4973ec3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.topic.filter.single/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-write zilla:begin.ext ${mqtt:beginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-write advise zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/two", 1)
- .build()
- .build()}
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.topic.filter.single/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.topic.filter.single/server.rpt
deleted file mode 100644
index 99b60b0f54..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/application/unsubscribe.topic.filter.single/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/app0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-
-read zilla:begin.ext ${mqtt:matchBeginEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .clientId("client")
- .filter("sensor/one", 1)
- .filter("sensor/two", 1)
- .build()
- .build()}
-
-connected
-
-read advised zilla:flush ${mqtt:flushEx()
- .typeId(zilla:id("mqtt"))
- .subscribe()
- .filter("sensor/two", 1)
- .build()
- .build()}
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.abort/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.abort/client.rpt
deleted file mode 100644
index e2ce9cf455..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.abort/client.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write abort
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.abort/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.abort/server.rpt
deleted file mode 100644
index 6712eeeb12..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.abort/server.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read aborted
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.close/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.close/client.rpt
deleted file mode 100644
index 17253032c3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.close/client.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.close/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.close/server.rpt
deleted file mode 100644
index d1b4bfceb1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.close/server.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.reset/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.reset/client.rpt
deleted file mode 100644
index 939934e70b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.reset/client.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read abort
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.reset/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.reset/server.rpt
deleted file mode 100644
index 199ed1b4e5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/client.sent.reset/server.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write aborted
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.exceeded/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.exceeded/client.rpt
deleted file mode 100644
index a615fc32af..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.exceeded/client.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x18] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x05] # properties = maximum packet size
- [0x27] 50 # maximum packet size = 50
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.exceeded/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.exceeded/server.rpt
deleted file mode 100644
index 8c1619aedd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.exceeded/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x18] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x05] # properties = maximum packet size
- [0x27] 50 # maximum packet size = 50
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.server.ignores.exceeding.publish.packet/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.server.ignores.exceeding.publish.packet/client.rpt
deleted file mode 100644
index a65921d8e9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.server.ignores.exceeding.publish.packet/client.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-connected
-
-write [0x10 0x18] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x05] # properties = maximum packet size
- [0x27 0x00 0x32] # maximum packet size = 50
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x27] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x13] # properties
- [0x0b 0x01] # subscription id = 1
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.server.ignores.exceeding.publish.packet/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.server.ignores.exceeding.publish.packet/server.rpt
deleted file mode 100644
index 2821fc44de..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.max.packet.size.server.ignores.exceeding.publish.packet/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-connected
-
-read [0x10 0x18] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x05] # properties = maximum packet size
- [0x27 0x00 0x32] # maximum packet size = 50
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x27] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x13] # properties
- [0x0b 0x01] # subscription id = 1
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.maximum.qos.0/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.maximum.qos.0/client.rpt
deleted file mode 100644
index 18fcb7c354..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.maximum.qos.0/client.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x24 0x00] # maximum qos = at most once
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.maximum.qos.0/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.maximum.qos.0/server.rpt
deleted file mode 100644
index 4499d83b64..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.maximum.qos.0/server.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x24 0x00] # maximum qos = at most once
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.password.no.password.flag/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.password.no.password.flag/client.rpt
deleted file mode 100644
index d39897ba84..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.password.no.password.flag/client.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x23] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x82] # flags = username, clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
- [0x00 0x08] "username" # username
- [0x00 0x08] "password" # password
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x81] # reason = malformed packet
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.password.no.password.flag/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.password.no.password.flag/server.rpt
deleted file mode 100644
index e23f5550e2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.password.no.password.flag/server.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x23] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x82] # flags = username, clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
- [0x00 0x08] "username" # username
- [0x00 0x08] "password" # password
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x81] # reason = malformed packet
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.second.connect/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.second.connect/client.rpt
deleted file mode 100644
index 4716401c5a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.second.connect/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason = success
- [0x00] # properties = none
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x82] # reason = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.second.connect/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.second.connect/server.rpt
deleted file mode 100644
index be588902cc..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.reject.second.connect/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason = success
- [0x00] # properties = none
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x82] # reason = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.retain.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.retain.not.supported/client.rpt
deleted file mode 100644
index 242add14df..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.retain.not.supported/client.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x25 0x00] # retain unavailable
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.retain.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.retain.not.supported/server.rpt
deleted file mode 100644
index cdbb92a648..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.retain.not.supported/server.rpt
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x25 0x00] # retain unavailable
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.assigned.client.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.assigned.client.id/client.rpt
deleted file mode 100644
index d3eaed1606..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.assigned.client.id/client.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x0d] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x00] # client id
-
-read [0x20 0x2a] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x27] # properties
- [0x12 0x00 0x24] [0..36] # assigned clientId
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.assigned.client.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.assigned.client.id/server.rpt
deleted file mode 100644
index f4e35b2b1e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.assigned.client.id/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-property assignedClientId "123e4567-e89b-42d3-a456-556642440000"
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x0d] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x00] # client id
-
-write [0x20 0x2a] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x27] # properties
- [0x12 0x00 0x24] ${assignedClientId} # assigned clientId
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.defined.keep.alive/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.defined.keep.alive/client.rpt
deleted file mode 100644
index 90b2c6b917..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.defined.keep.alive/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties = server keep alive
- [0x13] 10s # server keep alive = 10s
-
-read await WAIT_2_SECONDS
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.defined.keep.alive/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.defined.keep.alive/server.rpt
deleted file mode 100644
index 3af4304ce1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.server.defined.keep.alive/server.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties = server keep alive
- [0x13] 10s # server keep alive = 10s
-
-write notify WAIT_2_SECONDS
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.subscribe.unfragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.subscribe.unfragmented/client.rpt
deleted file mode 100644
index 97d4de65a4..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.subscribe.unfragmented/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
- [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.subscribe.unfragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.subscribe.unfragmented/server.rpt
deleted file mode 100644
index b2083f3c35..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.subscribe.unfragmented/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
- [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful.fragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful.fragmented/client.rpt
deleted file mode 100644
index 11aab482ff..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful.fragmented/client.rpt
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
-write [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful.fragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful.fragmented/server.rpt
deleted file mode 100644
index 08b8a21115..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful.fragmented/server.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful/client.rpt
deleted file mode 100644
index 60cde0868b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful/client.rpt
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful/server.rpt
deleted file mode 100644
index e7deccee13..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/connect.successful/server.rpt
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.after.keep.alive.timeout/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.after.keep.alive.timeout/client.rpt
deleted file mode 100644
index 4a82d8b390..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.after.keep.alive.timeout/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x8d] # reason = keep alive timeout
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.after.keep.alive.timeout/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.after.keep.alive.timeout/server.rpt
deleted file mode 100644
index bfbcbf1ea5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.after.keep.alive.timeout/server.rpt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x8d] # reason = keep alive timeout
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.reject.invalid.fixed.header.flags/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.reject.invalid.fixed.header.flags/client.rpt
deleted file mode 100644
index 467424a17c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.reject.invalid.fixed.header.flags/client.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xe1 0x02] # malformed DISCONNECT
- [0x00] # normal disconnect
- [0x00] # properties = none
-
-read [0xe0 0x02] # malformed DISCONNECT
- [0x81] # malformed packet
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.reject.invalid.fixed.header.flags/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.reject.invalid.fixed.header.flags/server.rpt
deleted file mode 100644
index 61ac0df492..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect.reject.invalid.fixed.header.flags/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xe1 0x02] # malformed DISCONNECT
- [0x00] # normal disconnect
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x81] # malformed packet
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect/client.rpt
deleted file mode 100644
index 0e4dccb94f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x00] # normal disconnect
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect/server.rpt
deleted file mode 100644
index 8e28b450c8..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/disconnect/server.rpt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x00] # normal disconnect
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping.keep.alive/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping.keep.alive/client.rpt
deleted file mode 100644
index bfcdb1d156..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping.keep.alive/client.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read await WAIT_1_SECOND
-
-write [0xc0 0x00] # PINGREQ
-
-read [0xd0 0x00] # PINGRESP
-
-read await WAIT_1_SECOND2
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping.keep.alive/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping.keep.alive/server.rpt
deleted file mode 100644
index 93437368e9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping.keep.alive/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write notify WAIT_1_SECOND
-
-read [0xc0 0x00] # PINGREQ
-
-write [0xd0 0x00] # PINGRESP
-
-write notify WAIT_1_SECOND2
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping/client.rpt
deleted file mode 100644
index 969c1907f5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x11] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x04] "abcd" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xc0 0x00] # PINGREQ
-
-read [0xd0 0x00] # PINGRESP
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping/server.rpt
deleted file mode 100644
index dbe9b48291..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/ping/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x11] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x04] "abcd" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xc0 0x00] # PINGREQ
-
-write [0xd0 0x00] # PINGRESP
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.message/client.rpt
deleted file mode 100644
index b035043ef2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.message/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x0d] # PUBLISH flags = at-most-once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.message/server.rpt
deleted file mode 100644
index c6835ad4bd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.message/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x0d] # PUBLISH flags = at-most-once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.retained.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.retained.message/client.rpt
deleted file mode 100644
index 8d2b0d7dc1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.retained.message/client.rpt
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x0d] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.retained.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.retained.message/server.rpt
deleted file mode 100644
index a5a00b450f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.empty.retained.message/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x0d] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.message.with.topic.alias/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.message.with.topic.alias/client.rpt
deleted file mode 100644
index b39fec144d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.message.with.topic.alias/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-write [0x30 0x17] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.message.with.topic.alias/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.message.with.topic.alias/server.rpt
deleted file mode 100644
index bd6707ead1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.message.with.topic.alias/server.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-read [0x30 0x17] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.no.carry.over.topic.alias/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.no.carry.over.topic.alias/client.rpt
deleted file mode 100644
index 59ea2e689b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.no.carry.over.topic.alias/client.rpt
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-write notify PUBLISHED
-
-connect await PUBLISHED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-connected
-
-write [0x10 0x17] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client2" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.no.carry.over.topic.alias/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.no.carry.over.topic.alias/server.rpt
deleted file mode 100644
index 382be31814..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.no.carry.over.topic.alias/server.rpt
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-
-accepted
-connected
-
-read [0x10 0x17] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client2" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.distinct/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.distinct/client.rpt
deleted file mode 100644
index 7816cde38d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.distinct/client.rpt
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x02] # topic alias maximum = 2
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 2s # topic alias maximum = 2
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/two" # topic name
- [0x03] # properties
- [0x23 0x00 0x02] # topic alias = 2
- "message2" # payload
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x02] # topic alias = 2
- "message4" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.distinct/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.distinct/server.rpt
deleted file mode 100644
index e3acfcf586..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.distinct/server.rpt
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x02] # topic alias maximum = 2
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 2s # topic alias maximum = 2
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/two" # topic name
- [0x03] # properties
- [0x23 0x00 0x02] # topic alias = 2
- "message2" # payload
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x02] # topic alias = 2
- "message4" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.invalid.scope/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.invalid.scope/client.rpt
deleted file mode 100644
index f407519a5b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.invalid.scope/client.rpt
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-write notify PUBLISHED
-
-connect await PUBLISHED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x17] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x07] "client2" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.invalid.scope/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.invalid.scope/server.rpt
deleted file mode 100644
index 9253a6b7ef..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.invalid.scope/server.rpt
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-
-accepted
-connected
-
-read [0x10 0x17] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x07] "client2" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.repeated/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.repeated/client.rpt
deleted file mode 100644
index 842cf10a1a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.repeated/client.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.repeated/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.repeated/server.rpt
deleted file mode 100644
index 535fe0eb68..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.repeated/server.rpt
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.replaced/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.replaced/client.rpt
deleted file mode 100644
index 5555adf084..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.replaced/client.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/two" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-write [0x30 0x0e] # PUBLISH
- [0x00 0x00] # empty topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.replaced/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.replaced/server.rpt
deleted file mode 100644
index 63ac197384..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.messages.with.topic.alias.replaced/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message1" # payload
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/two" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message2" # payload
-
-read [0x30 0x0e] # PUBLISH
- [0x00 0x00] # topic name = empty
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message3" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.unfragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.unfragmented/client.rpt
deleted file mode 100644
index 6e2fca673e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.unfragmented/client.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message1" # payload
- [0x30 0x11] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "test" # payload
- [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message3" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.unfragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.unfragmented/server.rpt
deleted file mode 100644
index 2380868209..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.unfragmented/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message1" # payload
- [0x30 0x11] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "test" # payload
- [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message3" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.with.delay/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.with.delay/client.rpt
deleted file mode 100644
index e179751732..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.with.delay/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message1" # payload
-
-write [0x30 0x11] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "test" # payload
-
-write notify PUBLISHED_MESSAGE_TWO
-write await PUBLISH_MESSAGE_THREE
-
-write [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message3" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.with.delay/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.with.delay/server.rpt
deleted file mode 100644
index a0b2569596..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages.with.delay/server.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message1" # payload
-
-read [0x30 0x11] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "test" # payload
-
-read [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message3" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages/client.rpt
deleted file mode 100644
index ae7414919b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message1" # payload
-
-write [0x30 0x11] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "test" # payload
-
-write [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message3" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages/server.rpt
deleted file mode 100644
index a0b2569596..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.multiple.messages/server.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message1" # payload
-
-read [0x30 0x11] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "test" # payload
-
-read [0x30 0x15] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message3" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message.subscribe.unfragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message.subscribe.unfragmented/client.rpt
deleted file mode 100644
index 214a953528..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message.subscribe.unfragmented/client.rpt
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x39] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
- [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
- [0x30 0x3a] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message2" # payload
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message.subscribe.unfragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message.subscribe.unfragmented/server.rpt
deleted file mode 100644
index b91aec06c9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message.subscribe.unfragmented/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x39] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
- [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message/client.rpt
deleted file mode 100644
index 44a0e55da2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message/client.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x39] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message/server.rpt
deleted file mode 100644
index 211a29685b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.one.message/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x39] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.client.sent.subscription.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.client.sent.subscription.id/client.rpt
deleted file mode 100644
index ce2f3c1d7b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.client.sent.subscription.id/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x28] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x12] # properties
- [0x0b 0x01] # subscription id = 1
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x0a] "text/plain" # content type
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x81] # reason = malformed packet
- [0x00] # properties = none
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.client.sent.subscription.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.client.sent.subscription.id/server.rpt
deleted file mode 100644
index 48bd9f4b0e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.client.sent.subscription.id/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x28] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x12] # properties
- [0x0b 0x01] # subscription id = 1
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x0a] "text/plain" # content type
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x81] # reason = malformed packet
- [0x00] # properties = none
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.invalid.payload.format/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.invalid.payload.format/client.rpt
deleted file mode 100644
index bf56176077..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.invalid.payload.format/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x36] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- [0xfe 0xfe 0xff 0xff] # payload
-
-read [0xe0 0x02] # DISCONNECT
- [0x99] # payload format invalid
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.invalid.payload.format/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.invalid.payload.format/server.rpt
deleted file mode 100644
index ad423bf5d9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.invalid.payload.format/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x36] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- [0xfe 0xfe 0xff 0xff] # payload
-
-write [0xe0 0x02] # DISCONNECT
- [0x99] # payload format invalid
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos0.with.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos0.with.packet.id/client.rpt
deleted file mode 100644
index aa6fe7845a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos0.with.packet.id/client.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x3b] # PUBLISH, qos = at most once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00 0x01] # packet id = 1
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos0.with.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos0.with.packet.id/server.rpt
deleted file mode 100644
index 270f88990c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos0.with.packet.id/server.rpt
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x3b] # PUBLISH, qos = at most once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00 0x01] # packet id = 1
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.not.supported/client.rpt
deleted file mode 100644
index e211184ae2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.not.supported/client.rpt
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x24 0x00] # maximum qos = at most once
-
-write [0x32 0x39] # PUBLISH, qos = at least once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00 0x01] # packet id = 1
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x9b] # disconnect = QoS not supported
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.not.supported/server.rpt
deleted file mode 100644
index 4ece5acfa3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.not.supported/server.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x24 0x00] # maximum qos = at most once
-
-read [0x32 0x39] # PUBLISH, qos = at least once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00 0x01] # packet id = 1
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x9b] # disconnect = QoS not supported
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.without.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.without.packet.id/client.rpt
deleted file mode 100644
index 42bbd0b808..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.without.packet.id/client.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x32 0x39] # PUBLISH, qos = at least once
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.without.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.without.packet.id/server.rpt
deleted file mode 100644
index 5acb55f014..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos1.without.packet.id/server.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x32 0x39] # PUBLISH, qos = at least once
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.not.supported/client.rpt
deleted file mode 100644
index a673d141f9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.not.supported/client.rpt
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x24 0x00] # maximum qos = at most once
-
-write [0x34 0x39] # PUBLISH, qos = exactly once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00 0x01] # packet id = 1
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x9b] # disconnect = QoS not supported
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.not.supported/server.rpt
deleted file mode 100644
index 40970e6b00..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.not.supported/server.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x24 0x00] # maximum qos = at most once
-
-read [0x34 0x39] # PUBLISH, qos = exactly once
- [0x00 0x0a] "sensor/one" # topic name
- [0x00 0x01] # packet id = 1
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x9b] # disconnect = QoS not supported
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.without.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.without.packet.id/client.rpt
deleted file mode 100644
index c2a98921f4..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.without.packet.id/client.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x34 0x39] # PUBLISH, qos = exactly once
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.without.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.without.packet.id/server.rpt
deleted file mode 100644
index 50dc4d2a37..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.qos2.without.packet.id/server.rpt
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x34 0x39] # PUBLISH, qos = exactly once
- [0x00 0x0a] "sensor/one" # topic name
- [0x25] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.retain.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.retain.not.supported/client.rpt
deleted file mode 100644
index 01a18efe7f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.retain.not.supported/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x25 0x00] # retain unavailable
-
-write [0x31 0x26] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x12] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x0a] "text/plain" # content type
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x9a] # disconnect = retain not supported
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.retain.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.retain.not.supported/server.rpt
deleted file mode 100644
index 155185b854..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.retain.not.supported/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x25 0x00] # retain unavailable
-
-read [0x31 0x26] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x12] # properties
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x0a] "text/plain" # content type
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x9a] # disconnect = retain not supported
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.exceeds.maximum/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.exceeds.maximum/client.rpt
deleted file mode 100644
index ce747d5f28..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.exceeds.maximum/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x17] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x94] # disconnect = topic alias invalid
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.exceeds.maximum/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.exceeds.maximum/server.rpt
deleted file mode 100644
index 30c71e3d95..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.exceeds.maximum/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x17] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x03] # properties
- [0x23 0x00 0x01] # topic alias = 1
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x94] # disconnect = topic alias invalid
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.repeated/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.repeated/client.rpt
deleted file mode 100644
index f0465d8ee5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.repeated/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-read [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-write [0x30 0x1a] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x06] # properties
- [0x23 0x00 0x01] # topic alias = 1
- [0x23 0x00 0x01] # topic alias = 1
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.repeated/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.repeated/server.rpt
deleted file mode 100644
index be89b64955..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.reject.topic.alias.repeated/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x16] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x03] # properties
- [0x22 0x00 0x01] # topic alias maximum = 1
- [0x00 0x06] "client" # client id
-
-write [0x20 0x06] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x03] # properties
- [0x22] 1s # topic alias maximum = 1
-
-read [0x30 0x1a] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x06] # properties
- [0x23 0x00 0x01] # topic alias = 1
- [0x23 0x00 0x01] # topic alias = 1
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.retained/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.retained/client.rpt
deleted file mode 100644
index 1cd14952d2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.retained/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x14] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.retained/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.retained/server.rpt
deleted file mode 100644
index 31fdbc9e16..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.retained/server.rpt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x14] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message" # payload
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.topic.not.routed/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.topic.not.routed/client.rpt
deleted file mode 100644
index 2af757f188..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.topic.not.routed/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x15] # PUBLISH
- [0x00 0x0b] "sensor/none" # topic name
- [0x00] # properties = none
- "message" # payload
-
-read [0xe0 0x02] # disconnect header
- [0x90] # DISCONNECT = topic name invalid
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.topic.not.routed/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.topic.not.routed/server.rpt
deleted file mode 100644
index 265527cf55..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.topic.not.routed/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x15] # PUBLISH
- [0x00 0x0b] "sensor/none" # topic name
- [0x00] # properties = none
- "message" # payload
-
-write [0xe0 0x02] # disconnect header
- [0x90] # DISCONNECT = topic name invalid
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.distinct/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.distinct/client.rpt
deleted file mode 100644
index 35429cd5d6..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.distinct/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x24] "755452d5-e2ef-4113-b9c6-2f53de96fd76" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x4a] # PUBLISH
- [0x00 0x0a] "/sensors/1" # topic name
- [0x14] # properties
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "1" # user property value
- [0x26] # user property id
- [0x00 0x04] "row2" # user property key
- [0x00 0x01] "2" # user property value
- "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.distinct/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.distinct/server.rpt
deleted file mode 100644
index 84e1702313..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.distinct/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x24] "755452d5-e2ef-4113-b9c6-2f53de96fd76" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x4a] # PUBLISH
- [0x00 0x0a] "/sensors/1" # topic name
- [0x14] # properties
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "1" # user property value
- [0x26] # user property id
- [0x00 0x04] "row2" # user property key
- [0x00 0x01] "2" # user property value
- "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.repeated/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.repeated/client.rpt
deleted file mode 100644
index ba0327ee3f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.repeated/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x24] "755452d5-e2ef-4113-b9c6-2f53de96fd76" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x4a] # PUBLISH
- [0x00 0x0a] "/sensors/1" # topic name
- [0x14] # properties
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "1" # user property value
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "2" # user property value
- "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.repeated/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.repeated/server.rpt
deleted file mode 100644
index 1b5899fe62..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.properties.repeated/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x24] "755452d5-e2ef-4113-b9c6-2f53de96fd76" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x4a] # PUBLISH
- [0x00 0x0a] "/sensors/1" # topic name
- [0x14] # properties
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "1" # user property value
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "2" # user property value
- "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.property/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.property/client.rpt
deleted file mode 100644
index 972f9f3f53..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.property/client.rpt
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x24] "755452d5-e2ef-4113-b9c6-2f53de96fd76" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x3f] # PUBLISH
- [0x00 0x0a] "/sensors/1" # topic name
- [0x09] # properties
- [0x26] # user property id
- [0x00 0x03] "row" # user property key
- [0x00 0x01] "1" # user property value
- "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.property/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.property/server.rpt
deleted file mode 100644
index bc00e3d81e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/publish.with.user.property/server.rpt
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x24] "755452d5-e2ef-4113-b9c6-2f53de96fd76" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x3f] # PUBLISH
- [0x00 0x0a] "/sensors/1" # topic name
- [0x09] # properties
- [0x26] # user property id
- [0x00 0x03] "row" # user property key
- [0x00 0x01] "1" # user property value
- "{\"id\":\"1\",\"unit\":\"CELSIUS\",\"value\":\"189\"}" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.abort.reconnect.non.clean.start/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.abort.reconnect.non.clean.start/client.rpt
deleted file mode 100644
index 4f3a33e626..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.abort.reconnect.non.clean.start/client.rpt
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write abort
-read aborted
-read notify FIRST_ABORTED
-
-
-connect await FIRST_ABORTED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x00] # flags = non clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x01] # flags = session present
- [0x00] # reason code
- [0x00] # properties = none
-
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.abort.reconnect.non.clean.start/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.abort.reconnect.non.clean.start/server.rpt
deleted file mode 100644
index f7f7e80abd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.abort.reconnect.non.clean.start/server.rpt
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read aborted
-write abort
-
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x00] # flags = non clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x01] # flags = session present
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.client.takeover/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.client.takeover/client.rpt
deleted file mode 100644
index 79b4e0b5f8..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.client.takeover/client.rpt
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write notify FIRST_CONNECTED
-
-read [0xe0 0x02] # DISCONNECT
- [0x8e] # session taken over
- [0x00] # properties = none
-
-read closed
-write close
-
-connect await FIRST_CONNECTED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x00] # flags = non clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x01] # flags = session present
- [0x00] # reason code
- [0x00] # properties = none
-
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.client.takeover/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.client.takeover/server.rpt
deleted file mode 100644
index cd44145bc9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.client.takeover/server.rpt
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xe0 0x02] # DISCONNECT
- [0x8e] # session taken over
- [0x00] # properties = none
-
-write close
-read closed
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x00] # flags = non clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x01] # flags = session present
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.connect.with.session.expiry/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.connect.with.session.expiry/client.rpt
deleted file mode 100644
index 48cba5d50c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.connect.with.session.expiry/client.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x10] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x00] # flags = none
- [0x00 0x3c] # keep alive = 60s
- [0x05] # properties
- [0x11] 1 # session expiry interval
- [0x00 0x03] "one" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.connect.with.session.expiry/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.connect.with.session.expiry/server.rpt
deleted file mode 100644
index 4fddefb67b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.connect.with.session.expiry/server.rpt
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x10] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x00] # flags = none
- [0x00 0x3c] # keep alive = 60s
- [0x05] # properties
- [0x11] 1 # session expiry interval
- [0x00 0x03] "one" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.exists.clean.start/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.exists.clean.start/client.rpt
deleted file mode 100644
index 98523cb372..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.exists.clean.start/client.rpt
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write notify FIRST_CONNECTED
-
-read [0xe0 0x02] # DISCONNECT
- [0x8e] # session taken over
- [0x00] # properties = none
-
-read closed
-write close
-
-
-connect await FIRST_CONNECTED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.exists.clean.start/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.exists.clean.start/server.rpt
deleted file mode 100644
index 5b74a727f1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.exists.clean.start/server.rpt
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xe0 0x02] # DISCONNECT
- [0x8e] # session taken over
- [0x00] # properties = none
-
-write close
-read closed
-
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe.via.session.state/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe.via.session.state/client.rpt
deleted file mode 100644
index c6cab05d5b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe.via.session.state/client.rpt
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x30 0x16] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x02] # properties
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe.via.session.state/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe.via.session.state/server.rpt
deleted file mode 100644
index 47b29b72b7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe.via.session.state/server.rpt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x30 0x16] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x02] # properties
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe/client.rpt
deleted file mode 100644
index 84851d383e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write notify SUBSCRIBED
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe/server.rpt
deleted file mode 100644
index 58b8788cba..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.subscribe/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe.deferred/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe.deferred/client.rpt
deleted file mode 100644
index de97a2a227..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe.deferred/client.rpt
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x02] # packet id = 2
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x03] # packet id = 3
- [0x00] # properties = none
- [0x00 0x0a] "sensor/two" # topic filter
-
-write notify UNSUBSCRIBE_ALL_FILTERS
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason code
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x02] # packet id = 2
- [0x00] # properties = none
- [0x00] # unsubscribe = success
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x03] # packet id = 3
- [0x00] # properties = none
- [0x00] # unsubscribe = success
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe.deferred/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe.deferred/server.rpt
deleted file mode 100644
index 9c7d67d158..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe.deferred/server.rpt
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x02] # packet id = 2
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x03] # packet id = 3
- [0x00] # properties = none
- [0x00 0x0a] "sensor/two" # topic filter
-
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason code
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x02] # packet id = 2
- [0x00] # properties = none
- [0x00] # unsubscribe = success
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x03] # packet id = 3
- [0x00] # properties = none
- [0x00] # unsubscribe = success
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe/client.rpt
deleted file mode 100644
index 75cec60eb5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe/client.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 2
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 2
- [0x00] # properties = none
- [0x00] # unsubscribe = success
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe/server.rpt
deleted file mode 100644
index 5369662547..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.unsubscribe.after.subscribe/server.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 2
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 2
- [0x00] # properties = none
- [0x00] # unsubscribe = success
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.disconnect.with.will.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.disconnect.with.will.message/client.rpt
deleted file mode 100644
index 7b82dfc026..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.disconnect.with.will.message/client.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x06] # flags = will flag, clean start
- [0x00 0x0a] # keep alive = 10s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x04] # disconnect with will message
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.disconnect.with.will.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.disconnect.with.will.message/server.rpt
deleted file mode 100644
index c4e6b53855..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.disconnect.with.will.message/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x06] # flags = will flag, clean start
- [0x00 0x0a] # keep alive = 10s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x04] # disconnect with will message
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.no.ping.within.keep.alive/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.no.ping.within.keep.alive/client.rpt
deleted file mode 100644
index 002f06c76a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.no.ping.within.keep.alive/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x06] # flags = will flag, clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x8d] # reason = keep alive timeout
- [0x00] # properties = none
-
-read closed
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.no.ping.within.keep.alive/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.no.ping.within.keep.alive/server.rpt
deleted file mode 100644
index 25c88efa05..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.no.ping.within.keep.alive/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x06] # flags = will flag, clean start
- [0x00 0x01] # keep alive = 1s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x8d] # reason = keep alive timeout
- [0x00] # properties = none
-
-write close
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.normal.disconnect/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.normal.disconnect/client.rpt
deleted file mode 100644
index 5b9b318d90..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.normal.disconnect/client.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x06] # flags = will flag, clean start
- [0x00 0x0a] # keep alive = 10s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x00] # normal disconnect
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.normal.disconnect/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.normal.disconnect/server.rpt
deleted file mode 100644
index 883cc65b8e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.normal.disconnect/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x06] # flags = will flag, clean start
- [0x00 0x0a] # keep alive = 10s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x00] # normal disconnect
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.retain/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.retain/client.rpt
deleted file mode 100644
index 4059848eac..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.retain/client.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x26] # flags = will retain, will flag, clean start
- [0x00 0x0a] # keep alive = 10s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.retain/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.retain/server.rpt
deleted file mode 100644
index 9114402158..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/session.will.message.retain/server.rpt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x3a] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x26] # flags = will retain, will flag, clean start
- [0x00 0x0a] # keep alive = 10s
- [0x00] # properties
- [0x00 0x03] "one" # client id
- [0x02] # will properties
- [0x01 0x01] # format = utf-8
- [0x00 0x09] "wills/one" # will topic
- [0x00 0x1a] "client one session expired" # will payload
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.get.retained.as.published/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.get.retained.as.published/client.rpt
deleted file mode 100644
index 6e205f28f4..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.get.retained.as.published/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.get.retained.as.published/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.get.retained.as.published/server.rpt
deleted file mode 100644
index 1bec59b7a5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.get.retained.as.published/server.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.fixed.header.flags/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.fixed.header.flags/client.rpt
deleted file mode 100644
index f7fda12388..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.fixed.header.flags/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x83 0x12] # malformed SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # disconnect = normal
- [0x81] # malformed packet
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.fixed.header.flags/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.fixed.header.flags/server.rpt
deleted file mode 100644
index d2539d4a04..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.fixed.header.flags/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x83 0x12] # malformed SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # disconnect = normal
- [0x81] # malformed packet
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.topic.filter/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.topic.filter/client.rpt
deleted file mode 100644
index f4689b5087..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.topic.filter/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0c] "#/sensor/one" # invalid topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # disconnect = normal
- [0x82] # protocol error
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.topic.filter/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.topic.filter/server.rpt
deleted file mode 100644
index d19ea3313a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.invalid.topic.filter/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0c] "#/sensor/one" # invalid topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # disconnect = normal
- [0x82] # protocol error
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt
deleted file mode 100644
index 394ce449c2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.receive.response.topic.and.correlation.data/client.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x3b] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x27] # properties
- [0x0b 0x01] # subscription id = 1
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt
deleted file mode 100644
index 2a00fd6d2d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.receive.response.topic.and.correlation.data/server.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x3b] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x27] # properties
- [0x0b 0x01] # subscription id = 1
- [0x02] 0x0f # expiry = 15 seconds
- [0x03 0x00 0x07] "message" # content type
- [0x01 0x01] # format = utf-8
- [0x08 0x00 0x0a] "sensor/one" # response topic
- [0x09 0x00 0x04] "info" # correlation data
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.user.properties.unaltered/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.user.properties.unaltered/client.rpt
deleted file mode 100644
index bd5b56bd3e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.user.properties.unaltered/client.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x2c] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x18] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "1" # user property value
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "2" # user property value
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.user.properties.unaltered/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.user.properties.unaltered/server.rpt
deleted file mode 100644
index 1613f1c5c9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.user.properties.unaltered/server.rpt
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x2c] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x18] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "1" # user property value
- [0x26] # user property id
- [0x00 0x04] "row1" # user property key
- [0x00 0x01] "2" # user property value
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.with.invalid.subscription.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.with.invalid.subscription.id/client.rpt
deleted file mode 100644
index 54d4a929ea..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.with.invalid.subscription.id/client.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x00] # invalid subscriptionId = 0
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # DISCONNECT = normal
- [0x82] # protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.with.invalid.subscription.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.with.invalid.subscription.id/server.rpt
deleted file mode 100644
index fd237bf7b4..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message.with.invalid.subscription.id/server.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x00] # invalid subscriptionId = 0
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # DISCONNECT = normal
- [0x82] # protocol error
- [0x00] # properties = none
-
-write close # close network connection
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message/client.rpt
deleted file mode 100644
index 88223c46a2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message/server.rpt
deleted file mode 100644
index 1bec59b7a5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.one.message/server.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.publish.no.local/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.publish.no.local/client.rpt
deleted file mode 100644
index e19108cb1e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.publish.no.local/client.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x04] # options = at-most-once, no-local, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x16] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x02] # properties
- [0x01 0x01] # format = utf-8
- "message" # payload
-
-read [0x30 0x19] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message2" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.publish.no.local/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.publish.no.local/server.rpt
deleted file mode 100644
index 739316e46a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.publish.no.local/server.rpt
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x04] # options = at-most-once, no-local, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x16] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x02] # properties
- [0x01 0x01] # format = utf-8
- "message" # payload
-
-write [0x30 0x19] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message2" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.publish.retained.no.replay/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.publish.retained.no.replay/client.rpt
deleted file mode 100644
index 20ffd331c2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.publish.retained.no.replay/client.rpt
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client2" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x14] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message" # payload
-
-write notify PUBLISHED
-
-connect await PUBLISHED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client1" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x20] # options = at-most-once, do not send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.publish.retained.no.replay/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.publish.retained.no.replay/server.rpt
deleted file mode 100644
index dc1c3a6e66..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.publish.retained.no.replay/server.rpt
+++ /dev/null
@@ -1,71 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client2" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x14] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message" # payload
-
-
-
-accepted
-connected
-
-read [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client1" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x20] # options = at-most-once, do not send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.replay.retained.no.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.replay.retained.no.packet.id/client.rpt
deleted file mode 100644
index 6e3a8ee494..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.replay.retained.no.packet.id/client.rpt
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client1" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x31 0x14] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message" # payload
-
-write notify RETAINED_PUBLISHED
-
-
-connect await RETAINED_PUBLISHED
- "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client2" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.replay.retained.no.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.replay.retained.no.packet.id/server.rpt
deleted file mode 100644
index 627d0b1f62..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.qos0.replay.retained.no.packet.id/server.rpt
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client1" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x31 0x14] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x00] # properties
- "message" # payload
-
-accepted
-connected
-
-read [0x10 0x14] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x07] "client2" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.overlapping.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.overlapping.wildcard/client.rpt
deleted file mode 100644
index d18dc1cf0d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.overlapping.wildcard/client.rpt
+++ /dev/null
@@ -1,67 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/+/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x0a] "sensor/+/1" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x1c] # PUBLISH
- [0x00 0x0c] "sensor/one/1" # topic name
- [0x06] # properties
- [0x0b 0x01] # subscription id = 1
- [0x0b 0x02] # subscription id = 2
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.overlapping.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.overlapping.wildcard/server.rpt
deleted file mode 100644
index 72fe7b721d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.overlapping.wildcard/server.rpt
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/+/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x0a] "sensor/+/1" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x1c] # PUBLISH
- [0x00 0x0c] "sensor/one/1" # topic name
- [0x06] # properties
- [0x0b 0x01] # subscription id = 1
- [0x0b 0x02] # subscription id = 2
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.wildcard/client.rpt
deleted file mode 100644
index 0e3d83a2f3..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.wildcard/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/+" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.wildcard/server.rpt
deleted file mode 100644
index a333bf4451..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message.wildcard/server.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/+" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message/client.rpt
deleted file mode 100644
index 5502124a84..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message/client.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x30 0x16] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x02] # properties
- [0x01 0x01] # format = utf-8
- "message" # payload
-
-read [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message/server.rpt
deleted file mode 100644
index 05cab126e9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.receive.message/server.rpt
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x30 0x16] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x02] # properties
- [0x01 0x01] # format = utf-8
- "message" # payload
-
-write [0x30 0x18] # PUBLISH
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.malformed.subscription.options/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.malformed.subscription.options/client.rpt
deleted file mode 100644
index b39b697ee0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.malformed.subscription.options/client.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x07] # options = malformed
-
-read [0xe0 0x02] # DISCONNECT
- [0x81] # malformed packet
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.malformed.subscription.options/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.malformed.subscription.options/server.rpt
deleted file mode 100644
index fc394dde50..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.malformed.subscription.options/server.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x07] # options = malformed
-
-write [0xe0 0x02] # DISCONNECT
- [0x81] # malformed packet
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.packet.id/client.rpt
deleted file mode 100644
index 683ce043d8..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.packet.id/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x10] # SUBSCRIBE
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.packet.id/server.rpt
deleted file mode 100644
index 157566c112..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.packet.id/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x10] # SUBSCRIBE
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.topic.filters/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.topic.filters/client.rpt
deleted file mode 100644
index 9c36998f8a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.topic.filters/client.rpt
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x03] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x00] # properties = none
- [0x82] # reason = protocol error
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.topic.filters/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.topic.filters/server.rpt
deleted file mode 100644
index 95e8e7aa4f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.missing.topic.filters/server.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x03] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
-
-write [0xe0 0x02] # SUBACK
- [0x00] # properties = none
- [0x82] # reason code
-
-write close # close network connection
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.no.local/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.no.local/client.rpt
deleted file mode 100644
index 41e3ba9b00..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.no.local/client.rpt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x04] # options = at-most-once, send retained, no local
-
-read [0xe0 0x02] # DISCONNECT
- [0x82] # protocol error
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.no.local/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.no.local/server.rpt
deleted file mode 100644
index cbb98d694a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.no.local/server.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x04] # options = at-most-once, send retained, no local
-
-write [0xe0 0x02] # DISCONNECT
- [0x82] # protocol error
- [0x00] # properties = none
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.shared.subscriptions.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.shared.subscriptions.not.supported/client.rpt
deleted file mode 100644
index 089f74870e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.shared.subscriptions.not.supported/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x2a 0x00] # shared subscription unavailable
-
-write [0x82 0x23] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "$share/consumer1/sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # DISCONNECT
- [0x9e] # shared subscription unavailable
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.shared.subscriptions.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.shared.subscriptions.not.supported/server.rpt
deleted file mode 100644
index 6208375089..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.shared.subscriptions.not.supported/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x2a 0x00] # shared subscription unavailable
-
-read [0x82 0x23] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "$share/consumer1/sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # DISCONNECT
- [0x9e] # shared subscription unavailable
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.subscription.ids.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.subscription.ids.not.supported/client.rpt
deleted file mode 100644
index fcf5bf68a9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.subscription.ids.not.supported/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x29 0x00] # subscription identifiers unavailable
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # DISCONNECT
- [0xa1] # subscription identifiers unavailable
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.subscription.ids.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.subscription.ids.not.supported/server.rpt
deleted file mode 100644
index 0a49b964f9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.subscription.ids.not.supported/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x29 0x00] # subscription identifiers unavailable
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # DISCONNECT
- [0xa1] # subscription identifiers unavailable
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.topic.filter.invalid.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.topic.filter.invalid.wildcard/client.rpt
deleted file mode 100644
index 43385085a0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.topic.filter.invalid.wildcard/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#/1" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x8f] # reason code = topic filter invalid
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.topic.filter.invalid.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.topic.filter.invalid.wildcard/server.rpt
deleted file mode 100644
index 097955c349..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.topic.filter.invalid.wildcard/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#/1" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x8f] # reason code = topic filter invalid
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.wildcard.subscriptions.not.supported/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.wildcard.subscriptions.not.supported/client.rpt
deleted file mode 100644
index feedd243e0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.wildcard.subscriptions.not.supported/client.rpt
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x28 0x00] # wildcard subscription unavailable
-
-write [0x82 0x14] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0c] "sensor/one/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0xe0 0x02] # DISCONNECT
- [0xa2] # wildcard subscription unavailable
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.wildcard.subscriptions.not.supported/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.wildcard.subscriptions.not.supported/server.rpt
deleted file mode 100644
index 74cfb47054..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.reject.wildcard.subscriptions.not.supported/server.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x05] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x02] # properties
- [0x28 0x00] # wildcard subscription unavailable
-
-read [0x82 0x14] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0c] "sensor/one/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0xe0 0x02] # DISCONNECT
- [0xa2] # wildcard subscription unavailable
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.retain.as.published/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.retain.as.published/client.rpt
deleted file mode 100644
index fa8fce65d0..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.retain.as.published/client.rpt
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x08] # options = at-most-once, retain as published
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x31 0x18] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.retain.as.published/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.retain.as.published/server.rpt
deleted file mode 100644
index 36109c91be..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.retain.as.published/server.rpt
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x08] # options = at-most-once, retain as published
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x31 0x18] # PUBLISH flags = at-most-once, retain
- [0x00 0x0a] "sensor/one" # topic name
- [0x04] # properties
- [0x0b 0x01] # subscription id = 1
- [0x01 0x01] # format = utf-8
- "message" # payload
\ No newline at end of file
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.multi.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.multi.level.wildcard/client.rpt
deleted file mode 100644
index 762c45c1de..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.multi.level.wildcard/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.multi.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.multi.level.wildcard/server.rpt
deleted file mode 100644
index 71546b1de6..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.multi.level.wildcard/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt
deleted file mode 100644
index f1deb49e87..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.and.multi.level.wildcard/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x14] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0c] "sensor/+/1/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt
deleted file mode 100644
index d0c8845cf9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.and.multi.level.wildcard/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x14] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0c] "sensor/+/1/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.exact/client.rpt
deleted file mode 100644
index 27336b9784..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.exact/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.exact/server.rpt
deleted file mode 100644
index 81d4472629..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.exact/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.level.wildcard/client.rpt
deleted file mode 100644
index 22287a377a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.level.wildcard/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/+" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.level.wildcard/server.rpt
deleted file mode 100644
index d72aec3064..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.single.level.wildcard/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/+" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.two.single.level.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.two.single.level.wildcard/client.rpt
deleted file mode 100644
index 6ebcc04bef..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.two.single.level.wildcard/client.rpt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/+/+" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.two.single.level.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.two.single.level.wildcard/server.rpt
deleted file mode 100644
index 8cb126d8e6..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filter.two.single.level.wildcard/server.rpt
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/+/+" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.both.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.both.exact/client.rpt
deleted file mode 100644
index 1cb03ec6a7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.both.exact/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.both.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.both.exact/server.rpt
deleted file mode 100644
index c752a811da..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.both.exact/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt
deleted file mode 100644
index d4dfa5c059..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.exact.and.wildcard/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1d] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt
deleted file mode 100644
index 49467e2d2d..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.aggregated.exact.and.wildcard/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1d] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-[0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.disjoint.wildcards/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.disjoint.wildcards/client.rpt
deleted file mode 100644
index caacba76e9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.disjoint.wildcards/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1b] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.disjoint.wildcards/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.disjoint.wildcards/server.rpt
deleted file mode 100644
index 92936e78f2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.disjoint.wildcards/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1b] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-[0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.exact/client.rpt
deleted file mode 100644
index 60cbbd058f..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.exact/client.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.exact/server.rpt
deleted file mode 100644
index b53d46ff87..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.exact/server.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.wildcard/client.rpt
deleted file mode 100644
index 67911e11f7..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.wildcard/client.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.wildcard/server.rpt
deleted file mode 100644
index 37c9e42ca9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.both.wildcard/server.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x08] "sensor/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt
deleted file mode 100644
index 2fefc2f6af..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.exact.and.wildcard/client.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt
deleted file mode 100644
index 307ca61c67..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.isolated.exact.and.wildcard/server.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0x82 0x10] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x02] # subscription id = 2
- [0x00 0x08] "device/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.overlapping.wildcards/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.overlapping.wildcards/client.rpt
deleted file mode 100644
index 713e5e3943..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.overlapping.wildcards/client.rpt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/+/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/+/1" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.overlapping.wildcards/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.overlapping.wildcards/server.rpt
deleted file mode 100644
index 399d3c5e9b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/subscribe.topic.filters.overlapping.wildcards/server.rpt
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/+/#" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/+/1" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.after.subscribe/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.after.subscribe/client.rpt
deleted file mode 100644
index db8f57700e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.after.subscribe/client.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # unsubscribe = success
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.after.subscribe/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.after.subscribe/server.rpt
deleted file mode 100644
index 61f0e8c32b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.after.subscribe/server.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # unsubscribe = success
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.aggregated.topic.filters.both.exact/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.aggregated.topic.filters.both.exact/client.rpt
deleted file mode 100644
index 0dc3b7a5dd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.aggregated.topic.filters.both.exact/client.rpt
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason code
-
-write [0xa2 0x1b] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00 0x0a] "sensor/two" # topic filter
-
-read [0xb0 0x05] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.aggregated.topic.filters.both.exact/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.aggregated.topic.filters.both.exact/server.rpt
deleted file mode 100644
index 333e6686d9..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.aggregated.topic.filters.both.exact/server.rpt
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
-
-
-read [0xa2 0x1b] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00 0x0a] "sensor/two" # topic filter
-
-write [0xb0 0x05] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.subscription/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.subscription/client.rpt
deleted file mode 100644
index 8726af2b96..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.subscription/client.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa2 0x11] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0c] "not-matching" # topic filter
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x11] # unsubscribe = no subscription existed
-
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.subscription/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.subscription/server.rpt
deleted file mode 100644
index dc53b38f52..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.subscription/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa2 0x11] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0c] "not-matching" # topic filter
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x11] # unsubscribe = no subscription existed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.topic.filter/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.topic.filter/client.rpt
deleted file mode 100644
index 6f262f1b0b..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.topic.filter/client.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "not-matching" # topic filter
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x11] # unsubscribe = no subscription existed
-
-
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.topic.filter/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.topic.filter/server.rpt
deleted file mode 100644
index cb38265c2e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.no.matching.topic.filter/server.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "not-matching" # topic filter
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x11] # unsubscribe = no subscription existed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.publish.unfragmented/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.publish.unfragmented/client.rpt
deleted file mode 100644
index 6bc2fb4be1..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.publish.unfragmented/client.rpt
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason code
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
- [0x30 0x14] # PUBLISH
- [0x00 0x0a] "sensor/two" # topic name
- [0x00] # properties
- "message" # payload
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.publish.unfragmented/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.publish.unfragmented/server.rpt
deleted file mode 100644
index 1b2efb52bd..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.publish.unfragmented/server.rpt
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
-
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
- [0x30 0x14] # PUBLISH
- [0x00 0x0a] "sensor/two" # topic name
- [0x00] # properties
- "message" # payload
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.invalid.fixed.header.flags/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.invalid.fixed.header.flags/client.rpt
deleted file mode 100644
index dab4e2272c..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.invalid.fixed.header.flags/client.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa3 0x0f] # malformed UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-read [0xe0 0x02] # disconnect = normal
- [0x81] # malformed packet
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.invalid.fixed.header.flags/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.invalid.fixed.header.flags/server.rpt
deleted file mode 100644
index 38e3d3f3e5..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.invalid.fixed.header.flags/server.rpt
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa3 0x0f] # malformed UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-write [0xe0 0x02] # disconnect = normal
- [0x81] # malformed packet
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.missing.packet.id/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.missing.packet.id/client.rpt
deleted file mode 100644
index ff12eac7d2..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.missing.packet.id/client.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa2 0x0d] # UNSUBSCRIBE
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-read [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.missing.packet.id/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.missing.packet.id/server.rpt
deleted file mode 100644
index b595bf3dba..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.missing.packet.id/server.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa2 0x0d] # UNSUBSCRIBE
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-write [0xe0 0x02] # disconnect header
- [0x82] # disconnect = protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.no.topic.filter/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.no.topic.filter/client.rpt
deleted file mode 100644
index 38dd5dcf14..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.no.topic.filter/client.rpt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-write [0xa2 0x03] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
-
-read [0xe0 0x02] # DISCONNECT
- [0x82] # protocol error
- [0x00] # properties = none
-
-read closed
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.no.topic.filter/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.no.topic.filter/server.rpt
deleted file mode 100644
index 390f7b216e..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.reject.no.topic.filter/server.rpt
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3C] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x12] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x04] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason code
-
-read [0xa2 0x03] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
-
-write [0xe0 0x02] # DISCONNECT
- [0x82] # protocol error
- [0x00] # properties = none
-
-write close
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.topic.filter.single/client.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.topic.filter.single/client.rpt
deleted file mode 100644
index 8347000999..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.topic.filter.single/client.rpt
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-connect "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-connected
-
-write [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-read [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-write [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-read [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason code
-
-write [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-read [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.topic.filter.single/server.rpt b/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.topic.filter.single/server.rpt
deleted file mode 100644
index 670278c91a..0000000000
--- a/incubator/binding-mqtt.spec/src/main/scripts/io/aklivity/zilla/specs/binding/mqtt/streams/network/unsubscribe.topic.filter.single/server.rpt
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# Copyright 2021-2023 Aklivity Inc.
-#
-# Aklivity licenses this file to you under the Apache License,
-# version 2.0 (the "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-accept "zilla://streams/net0"
- option zilla:window 8192
- option zilla:transmission "duplex"
- option zilla:byteorder "network"
-
-accepted
-connected
-
-read [0x10 0x13] # CONNECT
- [0x00 0x04] "MQTT" # protocol name
- [0x05] # protocol version
- [0x02] # flags = clean start
- [0x00 0x3c] # keep alive = 60s
- [0x00] # properties = none
- [0x00 0x06] "client" # client id
-
-write [0x20 0x03] # CONNACK
- [0x00] # flags = none
- [0x00] # reason code
- [0x00] # properties = none
-
-read [0x82 0x1f] # SUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x02] # properties
- [0x0b 0x01] # subscription id = 1
- [0x00 0x0a] "sensor/one" # topic filter
- [0x00] # options = at-most-once, send retained
-
- [0x00 0x0a] "sensor/two" # topic filter
- [0x00] # options = at-most-once, send retained
-
-write [0x90 0x05] # SUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x00] # reason codes
-
-
-read [0xa2 0x0f] # UNSUBSCRIBE
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00 0x0a] "sensor/one" # topic filter
-
-write [0xb0 0x04] # UNSUBACK
- [0x00 0x01] # packet id = 1
- [0x00] # properties = none
- [0x00] # reason codes
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/config/SchemaTest.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/config/SchemaTest.java
deleted file mode 100644
index 6541665d98..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/config/SchemaTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.config;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.nullValue;
-
-import jakarta.json.JsonObject;
-
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-
-import io.aklivity.zilla.specs.engine.config.ConfigSchemaRule;
-
-public class SchemaTest
-{
- @Rule
- public final ConfigSchemaRule schema = new ConfigSchemaRule()
- .schemaPatch("io/aklivity/zilla/specs/binding/mqtt/schema/mqtt.schema.patch.json")
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config");
-
- @Ignore("TODO")
- @Test
- public void shouldValidateClient()
- {
- JsonObject config = schema.validate("client.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Ignore("TODO")
- @Test
- public void shouldValidateClientWhenTopic()
- {
- JsonObject config = schema.validate("client.when.topic.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Ignore("TODO")
- @Test
- public void shouldValidateClientWhenTopicOrSessions()
- {
- JsonObject config = schema.validate("client.when.topic.or.sessions.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Ignore("TODO")
- @Test
- public void shouldValidateClientWhenTopicPublishOnly()
- {
- JsonObject config = schema.validate("client.when.topic.publish.only.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Ignore("TODO")
- @Test
- public void shouldValidateClientWhenTopicSubscribeOnly()
- {
- JsonObject config = schema.validate("client.when.topic.subscribe.only.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Test
- public void shouldValidateServer()
- {
- JsonObject config = schema.validate("server.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Test
- public void shouldValidateServerWhenTopic()
- {
- JsonObject config = schema.validate("server.when.topic.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Test
- public void shouldValidateServerWhenTopicOrSessions()
- {
- JsonObject config = schema.validate("server.when.sessions.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Test
- public void shouldValidateServerWhenTopicPublishOnly()
- {
- JsonObject config = schema.validate("server.when.topic.publish.only.yaml");
-
- assertThat(config, not(nullValue()));
- }
-
- @Test
- public void shouldValidateServerWhenTopicSubscribeOnly()
- {
- JsonObject config = schema.validate("server.when.topic.subscribe.only.yaml");
-
- assertThat(config, not(nullValue()));
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/ConnectionIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/ConnectionIT.java
deleted file mode 100644
index 34ac95860e..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/ConnectionIT.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.application;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class ConnectionIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${app}/client.sent.abort/client",
- "${app}/client.sent.abort/server"})
- public void shouldReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/connect.max.packet.size.exceeded/client",
- "${app}/connect.max.packet.size.exceeded/server"})
- public void shouldNotReceivePublishPacketExceedingMaxPacketLimit() throws Exception
- {
- k3po.finish();
- }
-
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/PublishIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/PublishIT.java
deleted file mode 100644
index fb7ba4b644..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/PublishIT.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.application;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class PublishIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${app}/publish.one.message/client",
- "${app}/publish.one.message/server"})
- public void shouldSendOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.one.message.subscribe.unfragmented/client",
- "${app}/publish.one.message.subscribe.unfragmented/server"})
- public void shouldSendOneMessageSubscribeUnfragmented() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.multiple.messages/client",
- "${app}/publish.multiple.messages/server"})
- public void shouldSendMultipleMessages() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.with.user.property/client",
- "${app}/publish.with.user.property/server"})
- public void shouldSendWithUserProperty() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.with.user.properties.repeated/client",
- "${app}/publish.with.user.properties.repeated/server"})
- public void shouldSendWithRepeatedUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.with.user.properties.distinct/client",
- "${app}/publish.with.user.properties.distinct/server"})
- public void shouldSendWithDistinctUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.message.with.topic.alias/client",
- "${app}/publish.message.with.topic.alias/server"})
- public void shouldSendMessageWithTopicAlias() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.messages.with.topic.alias.distinct/client",
- "${app}/publish.messages.with.topic.alias.distinct/server"})
- public void shouldSendMessagesWithTopicAliasDistinct() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.messages.with.topic.alias.repeated/client",
- "${app}/publish.messages.with.topic.alias.repeated/server"})
- public void shouldSendMessagesWithTopicAliasRepeated() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.messages.with.topic.alias.replaced/client",
- "${app}/publish.messages.with.topic.alias.replaced/server"})
- public void shouldSendMessagesWithTopicAliasesReplaced() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.3.2-7]
- @Test
- @Specification({
- "${app}/publish.messages.with.topic.alias.invalid.scope/client",
- "${app}/publish.messages.with.topic.alias.invalid.scope/server"})
- public void shouldSendMessagesWithTopicAliasInvalidScope() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.retained/client",
- "${app}/publish.retained/server"})
- public void shouldSendRetainedMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.empty.retained.message/client",
- "${app}/publish.empty.retained.message/server"})
- public void shouldSendEmptyRetainedMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/publish.empty.message/client",
- "${app}/publish.empty.message/server"})
- public void shouldSendEmptyMessage() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/SessionIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/SessionIT.java
deleted file mode 100644
index 51f6e7030b..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/SessionIT.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.application;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class SessionIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
-
- @Test
- @Specification({
- "${app}/session.connect.with.session.expiry/client",
- "${app}/session.connect.with.session.expiry/server"})
- public void shouldConnectWithSessionExpiry() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.exists.clean.start/client",
- "${app}/session.exists.clean.start/server"})
- public void shouldRemoveSessionAtCleanStart() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.will.message.disconnect.with.will.message/client",
- "${app}/session.will.message.disconnect.with.will.message/server"})
- public void shouldSendReasonForEndAfterDisconnectWithWillMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.will.message.no.ping.within.keep.alive/client",
- "${app}/session.will.message.no.ping.within.keep.alive/server"})
- public void shouldSendReasonForEndAfterKeepAliveTimeout() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.will.message.normal.disconnect/client",
- "${app}/session.will.message.normal.disconnect/server"})
- public void shouldSendReasonForEndAfterNormalClientDisconnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.subscribe/client",
- "${app}/session.subscribe/server"})
- public void shouldSubscribeSaveSubscriptionsInSession() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-15]
- @Test
- @Specification({
- "${app}/session.will.message.retain/client",
- "${app}/session.will.message.retain/server"})
- public void shouldConnectWithWillMessageWithRetain() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.abort.reconnect.non.clean.start/client",
- "${app}/session.abort.reconnect.non.clean.start/server"})
- public void shouldReconnectNonCleanStart() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.client.takeover/client",
- "${app}/session.client.takeover/server"})
- public void shouldTakeOverSession() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.unsubscribe.after.subscribe/client",
- "${app}/session.unsubscribe.after.subscribe/server"})
- public void shouldUnsubscribeAndUpdateSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.subscribe.via.session.state/client",
- "${app}/session.subscribe.via.session.state/server"})
- public void shouldReceiveMessageSubscribedViaSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.unsubscribe.via.session.state/client",
- "${app}/session.unsubscribe.via.session.state/server"})
- public void shouldUnsubscribeViaSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/session.unsubscribe.after.subscribe.deferred/client",
- "${app}/session.unsubscribe.after.subscribe.deferred/server"})
- public void shouldUnsubscribeAfterSubscribeDeferred() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/SubscribeIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/SubscribeIT.java
deleted file mode 100644
index d4e77f92a8..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/SubscribeIT.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.application;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class SubscribeIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filter.single.exact/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- public void shouldFilterExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filter.multi.level.wildcard/client",
- "${app}/subscribe.topic.filter.multi.level.wildcard/server"})
- public void shouldFilterMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filter.single.level.wildcard/client",
- "${app}/subscribe.topic.filter.single.level.wildcard/server"})
- public void shouldFilterSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filter.single.and.multi.level.wildcard/client",
- "${app}/subscribe.topic.filter.single.and.multi.level.wildcard/server"})
- public void shouldFilterSingleAndMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filter.two.single.level.wildcard/client",
- "${app}/subscribe.topic.filter.two.single.level.wildcard/server"})
- public void shouldFilterTwoSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.aggregated.both.exact/client",
- "${app}/subscribe.topic.filters.aggregated.both.exact/server"})
- public void shouldFilterAggregatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.isolated.both.exact/client",
- "${app}/subscribe.topic.filters.isolated.both.exact/server"})
- public void shouldFilterIsolatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.disjoint.wildcards/client",
- "${app}/subscribe.topic.filters.disjoint.wildcards/server"})
- public void shouldFilterDisjointWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.overlapping.wildcards/client",
- "${app}/subscribe.topic.filters.overlapping.wildcards/server"})
- public void shouldFilterOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.isolated.both.wildcard/client",
- "${app}/subscribe.topic.filters.isolated.both.wildcard/server"})
- public void shouldFilterIsolatedBothWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.aggregated.exact.and.wildcard/client",
- "${app}/subscribe.topic.filters.aggregated.exact.and.wildcard/server"})
- public void shouldFilterAggregatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.topic.filters.isolated.exact.and.wildcard/client",
- "${app}/subscribe.topic.filters.isolated.exact.and.wildcard/server"})
- public void shouldFilterIsolatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.one.message/client",
- "${app}/subscribe.one.message/server"})
- public void shouldReceiveOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.one.message.user.properties.unaltered/client",
- "${app}/subscribe.one.message.user.properties.unaltered/server"})
- public void shouldReceiveOneMessageWithUserPropertiesUnaltered() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.publish.no.local/client",
- "${app}/subscribe.publish.no.local/server"})
- public void shouldNotReceivePublishLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.receive.message/client",
- "${app}/subscribe.receive.message/server"})
- public void shouldReceiveOneMessageAfterPublish() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.receive.message.wildcard/client",
- "${app}/subscribe.receive.message.wildcard/server"})
- public void shouldReceiveOneMessageWithPatternTopic() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.get.retained.as.published/client",
- "${app}/subscribe.get.retained.as.published/server"})
- public void shouldReceiveRetainedAsPublished() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.one.message.receive.response.topic.and.correlation.data/client",
- "${app}/subscribe.one.message.receive.response.topic.and.correlation.data/server"})
- public void shouldReceiveCorrelationData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.qos0.replay.retained.no.packet.id/client",
- "${app}/subscribe.qos0.replay.retained.no.packet.id/server"})
- public void shouldReceiveAndReplayRetainedQos0() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/subscribe.qos0.publish.retained.no.replay/client",
- "${app}/subscribe.qos0.publish.retained.no.replay/server"})
- public void shouldNotReplayRetained() throws Exception
- {
- k3po.finish();
- }
-
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/UnsubscribeIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/UnsubscribeIT.java
deleted file mode 100644
index 3d8e13e535..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/application/UnsubscribeIT.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.application;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class UnsubscribeIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${app}/unsubscribe.after.subscribe/client",
- "${app}/unsubscribe.after.subscribe/server"})
- public void shouldAcknowledge() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/unsubscribe.aggregated.topic.filters.both.exact/client",
- "${app}/unsubscribe.aggregated.topic.filters.both.exact/server"})
- public void shouldAcknowledgeAggregatedTopicFiltersBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/unsubscribe.topic.filter.single/client",
- "${app}/unsubscribe.topic.filter.single/server"})
- public void shouldAcknowledgeSingleTopicFilters() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${app}/unsubscribe.publish.unfragmented/client",
- "${app}/unsubscribe.publish.unfragmented/server"})
- public void shouldAcknowledgeAndPublishUnfragmented() throws Exception
- {
- k3po.finish();
- }
-
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/ConnectionIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/ConnectionIT.java
deleted file mode 100644
index 4dcacde78a..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/ConnectionIT.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.network;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class ConnectionIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${net}/connect.successful/client",
- "${net}/connect.successful/server"})
- public void shouldConnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.server.assigned.client.id/client",
- "${net}/connect.server.assigned.client.id/server"})
- public void shouldConnectWithServerAssignedClientId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.reject.missing.client.id/client",
- "${net}/connect.reject.missing.client.id/server"})
- public void shouldRejectMissingClientId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/disconnect/client",
- "${net}/disconnect/server"})
- public void shouldConnectThenDisconnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.invalid.protocol.version/client",
- "${net}/connect.invalid.protocol.version/server"})
- public void shouldRejectInvalidProtocolVersion() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.invalid.flags/client",
- "${net}/connect.invalid.flags/server"})
- public void shouldRejectMalformedConnectPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.invalid.authentication.method/client",
- "${net}/connect.invalid.authentication.method/server"})
- public void shouldRejectBadAuthenticationMethod() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/disconnect.reject.invalid.fixed.header.flags/client",
- "${net}/disconnect.reject.invalid.fixed.header.flags/server"})
- public void shouldRejectMalformedDisconnectPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.reject.second.connect/client",
- "${net}/connect.reject.second.connect/server"})
- public void shouldRejectSecondConnectPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.reject.topic.alias.maximum.repeated/client",
- "${net}/connect.reject.topic.alias.maximum.repeated/server"})
- public void shouldRejectConnectWhenTopicAliasMaximumRepeated() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.successful.fragmented/client",
- "${net}/connect.successful.fragmented/server"})
- public void shouldConnectFragmented() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.0-1]
- @Test
- @Specification({
- "${net}/connect.reject.other.packet.before.connect/client",
- "${net}/connect.reject.other.packet.before.connect/server"})
- public void shouldRejectOtherPacketBeforeConnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/client.sent.close/client",
- "${net}/client.sent.close/server"})
- public void shouldReceiveClientSentClose() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/client.sent.abort/client",
- "${net}/client.sent.abort/server"})
- public void shouldReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/client.sent.reset/client",
- "${net}/client.sent.reset/server"})
- public void shouldReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/disconnect.after.keep.alive.timeout/client",
- "${net}/disconnect.after.keep.alive.timeout/server"})
- public void shouldDisconnectClientAfterKeepAliveTimeout() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-21], [MQTT-3.2.2-21]
- @Test
- @Specification({
- "${net}/connect.server.defined.keep.alive/client",
- "${net}/connect.server.defined.keep.alive/server"})
- public void shouldConnectAndUseServerDefinedKeepAlive() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.timeout.before.connect/client",
- "${net}/connect.timeout.before.connect/server"})
- public void shouldTimeoutBeforeConnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.maximum.qos.0/client",
- "${net}/connect.maximum.qos.0/server"})
- public void shouldConnectWithMaximumQos0() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.retain.not.supported/client",
- "${net}/connect.retain.not.supported/server"})
- public void shouldConnectWithRetainNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.2.2-13]
- @Test
- @Specification({
- "${net}/connect.reject.will.retain.not.supported/client",
- "${net}/connect.reject.will.retain.not.supported/server"})
- public void shouldRejectConnectWillRetainNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Specification({
- "${net}/connect.reject.username.not.authorized/client",
- "${net}/connect.reject.username.not.authorized/server"})
- public void shouldRejectConnectWithUsernameNotAuthorized() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Specification({
- "${net}/connect.reject.password.not.authorized/client",
- "${net}/connect.reject.password.not.authorized/server"})
- public void shouldRejectConnectWithPasswordNotAuthorized() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.will.invalid.will.qos/client",
- "${net}/connect.will.invalid.will.qos/server"})
- public void shouldRejectInvalidWillQos() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.will.reject.will.qos.1.without.will.flag/client",
- "${net}/connect.will.reject.will.qos.1.without.will.flag/server"})
- public void shouldRejectWillQos1WithoutWillFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.will.reject.will.qos.2.without.will.flag/client",
- "${net}/connect.will.reject.will.qos.2.without.will.flag/server"})
- public void shouldRejectWillQos2WithoutWillFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.will.reject.will.retain.without.will.flag/client",
- "${net}/connect.will.reject.will.retain.without.will.flag/server"})
- public void shouldRejectWillRetainWithoutWillFlag() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-9]
- @Test
- @Specification({
- "${net}/connect.reject.will.payload.missing/client",
- "${net}/connect.reject.will.payload.missing/server"})
- public void shouldRejectConnectWillPayloadMissing() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-9]
- @Test
- @Specification({
- "${net}/connect.reject.will.properties.missing/client",
- "${net}/connect.reject.will.properties.missing/server"})
- public void shouldRejectConnectWillPropertiesMissing() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-9]
- @Test
- @Specification({
- "${net}/connect.reject.will.topic.missing/client",
- "${net}/connect.reject.will.topic.missing/server"})
- public void shouldRejectConnectWillTopicNotMissing() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-16]
- @Test
- @Specification({
- "${net}/connect.reject.username.flag.missing/client",
- "${net}/connect.reject.username.flag.missing/server"})
- public void shouldRejectUsernameUserFlagMissing() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-18]
- @Test
- @Specification({
- "${net}/connect.reject.password.no.password.flag/client",
- "${net}/connect.reject.password.no.password.flag/server"})
- public void shouldRejectPasswordWhenMissingPasswordFlag() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-17]
- @Test
- @Specification({
- "${net}/connect.reject.username.flag.only/client",
- "${net}/connect.reject.username.flag.only/server"})
- public void shouldRejectConnectUsernameFlagOnly() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-19]
- @Test
- @Specification({
- "${net}/connect.reject.password.flag.no.password/client",
- "${net}/connect.reject.password.flag.no.password/server"})
- public void shouldRejectPasswordFlagWhenMissingPassword() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-24]
- @Test
- @Specification({
- "${net}/connect.max.packet.size.exceeded/client",
- "${net}/connect.max.packet.size.exceeded/server"})
- public void shouldNotReceivePublishPacketExceedingMaxPacketLimit() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/connect.subscribe.unfragmented/client",
- "${net}/connect.subscribe.unfragmented/server"})
- public void shouldConnectAndSubscribeUnfragmented() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/PingIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/PingIT.java
deleted file mode 100644
index 5b35abb5ad..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/PingIT.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.network;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class PingIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${net}/ping/client",
- "${net}/ping/server"})
- public void shouldConnectThenPingRequestResponse() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/ping.keep.alive/client",
- "${net}/ping.keep.alive/server"})
- public void shouldPingAtKeepAliveInterval() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/PublishIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/PublishIT.java
deleted file mode 100644
index ce7c54e095..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/PublishIT.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.network;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class PublishIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${net}/publish.one.message/client",
- "${net}/publish.one.message/server"})
- public void shouldSendOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.multiple.messages/client",
- "${net}/publish.multiple.messages/server"})
- public void shouldSendMultipleMessages() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.multiple.messages.unfragmented/client",
- "${net}/publish.multiple.messages.unfragmented/server"})
- public void shouldSendMultipleMessagesUnfragmented() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.multiple.messages.with.delay/client",
- "${net}/publish.multiple.messages.with.delay/server"})
- public void shouldSendMultipleMessagesWithDelay() throws Exception
- {
- k3po.start();
- k3po.awaitBarrier("PUBLISHED_MESSAGE_TWO");
- k3po.notifyBarrier("PUBLISH_MESSAGE_THREE");
- k3po.finish();
- }
-
- // [MQTT-2.2.1-2]
- @Test
- @Specification({
- "${net}/publish.reject.qos0.with.packet.id/client",
- "${net}/publish.reject.qos0.with.packet.id/server"})
- public void shouldRejectQos0WithPackedId() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.2.2-9], [MQTT-3.2.2-12]
- @Test
- @Specification({
- "${net}/publish.reject.qos1.not.supported/client",
- "${net}/publish.reject.qos1.not.supported/server"})
- public void shouldRejectQos1NotSupported() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.2.2-9], [MQTT-3.2.2-12]
- @Test
- @Specification({
- "${net}/publish.reject.qos2.not.supported/client",
- "${net}/publish.reject.qos2.not.supported/server"})
- public void shouldRejectQos2NotSupported() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-2.2.1-3]
- @Test
- @Specification({
- "${net}/publish.reject.qos1.without.packet.id/client",
- "${net}/publish.reject.qos1.without.packet.id/server"})
- public void shouldRejectQos1WithoutPackedId() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-2.2.1-3]
- @Test
- @Specification({
- "${net}/publish.reject.qos2.without.packet.id/client",
- "${net}/publish.reject.qos2.without.packet.id/server"})
- public void shouldRejectQos2WithoutPackedId() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-2.2.1-3]
- @Test
- @Specification({
- "${net}/publish.reject.invalid.payload.format/client",
- "${net}/publish.reject.invalid.payload.format/server"})
- public void shouldRejectInvalidPayloadFormat() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.3.4-6]
- @Test
- @Specification({
- "${net}/publish.reject.client.sent.subscription.id/client",
- "${net}/publish.reject.client.sent.subscription.id/server"})
- public void shouldRejectClientSentSubscriptionId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.reject.topic.alias.exceeds.maximum/client",
- "${net}/publish.reject.topic.alias.exceeds.maximum/server"})
- public void shouldRejectWhenTopicAliasExceedsThanMaximum() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.2.2-14]
- @Test
- @Specification({
- "${net}/publish.reject.retain.not.supported/client",
- "${net}/publish.reject.retain.not.supported/server"})
- public void shouldRejectRetainedRetainNotSupported() throws Exception
- {
- k3po.finish();
- }
-
-
- @Test
- @Specification({
- "${net}/publish.reject.topic.alias.repeated/client",
- "${net}/publish.reject.topic.alias.repeated/server"})
- public void shouldRejectWhenTopicAliasRepeated() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.topic.not.routed/client",
- "${net}/publish.topic.not.routed/server"})
- public void shouldRejectTopicNotRouted() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.with.user.property/client",
- "${net}/publish.with.user.property/server"})
- public void shouldSendWithUserProperty() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.with.user.properties.repeated/client",
- "${net}/publish.with.user.properties.repeated/server"})
- public void shouldSendWithRepeatedUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.with.user.properties.distinct/client",
- "${net}/publish.with.user.properties.distinct/server"})
- public void shouldSendWithDistinctUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.message.with.topic.alias/client",
- "${net}/publish.message.with.topic.alias/server"})
- public void shouldSendMessageWithTopicAlias() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.messages.with.topic.alias.distinct/client",
- "${net}/publish.messages.with.topic.alias.distinct/server"})
- public void shouldSendMessagesWithTopicAliasDistinct() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.messages.with.topic.alias.repeated/client",
- "${net}/publish.messages.with.topic.alias.repeated/server"})
- public void shouldSendMessagesWithTopicAliasRepeated() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.messages.with.topic.alias.replaced/client",
- "${net}/publish.messages.with.topic.alias.replaced/server"})
- public void shouldSendMessagesWithTopicAliasReplaced() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.3.2-7]
- @Test
- @Specification({
- "${net}/publish.messages.with.topic.alias.invalid.scope/client",
- "${net}/publish.messages.with.topic.alias.invalid.scope/server"})
- public void shouldSendMessagesWithTopicAliasInvalidScope() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.retained/client",
- "${net}/publish.retained/server"})
- public void shouldSendRetainedMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.empty.retained.message/client",
- "${net}/publish.empty.retained.message/server"})
- public void shouldSendEmptyRetainedMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.empty.message/client",
- "${net}/publish.empty.message/server"})
- public void shouldSendEmptyMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.publish.no.local/client",
- "${net}/subscribe.publish.no.local/server"})
- public void shouldSubscribeThenSendNoLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/publish.one.message.subscribe.unfragmented/client",
- "${net}/publish.one.message.subscribe.unfragmented/server"})
- public void shouldPublishOneMessageThenSubscribeUnfragmented() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/SessionIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/SessionIT.java
deleted file mode 100644
index 8f515004df..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/SessionIT.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.network;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class SessionIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
-
- @Test
- @Specification({
- "${net}/session.connect.with.session.expiry/client",
- "${net}/session.connect.with.session.expiry/server"})
- public void shouldConnectWithSessionExpiry() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-5], [MQTT-3.1.2-23]
- @Test
- @Specification({
- "${net}/session.abort.reconnect.non.clean.start/client",
- "${net}/session.abort.reconnect.non.clean.start/server"})
- public void shouldReconnectNonCleanStart() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.client.takeover/client",
- "${net}/session.client.takeover/server"})
- public void shouldTakeOverSession() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.subscribe/client",
- "${net}/session.subscribe/server"})
- public void shouldSubscribeSaveSubscriptionsInSession() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.will.message.disconnect.with.will.message/client",
- "${net}/session.will.message.disconnect.with.will.message/server"})
- public void shouldConnectWithWillMessageThenDisconnectWithWillMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.exists.clean.start/client",
- "${net}/session.exists.clean.start/server"})
- public void shouldRemoveSessionAtCleanStart() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.will.message.no.ping.within.keep.alive/client",
- "${net}/session.will.message.no.ping.within.keep.alive/server"})
- public void shouldConnectWithWillMessageThenNoPingWithinKeepAlive() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.will.message.normal.disconnect/client",
- "${net}/session.will.message.normal.disconnect/server"})
- public void shouldConnectWithWillMessageThenNormalDisconnect() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.2-15]
- @Test
- @Specification({
- "${net}/session.will.message.retain/client",
- "${net}/session.will.message.retain/server"})
- public void shouldConnectWithWillMessageWithRetain() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.unsubscribe.after.subscribe/client",
- "${net}/session.unsubscribe.after.subscribe/server"})
- public void shouldUnsubscribeAndUpdateSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.subscribe.via.session.state/client",
- "${net}/session.subscribe.via.session.state/server"})
- public void shouldReceiveMessageSubscribedViaSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/session.unsubscribe.after.subscribe.deferred/client",
- "${net}/session.unsubscribe.after.subscribe.deferred/server"})
- public void shouldUnsubscribeAfterSubscribeDeferred() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/SubscribeIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/SubscribeIT.java
deleted file mode 100644
index 675e20f3b2..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/SubscribeIT.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.network;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class SubscribeIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- @Test
- @Specification({
- "${net}/subscribe.one.message/client",
- "${net}/subscribe.one.message/server"})
- public void shouldReceiveOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.one.message.user.properties.unaltered/client",
- "${net}/subscribe.one.message.user.properties.unaltered/server"})
- public void shouldReceiveOneMessageWithUserPropertiesUnaltered() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.receive.message.wildcard/client",
- "${net}/subscribe.receive.message.wildcard/server"})
- public void shouldReceiveOneMessageWithPatternTopic() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-2.2.1-3]
- @Test
- @Specification({
- "${net}/subscribe.reject.missing.packet.id/client",
- "${net}/subscribe.reject.missing.packet.id/server"})
- public void shouldRejectWithoutPacketId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.reject.missing.topic.filters/client",
- "${net}/subscribe.reject.missing.topic.filters/server"})
- public void shouldRejectWithMissingTopicFilters() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.invalid.topic.filter/client",
- "${net}/subscribe.invalid.topic.filter/server"})
- public void shouldRejectInvalidTopicFilter() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filter.single.exact/client",
- "${net}/subscribe.topic.filter.single.exact/server"})
- public void shouldFilterExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filter.multi.level.wildcard/client",
- "${net}/subscribe.topic.filter.multi.level.wildcard/server"})
- public void shouldFilterMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filter.single.level.wildcard/client",
- "${net}/subscribe.topic.filter.single.level.wildcard/server"})
- public void shouldFilterSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filter.two.single.level.wildcard/client",
- "${net}/subscribe.topic.filter.two.single.level.wildcard/server"})
- public void shouldFilterTwoSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filter.single.and.multi.level.wildcard/client",
- "${net}/subscribe.topic.filter.single.and.multi.level.wildcard/server"})
- public void shouldFilterSingleAndMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.disjoint.wildcards/client",
- "${net}/subscribe.topic.filters.disjoint.wildcards/server"})
- public void shouldFilterDisjointWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.overlapping.wildcards/client",
- "${net}/subscribe.topic.filters.overlapping.wildcards/server"})
- public void shouldFilterOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
-
- @Test
- @Specification({
- "${net}/subscribe.reject.topic.filter.invalid.wildcard/client",
- "${net}/subscribe.reject.topic.filter.invalid.wildcard/server"})
- public void shouldRejectTopicFilterInvalidWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.aggregated.both.exact/client",
- "${net}/subscribe.topic.filters.aggregated.both.exact/server"})
- public void shouldFilterAggregatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.isolated.both.exact/client",
- "${net}/subscribe.topic.filters.isolated.both.exact/server"})
- public void shouldFilterIsolatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.isolated.both.wildcard/client",
- "${net}/subscribe.topic.filters.isolated.both.wildcard/server"})
- public void shouldFilterIsolatedBothWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.aggregated.exact.and.wildcard/client",
- "${net}/subscribe.topic.filters.aggregated.exact.and.wildcard/server"})
- public void shouldFilterAggregatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.topic.filters.isolated.exact.and.wildcard/client",
- "${net}/subscribe.topic.filters.isolated.exact.and.wildcard/server"})
- public void shouldFilterIsolatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.invalid.fixed.header.flags/client",
- "${net}/subscribe.invalid.fixed.header.flags/server"})
- public void shouldRejectMalformedPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.reject.no.local/client",
- "${net}/subscribe.reject.no.local/server"})
- public void shouldRejectNoLocal() throws Exception
- {
- k3po.finish();
- }
-
-
- // [MQTT-3.3.2-15], [MQTT-3.3.2-16]
- @Test
- @Specification({
- "${net}/subscribe.one.message.receive.response.topic.and.correlation.data/client",
- "${net}/subscribe.one.message.receive.response.topic.and.correlation.data/server"})
- public void shouldReceiveCorrelationData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.one.message.with.invalid.subscription.id/client",
- "${net}/subscribe.one.message.with.invalid.subscription.id/server"})
- public void shouldReceiveOneMessageWithInvalidSubscriptionId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.receive.message/client",
- "${net}/subscribe.receive.message/server"})
- public void shouldReceiveOneMessageAfterPublish() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.get.retained.as.published/client",
- "${net}/subscribe.get.retained.as.published/server"})
- public void shouldReceiveRetainedAsPublished() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.8.3-5]
- @Test
- @Specification({
- "${net}/subscribe.reject.malformed.subscription.options/client",
- "${net}/subscribe.reject.malformed.subscription.options/server"})
- public void shouldRejectMalformedSubscriptionOptions() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.reject.wildcard.subscriptions.not.supported/client",
- "${net}/subscribe.reject.wildcard.subscriptions.not.supported/server"})
- public void shouldRejectWildcardSubscriptionsNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.reject.subscription.ids.not.supported/client",
- "${net}/subscribe.reject.subscription.ids.not.supported/server"})
- public void shouldRejectSubscriptionIdentifiersNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.reject.shared.subscriptions.not.supported/client",
- "${net}/subscribe.reject.shared.subscriptions.not.supported/server"})
- public void shouldRejectSharedSubscriptionsNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.qos0.replay.retained.no.packet.id/client",
- "${net}/subscribe.qos0.replay.retained.no.packet.id/server"})
- public void shouldReceiveAndReplayRetainedQos0() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/subscribe.qos0.publish.retained.no.replay/client",
- "${net}/subscribe.qos0.publish.retained.no.replay/server"})
- public void shouldNotReplayRetained() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/UnsubscribeIT.java b/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/UnsubscribeIT.java
deleted file mode 100644
index 865c0a07fc..0000000000
--- a/incubator/binding-mqtt.spec/src/test/java/io/aklivity/zilla/specs/binding/mqtt/streams/network/UnsubscribeIT.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.specs.binding.mqtt.streams.network;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-public class UnsubscribeIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(5, SECONDS));
-
- @Rule
- public final TestRule chain = outerRule(k3po).around(timeout);
-
- // [MQTT-2.2.1-3]
- @Test
- @Specification({
- "${net}/unsubscribe.reject.missing.packet.id/client",
- "${net}/unsubscribe.reject.missing.packet.id/server"})
- public void shouldRejectWithoutPacketId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/unsubscribe.after.subscribe/client",
- "${net}/unsubscribe.after.subscribe/server"})
- public void shouldAcknowledge() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.10.4-5]
- @Test
- @Specification({
- "${net}/unsubscribe.no.matching.subscription/client",
- "${net}/unsubscribe.no.matching.subscription/server"})
- public void shouldAcknowledgeNoMatchingSubscription() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/unsubscribe.aggregated.topic.filters.both.exact/client",
- "${net}/unsubscribe.aggregated.topic.filters.both.exact/server"})
- public void shouldAcknowledgeAggregatedTopicFiltersBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/unsubscribe.topic.filter.single/client",
- "${net}/unsubscribe.topic.filter.single/server"})
- public void shouldAcknowledgeSingleTopicFilters() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.10.1-1]
- @Test
- @Specification({
- "${net}/unsubscribe.reject.invalid.fixed.header.flags/client",
- "${net}/unsubscribe.reject.invalid.fixed.header.flags/server"})
- public void shouldRejectMalformedPacket() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.10.3-2]
- @Test
- @Specification({
- "${net}/unsubscribe.reject.no.topic.filter/client",
- "${net}/unsubscribe.reject.no.topic.filter/server"})
- public void shouldRejectNoTopicFilter() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Specification({
- "${net}/unsubscribe.publish.unfragmented/client",
- "${net}/unsubscribe.publish.unfragmented/server"})
- public void shouldAcknowledgeAndPublishUnfragmented() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt/pom.xml b/incubator/binding-mqtt/pom.xml
deleted file mode 100644
index 63dffa119c..0000000000
--- a/incubator/binding-mqtt/pom.xml
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
-
- 4.0.0
-
- io.aklivity.zilla
- incubator
- 0.9.51
- ../pom.xml
-
-
- binding-mqtt
- zilla::incubator::binding-mqtt
-
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
-
- 11
- 11
- 0.69
- 3
-
-
-
-
- ${project.groupId}
- binding-mqtt.spec
- ${project.version}
- provided
-
-
- ${project.groupId}
- engine
- ${project.version}
- provided
-
-
- ${project.groupId}
- engine
- test-jar
- ${project.version}
- test
-
-
- junit
- junit
- test
-
-
- org.hamcrest
- hamcrest-library
- test
-
-
- org.mockito
- mockito-core
- test
-
-
- org.kaazing
- k3po.junit
- test
-
-
- org.kaazing
- k3po.lang
- test
-
-
- org.openjdk.jmh
- jmh-core
- test
-
-
- org.openjdk.jmh
- jmh-generator-annprocess
- test
-
-
-
-
-
-
- org.jasig.maven
- maven-notice-plugin
-
-
- ${project.groupId}
- flyweight-maven-plugin
- ${project.version}
-
- core mqtt protocol
- io.aklivity.zilla.runtime.binding.mqtt.internal.types
-
-
-
-
- generate
-
-
-
-
-
- com.mycila
- license-maven-plugin
-
-
- maven-checkstyle-plugin
-
-
- maven-dependency-plugin
-
-
- process-resources
-
- unpack
-
-
-
-
- ${project.groupId}
- binding-mqtt.spec
-
-
- ^\Qio/aklivity/zilla/specs/binding/mqtt/\E
- io/aklivity/zilla/runtime/binding/mqtt/internal/
-
-
-
-
- io/aklivity/zilla/specs/binding/mqtt/schema/mqtt.schema.patch.json
- ${project.build.directory}/classes
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- org.moditect
- moditect-maven-plugin
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- test-jar
-
-
-
-
-
- org.kaazing
- k3po-maven-plugin
-
-
- ${project.groupId}
- engine
- ${project.version}
- test-jar
-
-
- ${project.groupId}
- engine
- ${project.version}
-
-
-
-
- org.apache.maven.plugins
- maven-failsafe-plugin
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
- io/aklivity/zilla/runtime/binding/mqtt/internal/types/**/*.class
-
-
-
- BUNDLE
-
-
- INSTRUCTION
- COVEREDRATIO
- ${jacoco.coverage.ratio}
-
-
- CLASS
- MISSEDCOUNT
- ${jacoco.missed.count}
-
-
-
-
-
-
-
- io.gatling
- maven-shade-plugin
-
-
-
- org.agrona:agrona
- io.aklivity.zilla:engine
- org.openjdk.jmh:jmh-core
- net.sf.jopt-simple:jopt-simple
- org.apache.commons:commons-math3
- commons-cli:commons-cli
- com.github.biboudis:jmh-profilers
-
-
-
-
-
-
-
diff --git a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/MqttConfiguration.java b/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/MqttConfiguration.java
deleted file mode 100644
index 36794d2dfe..0000000000
--- a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/MqttConfiguration.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal;
-
-import java.util.concurrent.TimeUnit;
-
-import io.aklivity.zilla.runtime.engine.Configuration;
-
-public class MqttConfiguration extends Configuration
-{
- private static final ConfigurationDef MQTT_CONFIG;
- public static final LongPropertyDef CONNECT_TIMEOUT;
- public static final LongPropertyDef PUBLISH_TIMEOUT;
- public static final IntPropertyDef SESSION_EXPIRY_INTERVAL;
- public static final ShortPropertyDef KEEP_ALIVE_MINIMUM;
- public static final ShortPropertyDef KEEP_ALIVE_MAXIMUM;
- public static final BytePropertyDef MAXIMUM_QOS;
- public static final BooleanPropertyDef RETAIN_AVAILABLE;
- public static final ShortPropertyDef TOPIC_ALIAS_MAXIMUM;
- public static final BooleanPropertyDef WILDCARD_SUBSCRIPTION_AVAILABLE;
- public static final BooleanPropertyDef SUBSCRIPTION_IDENTIFIERS_AVAILABLE;
- public static final BooleanPropertyDef SHARED_SUBSCRIPTION_AVAILABLE;
- public static final BooleanPropertyDef SESSIONS_AVAILABLE;
- public static final BooleanPropertyDef NO_LOCAL;
- public static final IntPropertyDef SESSION_EXPIRY_GRACE_PERIOD;
- public static final PropertyDef CLIENT_ID;
-
- static
- {
- final ConfigurationDef config = new ConfigurationDef("zilla.binding.mqtt");
- PUBLISH_TIMEOUT = config.property("publish.timeout", TimeUnit.SECONDS.toSeconds(30));
- CONNECT_TIMEOUT = config.property("connect.timeout", TimeUnit.SECONDS.toSeconds(3));
- SESSION_EXPIRY_INTERVAL = config.property("session.expiry.interval", Integer.MAX_VALUE);
- //TODO: better default values?
- KEEP_ALIVE_MINIMUM = config.property("keep.alive.minimum", (short) 10);
- KEEP_ALIVE_MAXIMUM = config.property("keep.alive.maximum", (short) 1000);
- MAXIMUM_QOS = config.property("maximum.qos", (byte) 0);
- RETAIN_AVAILABLE = config.property("retain.available", true);
- TOPIC_ALIAS_MAXIMUM = config.property("topic.alias.maximum", (short) 0);
- WILDCARD_SUBSCRIPTION_AVAILABLE = config.property("wildcard.subscription.available", true);
- SUBSCRIPTION_IDENTIFIERS_AVAILABLE = config.property("subscription.identifiers.available", true);
- SHARED_SUBSCRIPTION_AVAILABLE = config.property("shared.subscription.available", false);
- SESSIONS_AVAILABLE = config.property("sessions.available", true);
- NO_LOCAL = config.property("no.local", true);
- SESSION_EXPIRY_GRACE_PERIOD = config.property("session.expiry.grace.period", 30);
- CLIENT_ID = config.property("client.id");
- MQTT_CONFIG = config;
- }
-
- public MqttConfiguration(
- Configuration config)
- {
- super(MQTT_CONFIG, config);
- }
-
- public long publishTimeout()
- {
- return PUBLISH_TIMEOUT.get(this);
- }
-
- public long connectTimeout()
- {
- return CONNECT_TIMEOUT.get(this);
- }
-
- public boolean retainAvailable()
- {
- return RETAIN_AVAILABLE.get(this);
- }
-
- public int sessionExpiryInterval()
- {
- return SESSION_EXPIRY_INTERVAL.get(this);
- }
-
- public short keepAliveMinimum()
- {
- return KEEP_ALIVE_MINIMUM.get(this);
- }
-
- public short keepAliveMaximum()
- {
- return KEEP_ALIVE_MAXIMUM.get(this);
- }
-
- public byte maximumQos()
- {
- return MAXIMUM_QOS.get(this);
- }
-
- public short topicAliasMaximum()
- {
- return TOPIC_ALIAS_MAXIMUM.get(this);
- }
-
- public boolean wildcardSubscriptionAvailable()
- {
- return WILDCARD_SUBSCRIPTION_AVAILABLE.get(this);
- }
-
- public boolean subscriptionIdentifierAvailable()
- {
- return SUBSCRIPTION_IDENTIFIERS_AVAILABLE.get(this);
- }
-
- public boolean sharedSubscriptionAvailable()
- {
- return SHARED_SUBSCRIPTION_AVAILABLE.get(this);
- }
-
- public boolean sessionsAvailable()
- {
- return SESSIONS_AVAILABLE.get(this);
- }
-
- public boolean noLocal()
- {
- return NO_LOCAL.get(this);
- }
-
- public int sessionExpiryGracePeriod()
- {
- return SESSION_EXPIRY_GRACE_PERIOD.get(this);
- }
-
- public String clientId()
- {
- return CLIENT_ID.get(this);
- }
-}
diff --git a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttBindingConfig.java b/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttBindingConfig.java
deleted file mode 100644
index bc98037e48..0000000000
--- a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttBindingConfig.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.config;
-
-import static java.util.stream.Collectors.toList;
-
-import java.util.List;
-
-import io.aklivity.zilla.runtime.binding.mqtt.internal.types.MqttCapabilities;
-import io.aklivity.zilla.runtime.engine.config.BindingConfig;
-import io.aklivity.zilla.runtime.engine.config.KindConfig;
-
-public final class MqttBindingConfig
-{
- public final long id;
- public final String name;
- public final KindConfig kind;
- public final List routes;
-
- public MqttBindingConfig(
- BindingConfig binding)
- {
- this.id = binding.id;
- this.name = binding.name;
- this.kind = binding.kind;
- this.routes = binding.routes.stream().map(MqttRouteConfig::new).collect(toList());
- }
-
- public MqttRouteConfig resolve(
- long authorization,
- MqttCapabilities capabilities)
- {
- return routes.stream()
- .filter(r -> r.authorized(authorization) && r.matches(capabilities))
- .findFirst()
- .orElse(null);
- }
-
- public MqttRouteConfig resolve(
- long authorization,
- String topic,
- MqttCapabilities capabilities)
- {
- return routes.stream()
- .filter(r -> r.authorized(authorization) && r.matches(topic, capabilities))
- .findFirst()
- .orElse(null);
- }
-}
diff --git a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfig.java b/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfig.java
deleted file mode 100644
index 0492fd2190..0000000000
--- a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfig.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.config;
-
-import io.aklivity.zilla.runtime.binding.mqtt.internal.types.MqttCapabilities;
-import io.aklivity.zilla.runtime.engine.config.ConditionConfig;
-
-public final class MqttConditionConfig extends ConditionConfig
-{
- public final String topic;
- public final MqttCapabilities capabilities;
-
- public MqttConditionConfig(
- String topic,
- MqttCapabilities capabilities)
- {
- this.topic = topic;
- this.capabilities = capabilities;
- }
-}
-
diff --git a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfigAdapter.java b/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfigAdapter.java
deleted file mode 100644
index 32468e6666..0000000000
--- a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfigAdapter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.config;
-
-import jakarta.json.Json;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonObjectBuilder;
-import jakarta.json.bind.adapter.JsonbAdapter;
-
-import io.aklivity.zilla.runtime.binding.mqtt.internal.MqttBinding;
-import io.aklivity.zilla.runtime.binding.mqtt.internal.types.MqttCapabilities;
-import io.aklivity.zilla.runtime.engine.config.ConditionConfig;
-import io.aklivity.zilla.runtime.engine.config.ConditionConfigAdapterSpi;
-
-public final class MqttConditionConfigAdapter implements ConditionConfigAdapterSpi, JsonbAdapter
-{
- private static final String TOPIC_NAME = "topic";
- private static final String CAPABILITIES_NAME = "capabilities";
-
- @Override
- public String type()
- {
- return MqttBinding.NAME;
- }
-
- @Override
- public JsonObject adaptToJson(
- ConditionConfig condition)
- {
- MqttConditionConfig mqttCondition = (MqttConditionConfig) condition;
-
- JsonObjectBuilder object = Json.createObjectBuilder();
-
- if (mqttCondition.topic != null)
- {
- object.add(TOPIC_NAME, mqttCondition.topic);
- }
-
- if (mqttCondition.capabilities != null)
- {
- object.add(CAPABILITIES_NAME, mqttCondition.capabilities.toString().toLowerCase());
- }
-
- return object.build();
- }
-
- @Override
- public ConditionConfig adaptFromJson(
- JsonObject object)
- {
- String topic = object.containsKey(TOPIC_NAME)
- ? object.getString(TOPIC_NAME)
- : null;
-
- MqttCapabilities capabilities = object.containsKey(CAPABILITIES_NAME)
- ? MqttCapabilities.valueOf(object.getString(CAPABILITIES_NAME).toUpperCase())
- : null;
-
- return new MqttConditionConfig(topic, capabilities);
- }
-}
diff --git a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionMatcher.java b/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionMatcher.java
deleted file mode 100644
index e5a4575f15..0000000000
--- a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionMatcher.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.config;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import io.aklivity.zilla.runtime.binding.mqtt.internal.types.MqttCapabilities;
-
-public final class MqttConditionMatcher
-{
- private final Matcher topicMatch;
- private final MqttCapabilities capabilitiesMatch;
-
- public MqttConditionMatcher(
- MqttConditionConfig condition)
- {
- this.topicMatch = condition.topic != null ? asMatcher(condition.topic) : null;
- this.capabilitiesMatch = condition.capabilities;
- }
-
- public boolean matches(
- MqttCapabilities capabilities)
- {
- return matchesCapabilities(capabilities);
- }
-
- public boolean matches(
- String topic,
- MqttCapabilities capabilities)
- {
- return matchesTopic(topic) &&
- matchesCapabilities(capabilities);
- }
-
- private boolean matchesTopic(
- String topic)
- {
- return this.topicMatch == null || this.topicMatch.reset(topic).matches();
- }
-
- private boolean matchesCapabilities(
- MqttCapabilities capabilities)
- {
- return this.capabilitiesMatch == null || (this.capabilitiesMatch.value() & capabilities.value()) != 0;
- }
-
- private static Matcher asMatcher(
- String wildcard)
- {
- return Pattern.compile(wildcard
- .replace(".", "\\.")
- .replace("$", "\\$")
- .replace("+", "[^/]*")
- .replace("#", ".*")).matcher("");
- }
-}
diff --git a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/MqttClientFactory.java b/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/MqttClientFactory.java
deleted file mode 100644
index a307aaab82..0000000000
--- a/incubator/binding-mqtt/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/MqttClientFactory.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-public class MqttClientFactory
-{
-}
diff --git a/incubator/binding-mqtt/src/main/moditect/module-info.java b/incubator/binding-mqtt/src/main/moditect/module-info.java
deleted file mode 100644
index 2a88753954..0000000000
--- a/incubator/binding-mqtt/src/main/moditect/module-info.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-module io.aklivity.zilla.runtime.binding.mqtt
-{
- requires io.aklivity.zilla.runtime.engine;
-
- provides io.aklivity.zilla.runtime.engine.binding.BindingFactorySpi
- with io.aklivity.zilla.runtime.binding.mqtt.internal.MqttBindingFactorySpi;
-
- provides io.aklivity.zilla.runtime.engine.config.ConditionConfigAdapterSpi
- with io.aklivity.zilla.runtime.binding.mqtt.internal.config.MqttConditionConfigAdapter;
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfigAdapterTest.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfigAdapterTest.java
deleted file mode 100644
index ac0a56e001..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/config/MqttConditionConfigAdapterTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.config;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.types.MqttCapabilities.PUBLISH_ONLY;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.types.MqttCapabilities.SUBSCRIBE_ONLY;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.nullValue;
-
-import jakarta.json.bind.Jsonb;
-import jakarta.json.bind.JsonbBuilder;
-import jakarta.json.bind.JsonbConfig;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class MqttConditionConfigAdapterTest
-{
- private Jsonb jsonb;
-
- @Before
- public void initJson()
- {
- JsonbConfig config = new JsonbConfig()
- .withAdapters(new MqttConditionConfigAdapter());
- jsonb = JsonbBuilder.create(config);
- }
-
- @Test
- public void shouldReadCondition()
- {
- String text =
- "{" +
- "\"topic\": \"test\"," +
- "\"capabilities\": \"publish_only\"" +
- "}";
-
- MqttConditionConfig condition = jsonb.fromJson(text, MqttConditionConfig.class);
-
- assertThat(condition, not(nullValue()));
- assertThat(condition.topic, equalTo("test"));
- assertThat(condition.capabilities, equalTo(PUBLISH_ONLY));
- }
-
- @Test
- public void shouldWriteCondition()
- {
- MqttConditionConfig condition = new MqttConditionConfig("test", SUBSCRIBE_ONLY);
-
- String text = jsonb.toJson(condition);
-
- assertThat(text, not(nullValue()));
- assertThat(text, equalTo("{\"topic\":\"test\",\"capabilities\":\"subscribe_only\"}"));
- }
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/ConnectionIT.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/ConnectionIT.java
deleted file mode 100644
index 1abac32291..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/ConnectionIT.java
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfiguration.PUBLISH_TIMEOUT;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.CONNECT_TIMEOUT_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.KEEP_ALIVE_MINIMUM_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.MAXIMUM_QOS_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.RETAIN_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_EXPIRY_INTERVAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SHARED_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.WILDCARD_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configure;
-
-public class ConnectionIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network")
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(PUBLISH_TIMEOUT, 1L)
- .configure(ENGINE_DRAIN_ON_CLOSE, false)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config")
- .external("app0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.successful/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.server.assigned.client.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnectWithServerAssignedClientId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.missing.client.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectMissingClientId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/disconnect/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnectThenDisconnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.invalid.protocol.version/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectInvalidProtocolVersion() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.invalid.flags/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectMalformedConnectPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.invalid.authentication.method/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectBadAuthenticationMethod() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/disconnect.reject.invalid.fixed.header.flags/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectMalformedDisconnectPacket() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.0-2]
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.second.connect/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectSecondConnectPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.successful.fragmented/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnectFragmented() throws Exception
- {
- k3po.finish();
- }
-
- // [MQTT-3.1.0-1]
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.other.packet.before.connect/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectOtherPacketBeforeConnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.topic.alias.maximum.repeated/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWhenTopicAliasMaximumRepeated() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/client.sent.close/client",
- "${app}/client.sent.abort/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveClientSentClose() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/client.sent.abort/client",
- "${app}/client.sent.abort/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveClientSentAbort() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/client.sent.reset/client",
- "${app}/client.sent.abort/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveClientSentReset() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/disconnect.after.keep.alive.timeout/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = KEEP_ALIVE_MINIMUM_NAME, value = "1")
- public void shouldDisconnectClientAfterKeepAliveTimeout() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.timeout.before.connect/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = CONNECT_TIMEOUT_NAME, value = "1")
- public void shouldTimeoutBeforeConnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.maximum.qos.0/client"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnectWithMaximumQos0() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.retain.not.supported/client"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = RETAIN_AVAILABLE_NAME, value = "false")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnectWithRetainNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.will.retain.not.supported/client"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = RETAIN_AVAILABLE_NAME, value = "false")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWillRetainNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.password.flag.no.password/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWithPasswordFlagSetNoPassword() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.password.no.password.flag/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWithPasswordNoPasswordFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.username.flag.only/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWithUsernameFlagNoUsername() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.username.flag.missing/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWithUsernameNoUsernameFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.will.payload.missing/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWillPayloadMissing() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.will.properties.missing/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWillPropertiesMissing() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.reject.will.topic.missing/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectConnectWillTopicMissing() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.will.invalid.will.qos/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectInvalidWillQos() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.will.reject.will.qos.1.without.will.flag/client"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectWillQos1WithoutWillFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.will.reject.will.qos.2.without.will.flag/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectWillQos2WithoutWillFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.will.reject.will.retain.without.will.flag/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectWillRetainWithoutWillFlag() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.max.packet.size.exceeded/client",
- "${app}/connect.max.packet.size.exceeded/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldIgnorePublishPacketBiggerThanMaxPacketSize() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.server.defined.keep.alive/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = KEEP_ALIVE_MINIMUM_NAME, value = "10")
- public void shouldConnectWithServerDefinedKeepAlive() throws Exception
- {
- k3po.start();
- Thread.sleep(2000);
- k3po.notifyBarrier("WAIT_2_SECONDS");
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/connect.subscribe.unfragmented/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = KEEP_ALIVE_MINIMUM_NAME, value = "10")
- public void shouldConnectAndSubscribeUnfragmented() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/PingIT.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/PingIT.java
deleted file mode 100644
index bb76bea42c..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/PingIT.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfiguration.PUBLISH_TIMEOUT;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.KEEP_ALIVE_MINIMUM_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.MAXIMUM_QOS_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_EXPIRY_INTERVAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SHARED_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.WILDCARD_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configure;
-
-public class PingIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network")
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(PUBLISH_TIMEOUT, 1L)
- .configure(ENGINE_DRAIN_ON_CLOSE, false)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config")
- .external("app0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/ping/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldConnectThenPingRequestResponse() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/ping.keep.alive/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = KEEP_ALIVE_MINIMUM_NAME, value = "1")
- public void shouldPingAtKeepAliveInterval() throws Exception
- {
- k3po.start();
- Thread.sleep(1000);
- k3po.notifyBarrier("WAIT_1_SECOND");
- Thread.sleep(1000);
- k3po.notifyBarrier("WAIT_1_SECOND2");
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/PublishIT.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/PublishIT.java
deleted file mode 100644
index 389414a5eb..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/PublishIT.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfiguration.PUBLISH_TIMEOUT;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.MAXIMUM_QOS_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.PUBLISH_TIMEOUT_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.RETAIN_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_EXPIRY_INTERVAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SHARED_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.TOPIC_ALIAS_MAXIMUM_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.WILDCARD_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configure;
-
-public class PublishIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network")
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(PUBLISH_TIMEOUT, 1L)
- .configure(ENGINE_DRAIN_ON_CLOSE, false)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config")
- .external("app0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.one.message/client",
- "${app}/publish.one.message/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.retained/client",
- "${app}/publish.retained/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishRetainedMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.message.with.topic.alias/client",
- "${app}/publish.message.with.topic.alias/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishMessageWithTopicAlias() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.multiple.messages/client",
- "${app}/publish.multiple.messages/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishMultipleMessages() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.multiple.messages.unfragmented/client",
- "${app}/publish.multiple.messages/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishMultipleMessagesUnfragmented() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.one.message.subscribe.unfragmented/client",
- "${app}/publish.one.message.subscribe.unfragmented/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishOneMessageSubscribeUnfragmented() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.multiple.messages.with.delay/client",
- "${app}/publish.multiple.messages/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = PUBLISH_TIMEOUT_NAME, value = "5")
- public void shouldPublishMultipleMessagesWithDelay() throws Exception
- {
- k3po.start();
- k3po.awaitBarrier("PUBLISHED_MESSAGE_TWO");
- Thread.sleep(500);
- k3po.notifyBarrier("PUBLISH_MESSAGE_THREE");
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.messages.with.topic.alias.distinct/client",
- "${app}/publish.messages.with.topic.alias.distinct/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishMessagesWithTopicAliasDistinct() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.messages.with.topic.alias.repeated/client",
- "${app}/publish.messages.with.topic.alias.repeated/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishMessagesWithTopicAliasRepeated() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.messages.with.topic.alias.replaced/client",
- "${app}/publish.messages.with.topic.alias.replaced/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "1")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishMessagesWithTopicAliasReplaced() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.messages.with.topic.alias.invalid.scope/client",
- "${app}/publish.messages.with.topic.alias.invalid.scope/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "1")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldSendMessagesWithTopicAliasInvalidScope() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.topic.not.routed/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectTopicNotRouted() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.topic.alias.exceeds.maximum/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishWhenTopicAliasExceedsMaximum() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.topic.alias.repeated/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishWithMultipleTopicAliases() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.client.sent.subscription.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishClientSentSubscriptionId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.invalid.payload.format/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishInvalidPayloadFormat() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.qos1.not.supported/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "0")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublisQos1NotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.qos2.not.supported/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "0")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublisQos2NotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.qos0.with.packet.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishQos0WithPacketId() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.qos1.without.packet.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishQos1WithoutPacketId() throws Exception
- {
- k3po.finish();
- }
-
- @Ignore
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.qos2.without.packet.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishQos2WithoutPacketId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.reject.retain.not.supported/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = RETAIN_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = TOPIC_ALIAS_MAXIMUM_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectPublishRetainNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.with.user.property/client",
- "${app}/publish.with.user.property/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishWithUserProperty() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.with.user.properties.distinct/client",
- "${app}/publish.with.user.properties.distinct/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishWithDistinctUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.with.user.properties.repeated/client",
- "${app}/publish.with.user.properties.repeated/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishWithRepeatedUserProperties() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.empty.retained.message/client",
- "${app}/publish.empty.retained.message/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishEmptyRetainedMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/publish.empty.message/client",
- "${app}/publish.empty.message/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldPublishEmptyMessage() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/SessionIT.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/SessionIT.java
deleted file mode 100644
index 4419c5cbac..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/SessionIT.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfiguration.PUBLISH_TIMEOUT;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.KEEP_ALIVE_MINIMUM_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.MAXIMUM_QOS_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_EXPIRY_INTERVAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SHARED_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.WILDCARD_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configure;
-
-public class SessionIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network")
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(PUBLISH_TIMEOUT, 1L)
- .configure(ENGINE_DRAIN_ON_CLOSE, false)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config")
- .external("app0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.connect.with.session.expiry/client",
- "${app}/session.connect.with.session.expiry/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldConnectWithSessionExpiry() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.subscribe/client",
- "${app}/session.subscribe/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldSubscribeSaveSubscriptionsInSession() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.subscribe.via.session.state/client",
- "${app}/session.subscribe.via.session.state/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldSubscribeViaSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.unsubscribe.after.subscribe/client",
- "${app}/session.unsubscribe.after.subscribe/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldUnsubscribeSaveNewSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.unsubscribe.after.subscribe.deferred/client",
- "${app}/session.unsubscribe.after.subscribe.deferred/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldUnsubscribeAfterSubscribeDeferred() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.subscribe/client",
- "${app}/session.unsubscribe.via.session.state/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldUnsubscribeViaSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.will.message.retain/client",
- "${app}/session.will.message.retain/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldStoreWillMessageInSessionState() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.will.message.normal.disconnect/client",
- "${app}/session.will.message.normal.disconnect/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldCloseSessionNormalDisconnect() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.will.message.disconnect.with.will.message/client",
- "${app}/session.will.message.disconnect.with.will.message/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldCloseSessionDisconnectWithWill() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.will.message.no.ping.within.keep.alive/client",
- "${app}/session.will.message.no.ping.within.keep.alive/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- @Configure(name = KEEP_ALIVE_MINIMUM_NAME, value = "1")
- public void shouldCloseSessionWithKeepAliveExpired() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.exists.clean.start/client",
- "${app}/session.exists.clean.start/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldCloseExistingConnectionCleanStart() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.abort.reconnect.non.clean.start/client",
- "${app}/session.abort.reconnect.non.clean.start/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldClientAbortAndReconnectWithNonCleanStart() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/session.client.takeover/client",
- "${app}/session.client.takeover/server"})
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "10")
- public void shouldClientTakeOverSession() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/SubscribeIT.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/SubscribeIT.java
deleted file mode 100644
index ecd016e1ed..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/SubscribeIT.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfiguration.PUBLISH_TIMEOUT;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.MAXIMUM_QOS_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.NO_LOCAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_EXPIRY_INTERVAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SHARED_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SUBSCRIPTION_IDENTIFIERS_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.WILDCARD_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configure;
-
-public class SubscribeIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network")
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(10, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(PUBLISH_TIMEOUT, 1L)
- .configure(ENGINE_DRAIN_ON_CLOSE, false)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config")
- .external("app0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.one.message/client",
- "${app}/subscribe.one.message/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveOneMessage() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.one.message.receive.response.topic.and.correlation.data/client",
- "${app}/subscribe.one.message.receive.response.topic.and.correlation.data/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveCorrelationData() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.one.message.user.properties.unaltered/client",
- "${app}/subscribe.one.message.user.properties.unaltered/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveOneMessageWithUserPropertiesUnaltered() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.one.message.with.invalid.subscription.id/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveOneMessageWithInvalidSubscriptionId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filter.single.exact/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filter.multi.level.wildcard/client",
- "${app}/subscribe.topic.filter.multi.level.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filter.single.and.multi.level.wildcard/client",
- "${app}/subscribe.topic.filter.single.and.multi.level.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterSingleAndMultiLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filter.single.level.wildcard/client",
- "${app}/subscribe.topic.filter.single.level.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filter.two.single.level.wildcard/client",
- "${app}/subscribe.topic.filter.two.single.level.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterTwoSingleLevelWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.aggregated.both.exact/client",
- "${app}/subscribe.topic.filters.aggregated.both.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterAggregatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.isolated.both.exact/client",
- "${app}/subscribe.topic.filters.isolated.both.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterIsolatedBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.isolated.both.wildcard/client",
- "${app}/subscribe.topic.filters.isolated.both.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterIsolatedBothWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.aggregated.exact.and.wildcard/client",
- "${app}/subscribe.topic.filters.aggregated.exact.and.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterAggregatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.disjoint.wildcards/client",
- "${app}/subscribe.topic.filters.disjoint.wildcards/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterDisjointWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.isolated.exact.and.wildcard/client",
- "${app}/subscribe.topic.filters.isolated.exact.and.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterIsolatedExactAndWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.topic.filters.overlapping.wildcards/client",
- "${app}/subscribe.topic.filters.overlapping.wildcards/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldFilterOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.get.retained.as.published/client",
- "${app}/subscribe.get.retained.as.published/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveRetainedAsPublished() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.qos0.publish.retained.no.replay/client",
- "${app}/subscribe.qos0.publish.retained.no.replay/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldNotReplayRetained() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.qos0.replay.retained.no.packet.id/client",
- "${app}/subscribe.qos0.replay.retained.no.packet.id/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveAndReplayRetainedQos0() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.reject.no.local/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- @Configure(name = NO_LOCAL_NAME, value = "false")
- public void shouldRejectNoLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.receive.message/client",
- "${app}/subscribe.receive.message/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveOneMessageAfterPublish() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.receive.message.overlapping.wildcard/client",
- "${app}/subscribe.receive.message.overlapping.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveMessageOverlappingWildcard() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.receive.message.wildcard/client",
- "${app}/subscribe.receive.message.wildcard/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveOneMessageWithPatternTopic() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.retain.as.published/client",
- "${app}/subscribe.retain.as.published/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldReceiveRetainAsPublished() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.publish.no.local/client",
- "${app}/subscribe.publish.no.local/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldNotReceivePublishLocal() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.invalid.fixed.header.flags/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectMalformedPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.invalid.topic.filter/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectInvalidTopicFilter() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.reject.wildcard.subscriptions.not.supported/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectWildcardSubscriptionsNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.reject.subscription.ids.not.supported/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SUBSCRIPTION_IDENTIFIERS_AVAILABLE_NAME, value = "false")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectSubscriptionIdentifiersNotSupported() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/subscribe.reject.shared.subscriptions.not.supported/client"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "false")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectSharedSubscriptionsNotSupported() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/UnsubscribeIT.java b/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/UnsubscribeIT.java
deleted file mode 100644
index 12830e9772..0000000000
--- a/incubator/binding-mqtt/src/test/java/io/aklivity/zilla/runtime/binding/mqtt/internal/stream/UnsubscribeIT.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright 2021-2023 Aklivity Inc.
- *
- * Aklivity licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package io.aklivity.zilla.runtime.binding.mqtt.internal.stream;
-
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfiguration.PUBLISH_TIMEOUT;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.MAXIMUM_QOS_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SESSION_EXPIRY_INTERVAL_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.SHARED_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.binding.mqtt.internal.MqttConfigurationTest.WILDCARD_SUBSCRIPTION_AVAILABLE_NAME;
-import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.rules.RuleChain.outerRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.DisableOnDebug;
-import org.junit.rules.TestRule;
-import org.junit.rules.Timeout;
-import org.kaazing.k3po.junit.annotation.Specification;
-import org.kaazing.k3po.junit.rules.K3poRule;
-
-import io.aklivity.zilla.runtime.engine.test.EngineRule;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configuration;
-import io.aklivity.zilla.runtime.engine.test.annotation.Configure;
-
-public class UnsubscribeIT
-{
- private final K3poRule k3po = new K3poRule()
- .addScriptRoot("net", "io/aklivity/zilla/specs/binding/mqtt/streams/network")
- .addScriptRoot("app", "io/aklivity/zilla/specs/binding/mqtt/streams/application");
-
- private final TestRule timeout = new DisableOnDebug(new Timeout(20, SECONDS));
-
- private final EngineRule engine = new EngineRule()
- .directory("target/zilla-itests")
- .commandBufferCapacity(1024)
- .responseBufferCapacity(1024)
- .counterValuesBufferCapacity(8192)
- .configure(PUBLISH_TIMEOUT, 1L)
- .configure(ENGINE_DRAIN_ON_CLOSE, false)
- .configurationRoot("io/aklivity/zilla/specs/binding/mqtt/config")
- .external("app0")
- .clean();
-
- @Rule
- public final TestRule chain = outerRule(engine).around(k3po).around(timeout);
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.after.subscribe/client",
- "${app}/unsubscribe.after.subscribe/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldAcknowledge() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.topic.filter.single/client",
- "${app}/unsubscribe.topic.filter.single/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldAcknowledgeSingleTopicFilters() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.publish.unfragmented/client",
- "${app}/unsubscribe.publish.unfragmented/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldAcknowledgeAndPublishUnfragmented() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.aggregated.topic.filters.both.exact/client",
- "${app}/unsubscribe.aggregated.topic.filters.both.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldAcknowledgeAggregatedTopicFiltersBothExact() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.no.matching.subscription/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldAcknowledgeNoMatchingSubscription() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.reject.invalid.fixed.header.flags/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectMalformedPacket() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.reject.missing.packet.id/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectWithoutPacketId() throws Exception
- {
- k3po.finish();
- }
-
- @Test
- @Configuration("server.yaml")
- @Specification({
- "${net}/unsubscribe.reject.no.topic.filter/client",
- "${app}/subscribe.topic.filter.single.exact/server"})
- @Configure(name = SESSION_AVAILABLE_NAME, value = "false")
- @Configure(name = WILDCARD_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = SHARED_SUBSCRIPTION_AVAILABLE_NAME, value = "true")
- @Configure(name = MAXIMUM_QOS_NAME, value = "2")
- @Configure(name = SESSION_EXPIRY_INTERVAL_NAME, value = "0")
- public void shouldRejectNoTopicFilter() throws Exception
- {
- k3po.finish();
- }
-}
diff --git a/incubator/binding-mqtt-kafka.spec/COPYRIGHT b/incubator/command-config/COPYRIGHT
similarity index 100%
rename from incubator/binding-mqtt-kafka.spec/COPYRIGHT
rename to incubator/command-config/COPYRIGHT
diff --git a/incubator/binding-mqtt-kafka.spec/LICENSE b/incubator/command-config/LICENSE
similarity index 100%
rename from incubator/binding-mqtt-kafka.spec/LICENSE
rename to incubator/command-config/LICENSE
diff --git a/incubator/binding-mqtt-kafka/NOTICE b/incubator/command-config/NOTICE
similarity index 100%
rename from incubator/binding-mqtt-kafka/NOTICE
rename to incubator/command-config/NOTICE
diff --git a/incubator/binding-mqtt-kafka.spec/NOTICE.template b/incubator/command-config/NOTICE.template
similarity index 100%
rename from incubator/binding-mqtt-kafka.spec/NOTICE.template
rename to incubator/command-config/NOTICE.template
diff --git a/incubator/binding-mqtt-kafka.spec/mvnw b/incubator/command-config/mvnw
similarity index 100%
rename from incubator/binding-mqtt-kafka.spec/mvnw
rename to incubator/command-config/mvnw
diff --git a/incubator/binding-mqtt-kafka.spec/mvnw.cmd b/incubator/command-config/mvnw.cmd
similarity index 100%
rename from incubator/binding-mqtt-kafka.spec/mvnw.cmd
rename to incubator/command-config/mvnw.cmd
diff --git a/incubator/command-config/pom.xml b/incubator/command-config/pom.xml
new file mode 100644
index 0000000000..cc6f121890
--- /dev/null
+++ b/incubator/command-config/pom.xml
@@ -0,0 +1,178 @@
+
+
+
+ 4.0.0
+
+ io.aklivity.zilla
+ incubator
+ 0.9.52
+ ../pom.xml
+
+
+ command-config
+ zilla::incubator::command-config
+
+
+
+ Aklivity Community License Agreement
+ https://www.aklivity.io/aklivity-community-license/
+ repo
+
+
+
+
+ 11
+ 11
+ 0.60
+ 4
+
+
+
+
+ ${project.groupId}
+ engine.spec
+ ${project.version}
+ provided
+
+
+ ${project.groupId}
+ engine
+ ${project.version}
+ provided
+
+
+ ${project.groupId}
+ command
+ ${project.version}
+ provided
+
+
+ io.aklivity.zilla
+ binding-http
+ ${project.version}
+ provided
+
+
+ io.aklivity.zilla
+ binding-mqtt
+ ${project.version}
+ provided
+
+
+ io.aklivity.zilla
+ binding-tcp
+ ${project.version}
+ provided
+
+
+ io.aklivity.zilla
+ binding-tls
+ ${project.version}
+ provided
+
+
+ io.aklivity.zilla
+ guard-jwt
+ ${project.version}
+ provided
+
+
+ io.aklivity.zilla
+ vault-filesystem
+ ${project.version}
+ provided
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ test
+
+
+
+
+
+
+ org.jasig.maven
+ maven-notice-plugin
+
+
+ com.mycila
+ license-maven-plugin
+
+
+ src/test/resources/io/aklivity/zilla/runtime/command/config/internal/openapi/**/*
+ src/test/resources/io/aklivity/zilla/runtime/command/config/internal/asyncapi/**/*
+
+
+
+
+ maven-checkstyle-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ org.moditect
+ moditect-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ io/aklivity/zilla/runtime/command/config/internal/types/**/*.class
+ io/aklivity/zilla/runtime/command/config/internal/openapi/model/*.class
+ io/aklivity/zilla/runtime/command/config/internal/openapi/model2/*.class
+ io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/*.class
+ io/aklivity/zilla/runtime/command/config/internal/asyncapi/model2/*.class
+
+
+
+ BUNDLE
+
+
+ INSTRUCTION
+ COVEREDRATIO
+ ${jacoco.coverage.ratio}
+
+
+ CLASS
+ MISSEDCOUNT
+ ${jacoco.missed.count}
+
+
+
+
+
+
+
+ ${project.groupId}
+ flyweight-maven-plugin
+ ${project.version}
+
+ core
+ io.aklivity.zilla.runtime.command.config.internal.types
+
+
+
+
+ generate
+
+
+
+
+
+
+
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/ZillaConfigCommandSpi.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/ZillaConfigCommandSpi.java
new file mode 100644
index 0000000000..6a526cf02b
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/ZillaConfigCommandSpi.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal;
+
+import com.github.rvesse.airline.builder.CliBuilder;
+
+import io.aklivity.zilla.runtime.command.ZillaCommandSpi;
+import io.aklivity.zilla.runtime.command.config.internal.airline.ZillaConfigCommand;
+
+public class ZillaConfigCommandSpi implements ZillaCommandSpi
+{
+ @Override
+ public void mixin(
+ CliBuilder builder)
+ {
+ builder.withCommand(ZillaConfigCommand.class);
+ }
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ConfigGenerator.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ConfigGenerator.java
new file mode 100644
index 0000000000..aa2f1ddc19
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ConfigGenerator.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.airline;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+public abstract class ConfigGenerator
+{
+ public abstract String generate();
+
+ protected final String unquoteEnvVars(
+ String yaml,
+ List unquotedEnvVars)
+ {
+ for (String envVar : unquotedEnvVars)
+ {
+ yaml = yaml.replaceAll(
+ Pattern.quote(String.format("\"${{env.%s}}\"", envVar)),
+ String.format("\\${{env.%s}}", envVar)
+ );
+ }
+ return yaml;
+ }
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ZillaConfigCommand.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ZillaConfigCommand.java
new file mode 100644
index 0000000000..838c8d5ad9
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ZillaConfigCommand.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.airline;
+
+import static org.agrona.LangUtil.rethrowUnchecked;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Map;
+import java.util.function.Function;
+
+import com.github.rvesse.airline.annotations.Command;
+import com.github.rvesse.airline.annotations.Option;
+import com.github.rvesse.airline.annotations.restrictions.AllowedValues;
+import com.github.rvesse.airline.annotations.restrictions.Required;
+
+import io.aklivity.zilla.runtime.command.ZillaCommand;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.http.proxy.AsyncApiHttpProxyConfigGenerator;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.mqtt.proxy.AsyncApiMqttProxyConfigGenerator;
+import io.aklivity.zilla.runtime.command.config.internal.openapi.http.proxy.OpenApiHttpProxyConfigGenerator;
+
+@Command(name = "generate", description = "Generate configuration file")
+public final class ZillaConfigCommand extends ZillaCommand
+{
+ private static final Map> GENERATORS = Map.of(
+ "openapi.http.proxy", OpenApiHttpProxyConfigGenerator::new,
+ "asyncapi.http.proxy", AsyncApiHttpProxyConfigGenerator::new,
+ "asyncapi.mqtt.proxy", AsyncApiMqttProxyConfigGenerator::new
+ );
+
+ @Option(name = {"-t", "--template"},
+ description = "Template name")
+ @Required
+ @AllowedValues(allowedValues = {
+ "openapi.http.proxy",
+ "asyncapi.http.proxy",
+ "asyncapi.mqtt.proxy"
+ })
+ public String template;
+
+ @Option(name = {"-i", "--input"},
+ description = "Input filename",
+ typeConverterProvider = ZillaConfigCommandPathConverterProvider.class)
+ public Path input;
+
+ @Option(name = {"-o", "--output"},
+ description = "Output filename",
+ typeConverterProvider = ZillaConfigCommandPathConverterProvider.class)
+ public Path output = Paths.get("zilla.yaml");
+
+ @Override
+ public void run()
+ {
+ try (InputStream inputStream = new FileInputStream(input.toFile()))
+ {
+ ConfigGenerator generator = GENERATORS.get(template).apply(inputStream);
+ Files.writeString(output, generator.generate());
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ rethrowUnchecked(ex);
+ }
+ }
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ZillaConfigCommandPathConverterProvider.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ZillaConfigCommandPathConverterProvider.java
new file mode 100644
index 0000000000..6160cc405d
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/airline/ZillaConfigCommandPathConverterProvider.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.airline;
+
+import java.nio.file.Paths;
+
+import com.github.rvesse.airline.model.ArgumentsMetadata;
+import com.github.rvesse.airline.model.OptionMetadata;
+import com.github.rvesse.airline.parser.ParseState;
+import com.github.rvesse.airline.types.TypeConverter;
+import com.github.rvesse.airline.types.TypeConverterProvider;
+import com.github.rvesse.airline.types.numerics.NumericTypeConverter;
+
+public final class ZillaConfigCommandPathConverterProvider implements TypeConverterProvider
+{
+ private final ZillaDumpCommandPathConverter converter = new ZillaDumpCommandPathConverter();
+
+ private final class ZillaDumpCommandPathConverter implements TypeConverter
+ {
+ @Override
+ public void setNumericConverter(
+ NumericTypeConverter converter)
+ {
+ }
+
+ @Override
+ public Object convert(
+ String name,
+ Class> type,
+ String value)
+ {
+ return Paths.get(value);
+ }
+ }
+
+ @Override
+ public TypeConverter getTypeConverter(
+ OptionMetadata option,
+ ParseState state)
+ {
+ return converter;
+ }
+
+ @Override
+ public TypeConverter getTypeConverter(
+ ArgumentsMetadata arguments,
+ ParseState state)
+ {
+ return converter;
+ }
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/http/proxy/AsyncApiHttpProxyConfigGenerator.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/http/proxy/AsyncApiHttpProxyConfigGenerator.java
new file mode 100644
index 0000000000..0d0276ec12
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/http/proxy/AsyncApiHttpProxyConfigGenerator.java
@@ -0,0 +1,504 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.http.proxy;
+
+import static io.aklivity.zilla.runtime.binding.http.config.HttpPolicyConfig.CROSS_ORIGIN;
+import static io.aklivity.zilla.runtime.engine.config.KindConfig.CLIENT;
+import static io.aklivity.zilla.runtime.engine.config.KindConfig.SERVER;
+import static java.util.Objects.requireNonNull;
+import static org.agrona.LangUtil.rethrowUnchecked;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.json.Json;
+import jakarta.json.JsonPatch;
+import jakarta.json.JsonPatchBuilder;
+import jakarta.json.bind.Jsonb;
+import jakarta.json.bind.JsonbBuilder;
+
+import io.aklivity.zilla.runtime.binding.http.config.HttpConditionConfig;
+import io.aklivity.zilla.runtime.binding.http.config.HttpOptionsConfig;
+import io.aklivity.zilla.runtime.binding.http.config.HttpOptionsConfigBuilder;
+import io.aklivity.zilla.runtime.binding.tcp.config.TcpConditionConfig;
+import io.aklivity.zilla.runtime.binding.tcp.config.TcpOptionsConfig;
+import io.aklivity.zilla.runtime.binding.tls.config.TlsOptionsConfig;
+import io.aklivity.zilla.runtime.command.config.internal.airline.ConfigGenerator;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.model.AsyncApi;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.model.Item;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.model.Message;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.model.Operation;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.model.Server;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.view.ChannelView;
+import io.aklivity.zilla.runtime.command.config.internal.asyncapi.view.ServerView;
+import io.aklivity.zilla.runtime.engine.config.BindingConfigBuilder;
+import io.aklivity.zilla.runtime.engine.config.ConfigWriter;
+import io.aklivity.zilla.runtime.engine.config.GuardedConfigBuilder;
+import io.aklivity.zilla.runtime.engine.config.NamespaceConfig;
+import io.aklivity.zilla.runtime.engine.config.NamespaceConfigBuilder;
+import io.aklivity.zilla.runtime.engine.config.RouteConfigBuilder;
+import io.aklivity.zilla.runtime.guard.jwt.config.JwtOptionsConfig;
+import io.aklivity.zilla.runtime.vault.filesystem.config.FileSystemOptionsConfig;
+
+public class AsyncApiHttpProxyConfigGenerator extends ConfigGenerator
+{
+ private final InputStream input;
+
+ private AsyncApi asyncApi;
+ private int[] allPorts;
+ private int[] httpPorts;
+ private int[] httpsPorts;
+ private boolean isPlainEnabled;
+ private boolean isTlsEnabled;
+ private Map securitySchemes;
+ private String authorizationHeader;
+ private boolean isJwtEnabled;
+
+ public AsyncApiHttpProxyConfigGenerator(
+ InputStream input)
+ {
+ this.input = input;
+ }
+
+ @Override
+ public String generate()
+ {
+ this.asyncApi = parseAsyncApi(input);
+ this.allPorts = resolveAllPorts();
+ this.httpPorts = resolvePortsForScheme("http");
+ this.httpsPorts = resolvePortsForScheme("https");
+ this.isPlainEnabled = httpPorts != null;
+ this.isTlsEnabled = httpsPorts != null;
+ this.securitySchemes = resolveSecuritySchemes();
+ this.authorizationHeader = resolveAuthorizationHeader();
+ this.isJwtEnabled = !securitySchemes.isEmpty();
+ ConfigWriter configWriter = new ConfigWriter(null);
+ String yaml = configWriter.write(createNamespace(), createEnvVarsPatch());
+ return unquoteEnvVars(yaml, unquotedEnvVars());
+ }
+
+ private AsyncApi parseAsyncApi(
+ InputStream inputStream)
+ {
+ AsyncApi asyncApi = null;
+ try (Jsonb jsonb = JsonbBuilder.create())
+ {
+ asyncApi = jsonb.fromJson(inputStream, AsyncApi.class);
+ }
+ catch (Exception ex)
+ {
+ rethrowUnchecked(ex);
+ }
+ return asyncApi;
+ }
+
+ private int[] resolveAllPorts()
+ {
+ int[] ports = new int[asyncApi.servers.size()];
+ String[] keys = asyncApi.servers.keySet().toArray(String[]::new);
+ for (int i = 0; i < asyncApi.servers.size(); i++)
+ {
+ ServerView server = ServerView.of(asyncApi.servers.get(keys[i]));
+ URI url = server.url();
+ ports[i] = url.getPort();
+ }
+ return ports;
+ }
+
+ private int[] resolvePortsForScheme(
+ String scheme)
+ {
+ requireNonNull(scheme);
+ int[] ports = null;
+ URI url = findFirstServerUrlWithScheme(scheme);
+ if (url != null)
+ {
+ ports = new int[] {url.getPort()};
+ }
+ return ports;
+ }
+
+ private URI findFirstServerUrlWithScheme(
+ String scheme)
+ {
+ requireNonNull(scheme);
+ URI result = null;
+ for (String key : asyncApi.servers.keySet())
+ {
+ ServerView server = ServerView.of(asyncApi.servers.get(key));
+ if (scheme.equals(server.url().getScheme()))
+ {
+ result = server.url();
+ break;
+ }
+ }
+ return result;
+ }
+
+ private Map resolveSecuritySchemes()
+ {
+ requireNonNull(asyncApi);
+ Map result = new HashMap<>();
+ if (asyncApi.components != null && asyncApi.components.securitySchemes != null)
+ {
+ for (String securitySchemeName : asyncApi.components.securitySchemes.keySet())
+ {
+ String guardType = asyncApi.components.securitySchemes.get(securitySchemeName).bearerFormat;
+ if ("jwt".equals(guardType))
+ {
+ result.put(securitySchemeName, guardType);
+ }
+ }
+ }
+ return result;
+ }
+
+ private String resolveAuthorizationHeader()
+ {
+ requireNonNull(asyncApi);
+ requireNonNull(asyncApi.components);
+ requireNonNull(asyncApi.components.messages);
+ String result = null;
+ for (Map.Entry entry: asyncApi.components.messages.entrySet())
+ {
+ Message message = entry.getValue();
+ if (message.headers != null && message.headers.properties != null)
+ {
+ Item authorization = message.headers.properties.get("authorization");
+ if (authorization != null)
+ {
+ result = authorization.description;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ private NamespaceConfig createNamespace()
+ {
+ return NamespaceConfig.builder()
+ .name("example")
+ .binding()
+ .name("tcp_server0")
+ .type("tcp")
+ .kind(SERVER)
+ .options(TcpOptionsConfig::builder)
+ .host("0.0.0.0")
+ .ports(allPorts)
+ .build()
+ .inject(this::injectPlainTcpRoute)
+ .inject(this::injectTlsTcpRoute)
+ .build()
+ .inject(this::injectTlsServer)
+ .binding()
+ .name("http_server0")
+ .type("http")
+ .kind(SERVER)
+ .options(HttpOptionsConfig::builder)
+ .access()
+ .policy(CROSS_ORIGIN)
+ .build()
+ .inject(this::injectHttpServerOptions)
+ .build()
+ .inject(this::injectHttpServerRoutes)
+ .build()
+ .binding()
+ .name("http_client0")
+ .type("http")
+ .kind(CLIENT)
+ .exit(isTlsEnabled ? "tls_client0" : "tcp_client0")
+ .build()
+ .inject(this::injectTlsClient)
+ .binding()
+ .name("tcp_client0")
+ .type("tcp")
+ .kind(CLIENT)
+ .options(TcpOptionsConfig::builder)
+ .host("") // env
+ .ports(new int[]{0}) // env
+ .build()
+ .build()
+ .inject(this::injectGuard)
+ .inject(this::injectVaults)
+ .build();
+ }
+
+ private BindingConfigBuilder> injectPlainTcpRoute(
+ BindingConfigBuilder> binding)
+ {
+ if (isPlainEnabled)
+ {
+ binding
+ .route()
+ .when(TcpConditionConfig::builder)
+ .ports(httpPorts)
+ .build()
+ .exit("http_server0")
+ .build();
+ }
+ return binding;
+ }
+
+ private BindingConfigBuilder> injectTlsTcpRoute(
+ BindingConfigBuilder> binding)
+ {
+ if (isTlsEnabled)
+ {
+ binding
+ .route()
+ .when(TcpConditionConfig::builder)
+ .ports(httpsPorts)
+ .build()
+ .exit("tls_server0")
+ .build();
+ }
+ return binding;
+ }
+
+ private NamespaceConfigBuilder injectTlsServer(
+ NamespaceConfigBuilder namespace)
+ {
+ if (isTlsEnabled)
+ {
+ namespace
+ .binding()
+ .name("tls_server0")
+ .type("tls")
+ .kind(SERVER)
+ .options(TlsOptionsConfig::builder)
+ .keys(List.of("")) // env
+ .sni(List.of("")) // env
+ .alpn(List.of("")) // env
+ .build()
+ .vault("server")
+ .exit("http_server0")
+ .build();
+ }
+ return namespace;
+ }
+
+ private HttpOptionsConfigBuilder>> injectHttpServerOptions(
+ HttpOptionsConfigBuilder>> options)
+ {
+ if (isJwtEnabled)
+ {
+ options
+ .authorization()
+ .name("jwt0")
+ .credentials()
+ .header()
+ .name("authorization")
+ .pattern(authorizationHeader)
+ .build()
+ .build()
+ .build();
+ }
+ return options;
+ }
+
+ private BindingConfigBuilder> injectHttpServerRoutes(
+ BindingConfigBuilder> binding)
+ {
+ for (Map.Entry entry : asyncApi.servers.entrySet())
+ {
+ ServerView server = ServerView.of(entry.getValue());
+ for (String name : asyncApi.operations.keySet())
+ {
+ Operation operation = asyncApi.operations.get(name);
+ ChannelView channel = ChannelView.of(asyncApi.channels, operation.channel);
+ String path = channel.address().replaceAll("\\{[^}]+\\}", "*");
+ String method = operation.bindings.get("http").method;
+ binding
+ .route()
+ .exit("http_client0")
+ .when(HttpConditionConfig::builder)
+ .header(":scheme", server.scheme())
+ .header(":authority", server.authority())
+ .header(":path", path)
+ .header(":method", method)
+ .build()
+ .inject(route -> injectHttpServerRouteGuarded(route, server))
+ .build();
+ }
+ }
+ return binding;
+ }
+
+ private RouteConfigBuilder injectHttpServerRouteGuarded(
+ RouteConfigBuilder route,
+ ServerView server)
+ {
+ if (server.security() != null)
+ {
+ for (Map> securityItem : server.security())
+ {
+ for (String securityItemLabel : securityItem.keySet())
+ {
+ if (isJwtEnabled && "jwt".equals(securitySchemes.get(securityItemLabel)))
+ {
+ route
+ .guarded()
+ .name("jwt0")
+ .inject(guarded -> injectGuardedRoles(guarded, securityItem.get(securityItemLabel)))
+ .build();
+ break;
+ }
+ }
+ }
+ }
+ return route;
+ }
+
+ private GuardedConfigBuilder injectGuardedRoles(
+ GuardedConfigBuilder guarded,
+ List roles)
+ {
+ for (String role : roles)
+ {
+ guarded.role(role);
+ }
+ return guarded;
+ }
+
+ private NamespaceConfigBuilder injectTlsClient(
+ NamespaceConfigBuilder namespace)
+ {
+ if (isTlsEnabled)
+ {
+ namespace
+ .binding()
+ .name("tls_client0")
+ .type("tls")
+ .kind(CLIENT)
+ .options(TlsOptionsConfig::builder)
+ .trust(List.of("")) // env
+ .sni(List.of("")) // env
+ .alpn(List.of("")) // env
+ .trustcacerts(true)
+ .build()
+ .vault("client")
+ .exit("tcp_client0")
+ .build();
+ }
+ return namespace;
+ }
+
+ private NamespaceConfigBuilder injectGuard(
+ NamespaceConfigBuilder namespace)
+ {
+ if (isJwtEnabled)
+ {
+ namespace
+ .guard()
+ .name("jwt0")
+ .type("jwt")
+ .options(JwtOptionsConfig::builder)
+ .issuer("") // env
+ .audience("") // env
+ .key()
+ .alg("").kty("").kid("").use("").n("").e("").crv("").x("").y("") // env
+ .build()
+ .build()
+ .build();
+ }
+ return namespace;
+ }
+
+ private NamespaceConfigBuilder injectVaults(
+ NamespaceConfigBuilder namespace)
+ {
+ if (isTlsEnabled)
+ {
+ namespace
+ .vault()
+ .name("client")
+ .type("filesystem")
+ .options(FileSystemOptionsConfig::builder)
+ .trust()
+ .store("") // env
+ .type("") // env
+ .password("") // env
+ .build()
+ .build()
+ .build()
+ .vault()
+ .name("server")
+ .type("filesystem")
+ .options(FileSystemOptionsConfig::builder)
+ .keys()
+ .store("") // env
+ .type("") // env
+ .password("") //env
+ .build()
+ .build()
+ .build();
+ }
+ return namespace;
+ }
+
+ private JsonPatch createEnvVarsPatch()
+ {
+ JsonPatchBuilder patch = Json.createPatchBuilder();
+ patch.replace("/bindings/tcp_client0/options/host", "${{env.TCP_CLIENT_HOST}}");
+ patch.replace("/bindings/tcp_client0/options/port", "${{env.TCP_CLIENT_PORT}}");
+
+ if (isJwtEnabled)
+ {
+ // jwt0 guard
+ patch.replace("/guards/jwt0/options/issuer", "${{env.JWT_ISSUER}}");
+ patch.replace("/guards/jwt0/options/audience", "${{env.JWT_AUDIENCE}}");
+ patch.replace("/guards/jwt0/options/keys/0/alg", "${{env.JWT_ALG}}");
+ patch.replace("/guards/jwt0/options/keys/0/kty", "${{env.JWT_KTY}}");
+ patch.replace("/guards/jwt0/options/keys/0/kid", "${{env.JWT_KID}}");
+ patch.replace("/guards/jwt0/options/keys/0/use", "${{env.JWT_USE}}");
+ patch.replace("/guards/jwt0/options/keys/0/n", "${{env.JWT_N}}");
+ patch.replace("/guards/jwt0/options/keys/0/e", "${{env.JWT_E}}");
+ patch.replace("/guards/jwt0/options/keys/0/crv", "${{env.JWT_CRV}}");
+ patch.replace("/guards/jwt0/options/keys/0/x", "${{env.JWT_X}}");
+ patch.replace("/guards/jwt0/options/keys/0/y", "${{env.JWT_Y}}");
+ }
+
+ if (isTlsEnabled)
+ {
+ // tls_server0 binding
+ patch.replace("/bindings/tls_server0/options/keys/0", "${{env.TLS_SERVER_KEY}}");
+ patch.replace("/bindings/tls_server0/options/sni/0", "${{env.TLS_SERVER_SNI}}");
+ patch.replace("/bindings/tls_server0/options/alpn/0", "${{env.TLS_SERVER_ALPN}}");
+ // tls_client0 binding
+ patch.replace("/bindings/tls_client0/options/trust/0", "${{env.TLS_CLIENT_TRUST}}");
+ patch.replace("/bindings/tls_client0/options/sni/0", "${{env.TLS_CLIENT_SNI}}");
+ patch.replace("/bindings/tls_client0/options/alpn/0", "${{env.TLS_CLIENT_ALPN}}");
+ // client vault
+ patch.replace("/vaults/client/options/trust/store", "${{env.TRUSTSTORE_PATH}}");
+ patch.replace("/vaults/client/options/trust/type", "${{env.TRUSTSTORE_TYPE}}");
+ patch.replace("/vaults/client/options/trust/password", "${{env.TRUSTSTORE_PASSWORD}}");
+ // server vault
+ patch.replace("/vaults/server/options/keys/store", "${{env.KEYSTORE_PATH}}");
+ patch.replace("/vaults/server/options/keys/type", "${{env.KEYSTORE_TYPE}}");
+ patch.replace("/vaults/server/options/keys/password", "${{env.KEYSTORE_PASSWORD}}");
+ }
+
+ return patch.build();
+ }
+
+ private List unquotedEnvVars()
+ {
+ return List.of("TCP_CLIENT_PORT");
+ }
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/AsyncApi.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/AsyncApi.java
new file mode 100644
index 0000000000..512addcdea
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/AsyncApi.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+import java.util.Map;
+
+public class AsyncApi
+{
+ public Map servers;
+ public Map channels;
+ public Map operations;
+ public Components components;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Binding.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Binding.java
new file mode 100644
index 0000000000..b008294c42
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Binding.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+public class Binding
+{
+ public String method;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Channel.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Channel.java
new file mode 100644
index 0000000000..990dadf0fc
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Channel.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+import jakarta.json.bind.annotation.JsonbProperty;
+
+public class Channel
+{
+ public String address;
+
+ @JsonbProperty("$ref")
+ public String ref;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Components.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Components.java
new file mode 100644
index 0000000000..c138c91af3
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Components.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+import java.util.Map;
+
+import io.aklivity.zilla.runtime.command.config.internal.openapi.model.SecurityScheme;
+
+public class Components
+{
+ public Map securitySchemes;
+ public Map messages;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Item.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Item.java
new file mode 100644
index 0000000000..05ad9b5d35
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Item.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+public class Item
+{
+ public String description;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Message.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Message.java
new file mode 100644
index 0000000000..c73553c3b6
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Message.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+public class Message
+{
+ public Schema headers;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Operation.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Operation.java
new file mode 100644
index 0000000000..8bf99ce810
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Operation.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+import java.util.Map;
+
+public class Operation
+{
+ public Map bindings;
+ public Channel channel;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Schema.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Schema.java
new file mode 100644
index 0000000000..e05ef9ab7d
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Schema.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+import java.util.Map;
+
+public class Schema
+{
+ public Map properties;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/SecurityScheme.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/SecurityScheme.java
new file mode 100644
index 0000000000..c57c946e63
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/SecurityScheme.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+public class SecurityScheme
+{
+ public String bearerFormat;
+}
diff --git a/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Server.java b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Server.java
new file mode 100644
index 0000000000..eed9d65dc4
--- /dev/null
+++ b/incubator/command-config/src/main/java/io/aklivity/zilla/runtime/command/config/internal/asyncapi/model/Server.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2021-2023 Aklivity Inc
+ *
+ * Licensed under the Aklivity Community License (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the
+ * License at
+ *
+ * https://www.aklivity.io/aklivity-community-license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package io.aklivity.zilla.runtime.command.config.internal.asyncapi.model;
+
+import java.util.List;
+import java.util.Map;
+
+public class Server
+{
+ public String host;
+ public List