Skip to content

Added Topic Messages producing and testing #1110

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion e2e-playwright/config/cucumber.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable */
module.exports = {
default: {
timeout: 30000,
timeout: 60000,
tags: process.env.npm_config_TAGS || "",
formatOptions: {
snippetInterface: "async-await"
Expand Down
1 change: 1 addition & 0 deletions e2e-playwright/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"pretest": "npx ts-node src/helper/report/init.ts",
"test": "cross-env ENV=prod FORCE_COLOR=0 cucumber-js --config=config/cucumber.js",
"test:stage": "cross-env ENV=stage FORCE_COLOR=0 cucumber-js --config=config/cucumber.js",
"test:sp": "cross-env ENV=stage FORCE_COLOR=0 cucumber-js --config=config/cucumber.js --tags @sp",
"posttest": "npx ts-node src/helper/report/report.ts",
"test:failed": "cucumber-js -p rerun @rerun.txt",
"lint": "eslint 'src/**/*.ts' --fix"
Expand Down
31 changes: 31 additions & 0 deletions e2e-playwright/src/features/Brokers.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Feature: Brokers page

Scenario: Brokers visibility BrokerDetails visibility
Given Brokers is visible
When click on Brokers link
Then Brokers heading visible
Then the end of current URL should be "brokers"
Given Brokers Uptime visible is: "true"
Given Brokers Partitions visible is: "true"
When Brokers cell element "1" clicked
Given BrokerDetails name is: "BrokersBroker" header visible is: "true"
Given BrokerDetails Log directories visible is: "true"
Given BrokerDetails Configs visible is: "true"
Given BrokerDetails Metrics visible is: "true"

Scenario: Brokers visibility BrokerDetails visibility
Given Brokers is visible
When click on Brokers link
Then Brokers heading visible
Then the end of current URL should be "brokers"
Given Brokers Uptime visible is: "true"
Given Brokers Partitions visible is: "true"
When Brokers cell element "1" clicked
Given BrokerDetails name is: "BrokersBroker" header visible is: "true"
When BrokerDetails Configs clicked
Given BrokerDetails Configs Key visible is: "true"
Given BrokerDetails Configs Value visible is: "true"
Given BrokerDetails Configs Source visible is: "true"
Then BrokerDetails searchfield visible is: "true"
When BrokerDetails searchfield input is: "process.roles" cell value is: "broker,controller"
When BrokerDetails searchfield input is: "broker,controller" cell value is: "process.roles"
84 changes: 84 additions & 0 deletions e2e-playwright/src/features/KsqlDb.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
Feature: Ksqldb page visibility

Scenario: KSQL DB elements visibility
Given KSQL DB is visible
When click on KSQL DB link
Then KSQL DB heading visible
Then the part of current URL should be "ksqldb"
Given KSQL DB Tables header visible is: "true"
Given KSQL DB Streams header visible is: "true"
Given KSQL DB Tables link visible is: "true"
Given KSQL DB Streams link visible is: "true"
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB Clear visible is: "true"
Given KSQL DB Execute visible is: "true"

Scenario: KSQL DB queries clear result
Given KSQL DB is visible
When click on KSQL DB link
Then KSQL DB heading visible
Then the part of current URL should be "ksqldb"
Given KSQL DB Tables header visible is: "true"
Given KSQL DB Streams header visible is: "true"
Given KSQL DB Tables link visible is: "true"
Given KSQL DB Streams link visible is: "true"
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB textbox visible is: "true"
Given KSQL DB KSQL for stream starts with: "STREAM_ONE", kafka_topic starts with: "NewAutoTopic", value_format: "json"
Then KSQL DB stream created
Then KSQL DB clear result visible is: "true"

Scenario: KSQL DB queries
Given KSQL DB is visible
When click on KSQL DB link
Then KSQL DB heading visible
Then the part of current URL should be "ksqldb"
Given KSQL DB Tables header visible is: "true"
Given KSQL DB Streams header visible is: "true"
Given KSQL DB Tables link visible is: "true"
Given KSQL DB Streams link visible is: "true"
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB textbox visible is: "true"
Given KSQL DB KSQL for stream starts with: "STREAM_ONE", kafka_topic starts with: "NewAutoTopic", value_format: "json"
Then KSQL DB stream created
When KSQL DB Stream clicked
Then KSQL DB stream starts with: "STREAM_ONE" visible is: "true"
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB textbox visible is: "true"
Then KSQL DB KSQL for table starts with: "TABLE_ONE", stream starts with: "STREAM_ONE"
Then KSQL DB table created
When KSQL DB Table clicked
Then KSQL DB table starts with: "TABLE_ONE" visible is: "true"

Scenario: KSQL DB cancel queries
Given KSQL DB is visible
When click on KSQL DB link
Then KSQL DB heading visible
Then the part of current URL should be "ksqldb"
Given KSQL DB Tables header visible is: "true"
Given KSQL DB Streams header visible is: "true"
Given KSQL DB Tables link visible is: "true"
Given KSQL DB Streams link visible is: "true"
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB textbox visible is: "true"
Given KSQL DB KSQL for stream starts with: "STREAM_ONE", kafka_topic starts with: "NewAutoTopic", value_format: "json"
Then KSQL DB stream created
Then KSQL DB KSQL cleared
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB textbox visible is: "true"
Then KSQL DB KSQL for table starts with: "TABLE_ONE", stream starts with: "STREAM_ONE"
Then KSQL DB table created
Then KSQL DB KSQL cleared
When KSQL DB ExecuteKSQLRequest click
Given KSQL DB textbox visible is: "true"
Given KSQL DB KSQL data inserted to stream starts with: "STREAM_ONE", from table:
|Id |la |lo |
| c2309eec | 37.7877 | -122.4205 |
| 18f4ea86 | 37.3903 | -122.0643 |
| 4ab5cbad | 37.3952 | -122.0813 |
| 8b6eae59 | 37.3944 | -122.0813 |
| 4a7c7b41 | 37.4049 | -122.0822 |
| 4ddad000 | 37.7857 | -122.4011 |

Given KSQL DB long query stream starts with: "STREAM_ONE" stared
Given KSQL DB long query stoped
84 changes: 84 additions & 0 deletions e2e-playwright/src/features/SchemaRegistry.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
Feature: Schema page

Scenario: SchemaRegistry and SchemaRegistryCreate visibility
Given Schema Registry is visible
When click on Schema Registry link
Then Schema Registry heading visible
Given SchemaRegistry CheateSchema clicked
Given SchemaRegistryCreate is visible
Given SchemaRegistryCreate Subject visible is: "true"
Given SchemaRegistryCreate Schema visible is: "true"
Given SchemaRegistryCreate SchemaType visible is: "true"
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
When SchemaRegistryCreate Schema input from avro
When SchemaRegistryCreate Submit clicked
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"

Scenario: SchemaRegistry Avro schema actions
Given Schema Registry is visible
When click on Schema Registry link
Then Schema Registry heading visible
Given SchemaRegistry CheateSchema clicked
Given SchemaRegistryCreate is visible
Given SchemaRegistryCreate Subject visible is: "true"
Given SchemaRegistryCreate Schema visible is: "true"
Given SchemaRegistryCreate SchemaType visible is: "true"
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
When SchemaRegistryCreate Schema input from avro
When SchemaRegistryCreate Submit clicked
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
When click on Brokers link
When click on Schema Registry link
Given SchemaRegistry click on schema starts with: "SchemaSubject"
Given SchemaRegistrySchemaName version is: "1"
Given SchemaRegistrySchemaName type is: "AVRO"
Given SchemaRegistrySchemaName Compatibility is: "BACKWARD"
When SchemaRegistrySchemaName remove schema clicked
Then Schema starts with: "SchemaSubject" deleted
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "false"

Scenario: SchemaRegistry Json schema actions
Given Schema Registry is visible
When click on Schema Registry link
Then Schema Registry heading visible
Given SchemaRegistry CheateSchema clicked
Given SchemaRegistryCreate is visible
Given SchemaRegistryCreate Subject visible is: "true"
Given SchemaRegistryCreate Schema visible is: "true"
Given SchemaRegistryCreate SchemaType visible is: "true"
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
When SchemaRegistryCreate Schema input from json
When SchemaRegistryCreate Submit clicked
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
When click on Brokers link
When click on Schema Registry link
Given SchemaRegistry click on schema starts with: "SchemaSubject"
Given SchemaRegistrySchemaName version is: "1"
Given SchemaRegistrySchemaName type is: "JSON"
Given SchemaRegistrySchemaName Compatibility is: "BACKWARD"
When SchemaRegistrySchemaName remove schema clicked
Then Schema starts with: "SchemaSubject" deleted
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "false"

Scenario: SchemaRegistry Json schema actions
Given Schema Registry is visible
When click on Schema Registry link
Then Schema Registry heading visible
Given SchemaRegistry CheateSchema clicked
Given SchemaRegistryCreate is visible
Given SchemaRegistryCreate Subject visible is: "true"
Given SchemaRegistryCreate Schema visible is: "true"
Given SchemaRegistryCreate SchemaType visible is: "true"
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
When SchemaRegistryCreate Schema input from protobuf
When SchemaRegistryCreate Submit clicked
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
When click on Brokers link
When click on Schema Registry link
Given SchemaRegistry click on schema starts with: "SchemaSubject"
Given SchemaRegistrySchemaName version is: "1"
Given SchemaRegistrySchemaName type is: "PROTOBUF"
Given SchemaRegistrySchemaName Compatibility is: "BACKWARD"
When SchemaRegistrySchemaName remove schema clicked
Then Schema starts with: "SchemaSubject" deleted
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "false"
133 changes: 133 additions & 0 deletions e2e-playwright/src/features/TopicsMessages.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
Feature: Produce Messages page
Scenario: TopicName ui
Given Topics is visible
When click on Topics link
Given Topics AddATopic clicked
Given TopicCreate heading visible is: "true"
When TopicCreate Topic name starts with: "ANewAutoTopic"
When TopicCreate Number of partitons: 1
When TopicCreate Time to retain data one day
When TopicCreate Create topic clicked
Then Header starts with: "ANewAutoTopic"
Given Topics TopicName partitions is: 1
Given Topics TopicName Overview visible is: "true"
Given Topics TopicName Messages visible is: "true"
Given Topics TopicName Consumers visible is: "true"
Given Topics TopicName Settings visible is: "true"
Given Topics TopicName Statistics visible is: "true"

Scenario: Produce Message
Given Topics is visible
When click on Topics link
Given Topics AddATopic clicked
Given TopicCreate heading visible is: "true"
When TopicCreate Topic name starts with: "ANewAutoTopic"
When TopicCreate Number of partitons: 1
When TopicCreate Time to retain data one day
When TopicCreate Create topic clicked
Then Header starts with: "ANewAutoTopic"
Given Produce message clicked
Then ProduceMessage header visible
Given ProduceMessage Key input is: "keyFromAutotest"
Given ProduceMessage Value input is: "ValueFromAutotest"
Given ProduceMessage Headers input key is: "headerKey", value is: "headerValue"
Given ProduceMessage Produce Message button clicked
When Topics TopicName Messages clicked
Then TopicName messages contains key: "keyFromAutotest"
Then TopicName messages contains value: "ValueFromAutotest"
Then TopicName messages contains headers key is: "headerKey", value is: "headerValue"

Scenario: Topic Message cleanup policy
Given Topics is visible
When click on Topics link
Given Topics AddATopic clicked
Given TopicCreate heading visible is: "true"
When TopicCreate Topic name starts with: "ANewAutoTopic"
When TopicCreate Number of partitons: 1
When TopicCreate Time to retain data one day
When TopicCreate Create topic clicked
Then Header starts with: "ANewAutoTopic"
Given TopicName menu button clicked
Then TopicNameMenu clear messages active is: "true"
When TopicNameMenu edit settings clicked
When TopicName cleanup policy set to: "Compact"
When TopicName UpdateTopic button clicked
Then Header starts with: "ANewAutoTopic"
Given TopicName menu button clicked
Then TopicNameMenu clear messages active is: "false"
When TopicNameMenu edit settings clicked
When TopicName cleanup policy set to: "Delete"
When TopicName UpdateTopic button clicked
Then Header starts with: "ANewAutoTopic"
Given TopicName menu button clicked
Then TopicNameMenu clear messages active is: "true"

Scenario: Produce messages clear messages
Given Topics is visible
When click on Topics link
Given Topics AddATopic clicked
Given TopicCreate heading visible is: "true"
When TopicCreate Topic name starts with: "ANewAutoTopic"
When TopicCreate Number of partitons: 1
When TopicCreate Time to retain data one day
When TopicCreate Create topic clicked
Then Header starts with: "ANewAutoTopic"
Given Produce message clicked
Then ProduceMessage header visible
Given ProduceMessage Key input is: "keyFromAutotest"
Given ProduceMessage Value input is: "ValueFromAutotest"
Given ProduceMessage Headers input key is: "headerKey", value is: "headerValue"
Given ProduceMessage Produce Message button clicked
When Topics TopicName Messages clicked
Then TopicName messages contains key: "keyFromAutotest"
Then TopicName messages contains value: "ValueFromAutotest"
Then TopicName messages contains headers key is: "headerKey", value is: "headerValue"
Then Topics TopicName Overview click
Then TopicName messages count is "1"
Given Produce message clicked
Given ProduceMessage Key input is: "keyFromAutotest2"
Given ProduceMessage Value input is: "ValueFromAutotest2"
Given ProduceMessage Headers input key is: "headerKey2", value is: "headerValue2"
Given ProduceMessage Produce Message button clicked
Then TopicName messages count is "2"
When TopicName clear messages clicked
Then TopicName messages count is "0"

Given Produce message clicked
Given ProduceMessage Key input is: "keyFromAutotest3"
Given ProduceMessage Value input is: "ValueFromAutotest3"
Given ProduceMessage Headers input key is: "headerKey3", value is: "headerValue3"
Given ProduceMessage Produce Message button clicked
Then TopicName messages count is "1"
Given Produce message clicked
Given ProduceMessage Key input is: "keyFromAutotest4"
Given ProduceMessage Value input is: "ValueFromAutotest4"
Given ProduceMessage Headers input key is: "headerKey4", value is: "headerValue4"
Given ProduceMessage Produce Message button clicked
Then TopicName messages count is "2"
When TopicName menu button clicked
When TopicName menu clear messages clicked
Then TopicName messages count is "0"

Given Produce message clicked
Given ProduceMessage Key input is: "keyFromAutotest5"
Given ProduceMessage Value input is: "ValueFromAutotest5"
Given ProduceMessage Headers input key is: "headerKey5", value is: "headerValue5"
Given ProduceMessage Produce Message button clicked
Then TopicName messages count is "1"
Given Produce message clicked
Given ProduceMessage Key input is: "keyFromAutotest6"
Given ProduceMessage Value input is: "ValueFromAutotest6"
Given ProduceMessage Headers input key is: "headerKey6", value is: "headerValue6"
Given ProduceMessage Produce Message button clicked
Then TopicName messages count is "2"
When TopicName menu button clicked
When TopicName menu RecreateTopic clicked
Then TopicName messages count is "0"

Given Produce message clicked
Given ProduceMessage Key input is: "keyFromAutotest7"
Given ProduceMessage Value input is: "ValueFromAutotest7"
Given ProduceMessage Headers input key is: "headerKey7", value is: "headerValue7"
Given ProduceMessage Produce Message button clicked
Then TopicName messages count is "1"
2 changes: 1 addition & 1 deletion e2e-playwright/src/hooks/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Before(async function(this: PlaywrightWorld, { pickle }) {
await this.init(context, scenarioName);
});

After({ timeout: 30000 }, async function(this: PlaywrightWorld, { pickle, result }) {
After({ timeout: 60000 }, async function(this: PlaywrightWorld, { pickle, result }) {
let img: Buffer | undefined;
const path = `./test-results/trace/${pickle.id}.zip`;
try {
Expand Down
21 changes: 21 additions & 0 deletions e2e-playwright/src/pages/Brokers/BrokerDetailsLocators.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Page, Locator } from "@playwright/test";

export default class BrokerDetailsLocators {
private readonly page: Page;

constructor(page: Page) {
this.page = page;
}

get logDirectors(): Locator { return this.page.getByRole('link', { name: 'Log directories' })};
get firstDefaultCell(): Locator { return this.page.getByRole('cell', { name: '/tmp/kraft-combined-logs' })};
get configs(): Locator { return this.page.getByRole('link', { name: 'Configs' })};
get configsTextbox(): Locator { return this.page.getByRole('textbox', { name: 'Search by Key or Value' })};
get metrics(): Locator { return this.page.getByRole('link', { name: 'Metrics' })};
get configsKey(): Locator { return this.page.getByRole('cell', { name: 'Key' })};
get configsValue(): Locator { return this.page.getByRole('cell', { name: 'Value' })};
get configsSource(): Locator { return this.page.getByRole('cell', { name: 'Source' })};

configCell(value: string): Locator { return this.page.getByRole('cell', { name: value })};
header(value: string): Locator { return this.page.getByText(value)};
}
4 changes: 4 additions & 0 deletions e2e-playwright/src/pages/Brokers/BrokersLocators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ export default class BrokersLocators {
}

get heading(): Locator { return this.page.getByRole('heading', { name: 'Brokers' })};
get uptime(): Locator { return this.page.getByRole('heading', { name: 'Uptime' })};
get partitions(): Locator { return this.page.getByRole('heading', { name: 'Partitions' })};

toBroker(value: string): Locator { return this.page.getByRole('cell', { name: value, exact: true }); }
}
Loading
Loading