{"id":26474307,"url":"https://github.com/conduktor/conduktor-gateway-soak-func","last_synced_at":"2026-05-07T00:34:45.546Z","repository":{"id":184952613,"uuid":"672739977","full_name":"conduktor/conduktor-gateway-soak-func","owner":"conduktor","description":null,"archived":false,"fork":false,"pushed_at":"2023-10-26T09:43:25.000Z","size":16392,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-04-16T01:21:56.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/conduktor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-07-31T04:00:28.000Z","updated_at":"2024-04-16T01:21:56.364Z","dependencies_parsed_at":null,"dependency_job_id":"7747e4c5-981b-4db2-81b4-acdcb510ff63","html_url":"https://github.com/conduktor/conduktor-gateway-soak-func","commit_stats":null,"previous_names":["conduktor/conduktor-gateway-soak-func"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conduktor%2Fconduktor-gateway-soak-func","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conduktor%2Fconduktor-gateway-soak-func/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conduktor%2Fconduktor-gateway-soak-func/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/conduktor%2Fconduktor-gateway-soak-func/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/conduktor","download_url":"https://codeload.github.com/conduktor/conduktor-gateway-soak-func/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244520144,"owners_count":20465627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-19T22:52:12.489Z","updated_at":"2026-05-07T00:34:45.511Z","avatar_url":"https://github.com/conduktor.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Conduktor Gateway Soak Functionalities\n\nTesting your Conduktor Gateway by your own scenario (yaml file in config/scenario directory)\n\n## Scenario YAML File Description\n\nThe [scenario3.yaml](config/scenario/scenario3.yaml) file in this config/scenario folder repository is a configuration file used to define a test workflow for testing functionalities related to SASL_SSL and Dynamic Header Injection in Conduktor Gateway. The YAML file contains various sections that define the setup and actions to be performed during the test.\u003cbr/\u003e\nE.g:\n```yaml\ntitle: Simple test with SASL_SSL and Dynamic Header Injection\ndocker:\n  kafka:\n    version: latest\n    environment:\n      KAFKA_AUTO_CREATE_TOPICS_ENABLE: false\n  gateway:\n    version: 2.0.0-amd64\n    environment:\n      GATEWAY_SECURITY_PROTOCOL: SASL_SSL\nplugins:\n  franklx:\n    inject-header-1:\n      pluginClass: \"io.conduktor.gateway.interceptor.DynamicHeaderInjectionPlugin\"\n      \"priority\": 1\n      \"config\":\n        \"topic\": \".*\"\n        \"headers\":\n          \"X-RAW_KEY\": \"a value\"\n    inject-header-2:\n      pluginClass: \"io.conduktor.gateway.interceptor.DynamicHeaderInjectionPlugin\"\n      \"priority\": 100\n      \"config\":\n        \"topic\": \".*\"\n        \"headers\":\n          \"X-USERNAME\": \"{{user}}\"\nactions:\n  - type: CREATE_TOPIC\n    target: GATEWAY\n    properties:\n      security.protocol: SASL_SSL\n      sasl.mechanism: PLAIN\n      sasl.jaas.config: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"franklx\\\" password=\\\"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImZyYW5rbHgiLCJ2Y2x1c3RlciI6ImZyYW5rbHgiLCJleHAiOjExNjkyMDg4MjI0fQ.RaDEBfXwUJHKYiDeOGQ8HgLT7K9yCnNa6SckSvHZuCw\\\";\"\n    topic: topic1\n  - type: PRODUCE\n    target: GATEWAY\n    properties:\n      security.protocol: SASL_SSL\n      sasl.mechanism: PLAIN\n      sasl.jaas.config: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"franklx\\\" password=\\\"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImZyYW5rbHgiLCJ2Y2x1c3RlciI6ImZyYW5rbHgiLCJleHAiOjExNjkyMDg4MjI0fQ.RaDEBfXwUJHKYiDeOGQ8HgLT7K9yCnNa6SckSvHZuCw\\\";\"\n    topic: topic1\n    messages:\n      - key: \"key3\"\n        value: \"value3\"\n        headers:\n          header_key1: \"headerValue5\"\n          header_key2: \"headerValue5\"\n  - type: FETCH\n    target: KAFKA\n    topic: franklxtopic1\n    messages:\n      - key: \"key3\"\n        value: \"value3\"\n        headers:\n          header_key1: \"headerValue5\"\n          header_key2: \"headerValue5\"\n          X-RAW_KEY: \"a value\"\n          X-USERNAME: \"franklx\"\n  - type: FETCH\n    target: GATEWAY\n    properties:\n      security.protocol: SASL_SSL\n      sasl.mechanism: PLAIN\n      sasl.jaas.config: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"franklx\\\" password=\\\"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImZyYW5rbHgiLCJ2Y2x1c3RlciI6ImZyYW5rbHgiLCJleHAiOjExNjkyMDg4MjI0fQ.RaDEBfXwUJHKYiDeOGQ8HgLT7K9yCnNa6SckSvHZuCw\\\";\"\n    topic: topic1\n    messages:\n      - key: \"key3\"\n        value: \"value3\"\n        headers:\n          header_key1: \"headerValue5\"\n          header_key2: \"headerValue5\"\n          X-RAW_KEY: \"a value\"\n          X-USERNAME: \"franklx\"\n```\n\n### Title\n\nThe YAML file starts with a title that gives an overview of the purpose of the test\n\n```yaml\ntitle: Simple test with SASL_SSL and Dynamic Header Injection\n```\n\n### Docker Configuration\n\nThe next section defines `docker` - the Docker configurations for Kafka and the Gateway Service. It specifies the versions and environment variables to be used for these containers:\n\n```yaml\ndocker:\n  kafka:\n    version: latest\n    environment:\n      KAFKA_AUTO_CREATE_TOPICS_ENABLE: false\n  gateway:\n    version: 2.0.0-amd64\n    environment:\n      GATEWAY_SECURITY_PROTOCOL: SASL_SSL\n```\n\n### Plugins\n\nIn this `plugins` section, the YAML file defines the plugins for tenant `franklx` to be used during the test. Specifically, it sets up two instances of the `DynamicHeaderInjectionPlugin`, each with its own configuration:\n\n```yaml\nplugins:\n  franklx:\n    inject-header-1:\n      pluginClass: \"io.conduktor.gateway.interceptor.DynamicHeaderInjectionPlugin\"\n      \"priority\": 1\n      \"config\":\n        \"topic\": \".*\"\n        \"headers\":\n          \"X-RAW_KEY\": \"a value\"\n    inject-header-2:\n      pluginClass: \"io.conduktor.gateway.interceptor.DynamicHeaderInjectionPlugin\"\n      \"priority\": 100\n      \"config\":\n        \"topic\": \".*\"\n        \"headers\":\n          \"X-USERNAME\": \"{{user}}\"\n```\n\n### Actions\n\nThe actions section contains a list of actions to be performed during the test. \u003cbr/\u003e\nEach action specifies its:\n- `type` (currently support: `CREATE_TOPIC`, `PRODUCE`, `FETCH`)\n- `target` (`KAFKA`, `GATEWAY`)\n- `properties` (admin client configs, producer configs or consumer configs depends on your action type)\n- `topic` (topic name)\n- `messages` (list of messages, each messages contains `key`, `value` and `headers`)\n\nThese actions include:\n\n#### Action 1: Create topic `topic1` for tenant `franklx` in the Gateway Service:\n\n```yaml\n  - type: CREATE_TOPIC\n    target: GATEWAY\n    properties:\n      security.protocol: SASL_SSL\n      sasl.mechanism: PLAIN\n      sasl.jaas.config: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"franklx\\\" password=\\\"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImZyYW5rbHgiLCJ2Y2x1c3RlciI6ImZyYW5rbHgiLCJleHAiOjExNjkyMDg4MjI0fQ.RaDEBfXwUJHKYiDeOGQ8HgLT7K9yCnNa6SckSvHZuCw\\\";\"\n    topic: topic1\n```\n\n#### Action 2: Producing a message to `topic1` for tenant `franklx` in the Gateway Service:\n\n```yaml\n  - type: PRODUCE\n    target: GATEWAY\n    properties:\n      security.protocol: SASL_SSL\n      sasl.mechanism: PLAIN\n      sasl.jaas.config: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"franklx\\\" password=\\\"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImZyYW5rbHgiLCJ2Y2x1c3RlciI6ImZyYW5rbHgiLCJleHAiOjExNjkyMDg4MjI0fQ.RaDEBfXwUJHKYiDeOGQ8HgLT7K9yCnNa6SckSvHZuCw\\\";\"\n    topic: topic1\n    messages:\n      - key: \"key3\"\n        value: \"value3\"\n        headers:\n          header_key1: \"headerValue5\"\n          header_key2: \"headerValue5\"\n\n```\n\n#### Action 3: Fetching messages from `franklxtopic1` in the Kafka and expect return exactly defined messages:\n\n```yaml\n  - type: FETCH\n    target: KAFKA\n    topic: franklxtopic1\n    messages:\n      - key: \"key3\"\n        value: \"value3\"\n        headers:\n          header_key1: \"headerValue5\"\n          header_key2: \"headerValue5\"\n          X-RAW_KEY: \"a value\"\n          X-USERNAME: \"franklx\"\n```\n\n#### Action 4: Fetching messages from `topic1` in the Gateway Service and expect return exactly defined messages:\n\n```yaml\n  - type: FETCH\n    target: GATEWAY\n    properties:\n      security.protocol: SASL_SSL\n      sasl.mechanism: PLAIN\n      sasl.jaas.config: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"franklx\\\" password=\\\"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImZyYW5rbHgiLCJ2Y2x1c3RlciI6ImZyYW5rbHgiLCJleHAiOjExNjkyMDg4MjI0fQ.RaDEBfXwUJHKYiDeOGQ8HgLT7K9yCnNa6SckSvHZuCw\\\";\"\n    topic: topic1\n    messages:\n      - key: \"key3\"\n        value: \"value3\"\n        headers:\n          header_key1: \"headerValue5\"\n          header_key2: \"headerValue5\"\n          X-RAW_KEY: \"a value\"\n          X-USERNAME: \"franklx\"\n```\n\n# Feel free to explore and extend this repository for more test scenarios and functionalities as per your requirements!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconduktor%2Fconduktor-gateway-soak-func","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconduktor%2Fconduktor-gateway-soak-func","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconduktor%2Fconduktor-gateway-soak-func/lists"}