From 3c7822cdbc6f7905ac035cd11c5c5722bd8d7590 Mon Sep 17 00:00:00 2001 From: Swen Date: Thu, 16 Sep 2021 16:36:51 +0200 Subject: [PATCH] change command invocation in integration tests --- esque/cli/commands/__init__.py | 2 + tests/integration/commands/test_apply.py | 22 ++++---- tests/integration/commands/test_consume.py | 12 +++-- tests/integration/commands/test_creation.py | 27 +++++----- tests/integration/commands/test_deletion.py | 27 ++++++---- tests/integration/commands/test_describe.py | 56 +++++++++++++------- tests/integration/commands/test_edit.py | 11 ++-- tests/integration/commands/test_get.py | 32 ++++++----- tests/integration/commands/test_multiargs.py | 36 +++++++------ tests/integration/commands/test_ping.py | 8 +-- tests/integration/commands/test_produce.py | 10 ++-- tests/integration/commands/test_set.py | 30 +++++++---- tests/integration/commands/test_transfer.py | 29 +++++----- 13 files changed, 172 insertions(+), 130 deletions(-) diff --git a/esque/cli/commands/__init__.py b/esque/cli/commands/__init__.py index 339b457c..b283055f 100644 --- a/esque/cli/commands/__init__.py +++ b/esque/cli/commands/__init__.py @@ -9,6 +9,7 @@ from esque.cli.commands.ctx import ctx from esque.cli.commands.delete import delete from esque.cli.commands.describe import describe +from esque.cli.commands.edit import edit from esque.cli.commands.get import get from esque.cli.commands.io import io from esque.cli.commands.ping import ping @@ -47,6 +48,7 @@ def stop_profiling(): esque.add_command(ctx) esque.add_command(delete) esque.add_command(describe) +esque.add_command(edit) esque.add_command(get) esque.add_command(set_) esque.add_command(apply) diff --git a/tests/integration/commands/test_apply.py b/tests/integration/commands/test_apply.py index 28426025..4edb4fc2 100644 --- a/tests/integration/commands/test_apply.py +++ b/tests/integration/commands/test_apply.py @@ -4,7 +4,7 @@ import yaml from click.testing import CliRunner -from esque.cli.commands.apply import apply +from esque.cli.commands import esque from esque.controller.topic_controller import TopicController from esque.errors import InvalidReplicationFactorException, ValidationException from esque.resources.topic import Topic @@ -29,7 +29,7 @@ def test_apply(interactive_cli_runner: CliRunner, topic_controller: TopicControl # 1: topic creation path = save_yaml(topic_id, apply_conf) - result = interactive_cli_runner.invoke(apply, ["-f", path], input="Y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], input="Y\n", catch_exceptions=False) assert ( result.exit_code == 0 and "Successfully applied changes" in result.output ), f"Calling apply failed, error: {result.output}" @@ -38,7 +38,7 @@ def test_apply(interactive_cli_runner: CliRunner, topic_controller: TopicControl topic_1["config"]["cleanup.policy"] = "delete" path = save_yaml(topic_id, apply_conf) - result = interactive_cli_runner.invoke(apply, ["-f", path], input="Y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], input="Y\n", catch_exceptions=False) assert ( result.exit_code == 0 and "Successfully applied changes" in result.output ), f"Calling apply failed, error: {result.output}" @@ -47,13 +47,13 @@ def test_apply(interactive_cli_runner: CliRunner, topic_controller: TopicControl apply_conf["topics"].append(topic_2) topic_1["config"]["cleanup.policy"] = "compact" path = save_yaml(topic_id, apply_conf) - result = interactive_cli_runner.invoke(apply, ["-f", path], input="Y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], input="Y\n", catch_exceptions=False) assert ( result.exit_code == 0 and "Successfully applied changes" in result.output ), f"Calling apply failed, error: {result.output}" # 4: no changes - result = interactive_cli_runner.invoke(apply, ["-f", path], catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], catch_exceptions=False) assert ( result.exit_code == 0 and "No changes detected, aborting" in result.output ), f"Calling apply failed, error: {result.output}" @@ -62,7 +62,7 @@ def test_apply(interactive_cli_runner: CliRunner, topic_controller: TopicControl topic_1["num_partitions"] = 3 topic_1["config"]["cleanup.policy"] = "delete" path = save_yaml(topic_id, apply_conf) - result = interactive_cli_runner.invoke(apply, ["-f", path], input="Y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], input="Y\n", catch_exceptions=False) assert ( result.exit_code == 1 and "to `replication_factor` and `num_partitions`" in result.output ), f"Calling apply failed, error: {result.output}" @@ -91,11 +91,11 @@ def test_apply_duplicate_names(interactive_cli_runner: CliRunner, topic_id: str) # having the same topic name twice in apply should raise an exception path = save_yaml(topic_id, apply_conf) - result = interactive_cli_runner.invoke(apply, ["-f", path], input="Y\n") + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], input="Y\n") assert result.exit_code != 0 - assert isinstance(result.exception, ValidationException), ( - "Calling apply should have failed with " "ValidationException" - ) + assert isinstance( + result.exception, ValidationException + ), "Calling apply should have failed with ValidationException" @pytest.mark.integration @@ -111,7 +111,7 @@ def test_apply_invalid_replicas(interactive_cli_runner: CliRunner, topic_id: str # having the same topic name twice in apply should raise an ValueError path = save_yaml(topic_id, apply_conf) - result = interactive_cli_runner.invoke(apply, ["-f", path], input="Y\n") + result = interactive_cli_runner.invoke(esque, args=["apply", "-f", path], input="Y\n") assert result.exit_code != 0 assert isinstance( result.exception, InvalidReplicationFactorException diff --git a/tests/integration/commands/test_consume.py b/tests/integration/commands/test_consume.py index 9006923c..e4336b24 100644 --- a/tests/integration/commands/test_consume.py +++ b/tests/integration/commands/test_consume.py @@ -8,7 +8,7 @@ from confluent_kafka.cimpl import Producer as ConfluentProducer from esque import config -from esque.cli.commands.consume import consume +from esque.cli.commands import esque from esque.controller.consumergroup_controller import ConsumerGroupController from esque.errors import ConsumerGroupDoesNotExistException from tests.integration.commands.conftest import produce_binary_test_messages @@ -23,7 +23,7 @@ def test_avro_consume_to_stdout( produce_test_messages_with_avro(avro_producer, source_topic) message_text = non_interactive_cli_runner.invoke( - consume, args=["--stdout", "--number", "10", "--avro", source_topic_id], catch_exceptions=False + esque, args=["consume", "--stdout", "--number", "10", "--avro", source_topic_id], catch_exceptions=False ) # Check assertions: separate_messages = message_text.output.split("\n") @@ -43,7 +43,7 @@ def test_offset_not_committed( produce_test_messages_with_avro(avro_producer, source_topic) non_interactive_cli_runner.invoke( - consume, args=["--stdout", "--numbers", "10", "--avro", source_topic_id], catch_exceptions=False + esque, args=["consume", "--stdout", "--numbers", "10", "--avro", source_topic_id], catch_exceptions=False ) # cannot use pytest.raises(ConsumerGroupDoesNotExistException) because other tests may have committed offsets @@ -63,7 +63,7 @@ def test_binary_consume_to_stdout( expected_messages = produce_binary_test_messages(producer, source_topic) message_text = non_interactive_cli_runner.invoke( - consume, args=["--stdout", "--number", "10", "--binary", source_topic_id], catch_exceptions=False + esque, args=["consume", "--stdout", "--number", "10", "--binary", source_topic_id], catch_exceptions=False ) # Check assertions: actual_messages = { @@ -77,4 +77,6 @@ def test_binary_consume_to_stdout( @pytest.mark.integration def test_binary_and_avro_fails(non_interactive_cli_runner: CliRunner): with pytest.raises(ValueError): - non_interactive_cli_runner.invoke(consume, args=["--binary", "--avro", "thetopic"], catch_exceptions=False) + non_interactive_cli_runner.invoke( + esque, args=["consume", "--binary", "--avro", "thetopic"], catch_exceptions=False + ) diff --git a/tests/integration/commands/test_creation.py b/tests/integration/commands/test_creation.py index ab939de8..479148d5 100644 --- a/tests/integration/commands/test_creation.py +++ b/tests/integration/commands/test_creation.py @@ -2,8 +2,7 @@ import pytest from click.testing import CliRunner -from esque.cli.commands.create.consumergroup import create_consumergroup -from esque.cli.commands.create.topic import create_topic +from esque.cli.commands import esque from esque.cli.options import State from esque.errors import NoConfirmationPossibleException from esque.resources.topic import Topic @@ -13,7 +12,7 @@ def test_create_without_confirmation_does_not_create_topic( interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient, topic_id: str ): - result = interactive_cli_runner.invoke(create_topic, [topic_id], catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["create", "topic", topic_id], catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -25,7 +24,7 @@ def test_create_topic_without_topic_name_fails( non_interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient ): n_topics_before = len(confluent_admin_client.list_topics(timeout=5).topics) - result = non_interactive_cli_runner.invoke(create_topic) + result = non_interactive_cli_runner.invoke(esque, args=["create", "topic"]) n_topics_after = len(confluent_admin_client.list_topics(timeout=5).topics) assert result.exit_code != 0 assert n_topics_before == n_topics_after @@ -39,7 +38,9 @@ def test_create_topic_as_argument_with_verification_works( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic_id not in topics - result = interactive_cli_runner.invoke(create_topic, args=topic_id, input="Y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke( + esque, args=["create", "topic", topic_id], input="Y\n", catch_exceptions=False + ) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic_id in topics @@ -54,7 +55,7 @@ def test_create_topic_with_stdin_works( assert topic_id not in topics result = non_interactive_cli_runner.invoke( - create_topic, args="--no-verify", input=topic_id, catch_exceptions=False + esque, args=["create", "topic", "--no-verify"], input=topic_id, catch_exceptions=False ) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -68,7 +69,7 @@ def test_topic_creation_stops_in_non_interactive_mode_without_no_verify( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic_id not in topics - result = non_interactive_cli_runner.invoke(create_topic, input=topic_id) + result = non_interactive_cli_runner.invoke(esque, args=["create", "topic"], input=topic_id) assert result.exit_code != 0 assert isinstance(result.exception, NoConfirmationPossibleException) @@ -100,7 +101,7 @@ def test_topic_creation_with_template_works( [Topic(topic_1, replication_factor=replication_factor, num_partitions=num_partitions, config=config)] ) result = non_interactive_cli_runner.invoke( - create_topic, ["--no-verify", "-l", topic_1, topic_2], catch_exceptions=False + esque, args=["create", "topic", "--no-verify", "-l", topic_1, topic_2], catch_exceptions=False ) assert result.exit_code == 0 config_from_template = state.cluster.topic_controller.get_cluster_topic(topic_2) @@ -119,35 +120,35 @@ def test_consumer_group_correct_creation( first_topic = f"{topic}" first_cg = consumer_group + "1" result1 = interactive_cli_runner.invoke( - create_consumergroup, args=[first_cg, first_topic], input="Y\n", catch_exceptions=False + esque, args=["create", "consumergroup", first_cg, first_topic], input="Y\n", catch_exceptions=False ) assert result1.exit_code == 0 second_topic = f"{topic}[0]" second_cg = consumer_group + "2" result2 = interactive_cli_runner.invoke( - create_consumergroup, args=[second_cg, second_topic], input="Y\n", catch_exceptions=False + esque, args=["create", "consumergroup", second_cg, second_topic], input="Y\n", catch_exceptions=False ) assert result2.exit_code == 0 third_topic = f"{topic}[0]=3" third_cg = consumer_group + "3" result3 = interactive_cli_runner.invoke( - create_consumergroup, args=[third_cg, third_topic], input="Y\n", catch_exceptions=False + esque, args=["create", "consumergroup", third_cg, third_topic], input="Y\n", catch_exceptions=False ) assert result3.exit_code == 0 fourth_topic = f"{topic}[]" fourth_cg = consumer_group + "4" result4 = interactive_cli_runner.invoke( - create_consumergroup, args=[fourth_cg, fourth_topic], input="Y\n", catch_exceptions=False + esque, args=["create", "consumergroup", fourth_cg, fourth_topic], input="Y\n", catch_exceptions=False ) assert result4.exit_code == 0 fifth_topic = f"{topic}[]=" fifth_cg = consumer_group + "5" result5 = interactive_cli_runner.invoke( - create_consumergroup, args=[fifth_cg, fifth_topic], input="Y\n", catch_exceptions=False + esque, args=["create", "consumergroup", fifth_cg, fifth_topic], input="Y\n", catch_exceptions=False ) assert result5.exit_code == 0 diff --git a/tests/integration/commands/test_deletion.py b/tests/integration/commands/test_deletion.py index 333f0abd..019e6f20 100644 --- a/tests/integration/commands/test_deletion.py +++ b/tests/integration/commands/test_deletion.py @@ -2,8 +2,7 @@ import pytest from click.testing import CliRunner -from esque.cli.commands.delete.topic import delete_topic -from esque.cli.commands.delete.topics import delete_topics +from esque.cli.commands import esque from esque.errors import NoConfirmationPossibleException @@ -14,7 +13,7 @@ def test_topic_deletion_singular_without_verification_does_not_work( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = interactive_cli_runner.invoke(delete_topic, topic, catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["delete", "topic", topic], catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -28,7 +27,7 @@ def test_topic_deletion_plural_without_verification_does_not_work( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = interactive_cli_runner.invoke(delete_topics, [topic], catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, ["delete", "topics", topic], catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -40,7 +39,7 @@ def test_delete_topic_singular_without_topic_name_is_handled( interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient ): n_topics_before = len(confluent_admin_client.list_topics(timeout=5).topics) - result = interactive_cli_runner.invoke(delete_topic) + result = interactive_cli_runner.invoke(esque, args=["delete", "topic"]) n_topics_after = len(confluent_admin_client.list_topics(timeout=5).topics) assert result.exit_code == 0 assert n_topics_before == n_topics_after @@ -52,7 +51,7 @@ def test_delete_topic_plural_without_topic_name_is_handled( interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient ): n_topics_before = len(confluent_admin_client.list_topics(timeout=5).topics) - result = interactive_cli_runner.invoke(delete_topics) + result = interactive_cli_runner.invoke(esque, args=["delete", "topics"]) n_topics_after = len(confluent_admin_client.list_topics(timeout=5).topics) assert result.exit_code == 0 assert n_topics_before == n_topics_after @@ -66,7 +65,7 @@ def test_topic_deletion_as_argument_singular_works( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = interactive_cli_runner.invoke(delete_topic, topic, input="y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["delete", "topic", topic], input="y\n", catch_exceptions=False) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -80,7 +79,9 @@ def test_topic_deletion_as_argument_plural_works( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = interactive_cli_runner.invoke(delete_topics, topic, input="y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke( + esque, args=["delete", "topics", topic], input="y\n", catch_exceptions=False + ) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -94,7 +95,9 @@ def test_topic_deletion_as_stdin_works( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = non_interactive_cli_runner.invoke(delete_topics, "--no-verify", input=topic, catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["delete", "topics", "--no-verify"], input=topic, catch_exceptions=False + ) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() @@ -108,7 +111,7 @@ def test_topic_deletion_stops_in_non_interactive_mode_without_no_verify( topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert topic in topics - result = non_interactive_cli_runner.invoke(delete_topics, input=topic) + result = non_interactive_cli_runner.invoke(esque, args=["delete", "topics"], input=topic) assert result.exit_code != 0 assert isinstance(result.exception, NoConfirmationPossibleException) @@ -126,7 +129,9 @@ def test_keep_dash_delete_dot( assert basic_topic in topics assert duplicate_topic in topics - result = interactive_cli_runner.invoke(delete_topics, [duplicate_topic], input="y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke( + esque, args=["delete", "topics", duplicate_topic], input="y\n", catch_exceptions=False + ) assert result.exit_code == 0 topics = confluent_admin_client.list_topics(timeout=5).topics.keys() diff --git a/tests/integration/commands/test_describe.py b/tests/integration/commands/test_describe.py index 3afd2b1b..3df2523c 100644 --- a/tests/integration/commands/test_describe.py +++ b/tests/integration/commands/test_describe.py @@ -4,9 +4,7 @@ from click.testing import CliRunner from esque import config -from esque.cli.commands.describe.broker import describe_broker -from esque.cli.commands.describe.consumergroup import describe_consumergroup -from esque.cli.commands.describe.topic import describe_topic +from esque.cli.commands import esque from esque.controller.consumergroup_controller import ConsumerGroupController from esque.errors import ConsumerGroupDoesNotExistException from esque.resources.topic import Topic @@ -27,7 +25,7 @@ @pytest.mark.integration def test_describe_topic_no_flag(non_interactive_cli_runner: CliRunner, topic: str): - result = non_interactive_cli_runner.invoke(describe_topic, topic, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["describe", "topic", topic], catch_exceptions=False) assert result.exit_code == 0 output = result.output check_described_topic(output) @@ -42,7 +40,9 @@ def test_describe_topic_last_timestamp_does_not_commit( producer, ): produced_messages_same_partition(topic_name=topic, producer=producer) - result = non_interactive_cli_runner.invoke(describe_topic, [topic, "--last-timestamp"], catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["describe", "topic", topic, "--last-timestamp"], catch_exceptions=False + ) assert result.exit_code == 0 output = result.output check_described_topic(output) @@ -61,7 +61,9 @@ def test_describe_topic_last_timestamp_does_not_commit( def test_describe_topic_formatted_output( non_interactive_cli_runner: CliRunner, topic: str, output_format: str, loader: Callable ): - result = non_interactive_cli_runner.invoke(describe_topic, [topic, "-o", output_format], catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["describe", "topic", topic, "-o", output_format], catch_exceptions=False + ) assert result.exit_code == 0 output_dict = loader(result.output) check_described_topic(output_dict) @@ -72,7 +74,9 @@ def test_describe_topic_formatted_output( def test_describe_topic_from_stdin( non_interactive_cli_runner: CliRunner, topic: str, output_format: str, loader: Callable ): - result = non_interactive_cli_runner.invoke(describe_topic, ["-o", output_format], topic, catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["describe", "topic", "-o", output_format], input=topic, catch_exceptions=False + ) assert result.exit_code == 0 output_dict = loader(result.output) check_described_topic(output_dict) @@ -80,13 +84,13 @@ def test_describe_topic_from_stdin( @pytest.mark.integration def test_describe_topic_without_topic_name_fails(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(describe_topic) + result = non_interactive_cli_runner.invoke(esque, args=["describe", "topic"]) assert result.exit_code != 0 @pytest.mark.integration def test_describe_broker_no_flag(non_interactive_cli_runner: CliRunner, broker_id: str): - result = non_interactive_cli_runner.invoke(describe_broker, broker_id, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["describe", "broker", broker_id], catch_exceptions=False) assert result.exit_code == 0 output = result.output check_described_broker(output) @@ -98,7 +102,7 @@ def test_describe_broker_formatted_output( non_interactive_cli_runner: CliRunner, broker_id: str, output_format: str, loader: Callable ): result = non_interactive_cli_runner.invoke( - describe_broker, [broker_id, "-o", output_format], catch_exceptions=False + esque, args=["describe", "broker", broker_id, "-o", output_format], catch_exceptions=False ) assert result.exit_code == 0 output_dict = loader(result.output) @@ -110,7 +114,7 @@ def test_describe_broker_formatted_output( def test_describe_broker_formatted_output_host( non_interactive_cli_runner: CliRunner, broker_host: str, output_format: str, loader: Callable ): - result = non_interactive_cli_runner.invoke(describe_broker, [broker_host, "-o", output_format]) + result = non_interactive_cli_runner.invoke(esque, args=["describe", "broker", broker_host, "-o", output_format]) assert result.exit_code == 0 output_dict = loader(result.output) check_described_broker(output_dict) @@ -121,7 +125,9 @@ def test_describe_broker_formatted_output_host( def test_describe_broker_formatted_output_host_and_port( non_interactive_cli_runner: CliRunner, broker_host_and_port: str, output_format: str, loader: Callable ): - result = non_interactive_cli_runner.invoke(describe_broker, [broker_host_and_port, "-o", output_format]) + result = non_interactive_cli_runner.invoke( + esque, args=["describe", "broker", broker_host_and_port, "-o", output_format] + ) assert result.exit_code == 0 output_dict = loader(result.output) check_described_broker(output_dict) @@ -129,7 +135,7 @@ def test_describe_broker_formatted_output_host_and_port( @pytest.mark.integration def test_describe_broker_without_broker_id_fails(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(describe_broker) + result = non_interactive_cli_runner.invoke(esque, args=["describe", "broker"]) assert result.exit_code != 0 @@ -139,7 +145,7 @@ def test_describe_broker_from_stdin( non_interactive_cli_runner: CliRunner, broker_id: str, output_format: str, loader: Callable ): result = non_interactive_cli_runner.invoke( - describe_broker, ["-o", output_format], broker_id, catch_exceptions=False + esque, args=["describe", "broker", "-o", output_format], input=broker_id, catch_exceptions=False ) assert result.exit_code == 0 output_dict = loader(result.output) @@ -175,7 +181,7 @@ def test_describe_topic_consumergroup_in_output( loader: Callable, ): result = non_interactive_cli_runner.invoke( - describe_topic, ["-o", output_format, "-c", filled_topic.name], catch_exceptions=False + esque, args=["describe", "topic", "-o", output_format, "-c", filled_topic.name], catch_exceptions=False ) assert result.exit_code == 0 output_dict = loader(result.output) @@ -193,7 +199,9 @@ def test_describe_consumergroup_in_output( loader: Callable, ): result = non_interactive_cli_runner.invoke( - describe_consumergroup, ["-o", output_format, partly_read_consumer_group], catch_exceptions=False + esque, + args=["describe", "consumergroup", "-o", output_format, partly_read_consumer_group], + catch_exceptions=False, ) assert result.exit_code == 0 output_dict = loader(result.output) @@ -201,8 +209,8 @@ def test_describe_consumergroup_in_output( assert partly_read_consumer_group in output_dict.get("group_id", None) result = non_interactive_cli_runner.invoke( - describe_consumergroup, - ["-o", output_format, "--all-partitions", partly_read_consumer_group], + esque, + args=["describe", "consumergroup", "-o", output_format, "--all-partitions", partly_read_consumer_group], catch_exceptions=False, ) assert result.exit_code == 0 @@ -211,8 +219,16 @@ def test_describe_consumergroup_in_output( assert 1 == len(output_dict.get("offsets", {}).get(filled_topic.name, {}).keys()) result = non_interactive_cli_runner.invoke( - describe_consumergroup, - ["-o", output_format, "--all-partitions", "--timestamps", partly_read_consumer_group], + esque, + args=[ + "describe", + "consumergroup", + "-o", + output_format, + "--all-partitions", + "--timestamps", + partly_read_consumer_group, + ], catch_exceptions=False, ) assert result.exit_code == 0 diff --git a/tests/integration/commands/test_edit.py b/tests/integration/commands/test_edit.py index d2de149a..f4bfcda0 100644 --- a/tests/integration/commands/test_edit.py +++ b/tests/integration/commands/test_edit.py @@ -8,8 +8,7 @@ from click.testing import CliRunner from confluent_kafka.cimpl import Producer as ConfluenceProducer -from esque.cli.commands.edit.offsets import edit_offsets -from esque.cli.commands.edit.topic import edit_topic +from esque.cli.commands import esque from esque.clients.consumer import ConsumerFactory from esque.controller.topic_controller import TopicController from esque.errors import EditCanceled @@ -61,7 +60,7 @@ def mock_edit_function(text=None, editor=None, env=None, require_save=None, exte return yaml.dump(config_dict, default_flow_style=False) monkeypatch.setattr(click, "edit", mock_edit_function) - result = interactive_cli_runner.invoke(edit_topic, topic, input="y\n", catch_exceptions=False) + result = interactive_cli_runner.invoke(esque, args=["edit", "topic", topic], input="y\n", catch_exceptions=False) assert result.exit_code == 0 topic_config_dict = topic_controller.get_cluster_topic(topic).as_dict(only_editable=True) @@ -71,7 +70,7 @@ def mock_edit_function(text=None, editor=None, env=None, require_save=None, exte @pytest.mark.integration def test_edit_topic_without_topic_name_fails(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(edit_topic) + result = non_interactive_cli_runner.invoke(esque, args=["edit", "topic"]) assert result.exit_code != 0 @@ -90,7 +89,7 @@ def test_edit_topic_calls_validator(mocker: mock, topic, interactive_cli_runner, } mocker.patch.object(click, "edit", return_value=yaml.dump(config_dict, default_flow_style=False)) - interactive_cli_runner.invoke(edit_topic, topic, input="y\n") + interactive_cli_runner.invoke(esque, args=["edit", "topic", topic], input="y\n") (validated_config_dict,) = validator_mock.call_args[0] assert validated_config_dict == config_dict @@ -135,7 +134,7 @@ def mock_edit_function(text=None, editor=None, env=None, require_save=None, exte monkeypatch.setattr(click, "edit", mock_edit_function) result = interactive_cli_runner.invoke( - edit_offsets, [consumer_group, "-t", topic], input="y\n", catch_exceptions=False + esque, args=["edit", "offsets", consumer_group, "-t", topic], input="y\n", catch_exceptions=False ) assert result.exit_code == 0 diff --git a/tests/integration/commands/test_get.py b/tests/integration/commands/test_get.py index 876d869c..cdbe19b9 100644 --- a/tests/integration/commands/test_get.py +++ b/tests/integration/commands/test_get.py @@ -9,11 +9,7 @@ from click.testing import CliRunner from confluent_kafka import OFFSET_END, Producer -from esque.cli.commands.get.brokers import get_brokers -from esque.cli.commands.get.consumergroups import get_consumergroups -from esque.cli.commands.get.offset import get_offset -from esque.cli.commands.get.timestamp import get_timestamp -from esque.cli.commands.get.topics import get_topics +from esque.cli.commands import esque from esque.controller.topic_controller import TopicController from esque.resources.topic import Topic from tests.conftest import parameterized_output_formats @@ -21,14 +17,16 @@ @pytest.mark.integration def test_smoke_test_get_topics(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(get_topics, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["get", "topics"], catch_exceptions=False) assert result.exit_code == 0 @pytest.mark.integration @parameterized_output_formats def test_get_topics_with_output_format(non_interactive_cli_runner: CliRunner, output_format: str, loader: Callable): - result = non_interactive_cli_runner.invoke(get_topics, ["-o", output_format], catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["get", "topics", "-o", output_format], catch_exceptions=False + ) assert result.exit_code == 0 loader(result.output) @@ -45,7 +43,9 @@ def test_get_topics_with_prefix( new_topics = [prefix_1 + topic_base, prefix_2 + topic_base, prefix_1 + prefix_2 + topic_base] topic_controller.create_topics([Topic(new_topic, replication_factor=1) for new_topic in new_topics]) - result = non_interactive_cli_runner.invoke(get_topics, ["-p", prefix_1, "-o", "json"], catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["get", "topics", "-p", prefix_1, "-o", "json"], catch_exceptions=False + ) assert result.exit_code == 0 retrieved_topics = json.loads(result.output) @@ -56,7 +56,7 @@ def test_get_topics_with_prefix( @pytest.mark.integration def test_smoke_test_get_consumergroups(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(get_consumergroups, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["get", "consumergroups"], catch_exceptions=False) assert result.exit_code == 0 @@ -65,21 +65,25 @@ def test_smoke_test_get_consumergroups(non_interactive_cli_runner: CliRunner): def test_get_consumergroups_with_output_format( non_interactive_cli_runner: CliRunner, output_format: str, loader: Callable ): - result = non_interactive_cli_runner.invoke(get_consumergroups, ["-o", output_format], catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["get", "consumergroups", "-o", output_format], catch_exceptions=False + ) assert result.exit_code == 0 loader(result.output) @pytest.mark.integration def test_smoke_test_get_brokers(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(get_brokers, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["get", "brokers"], catch_exceptions=False) assert result.exit_code == 0 @pytest.mark.integration @parameterized_output_formats def test_get_brokers_with_output_format(non_interactive_cli_runner: CliRunner, output_format: str, loader: Callable): - result = non_interactive_cli_runner.invoke(get_brokers, ["-o", output_format], catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["get", "brokers", "-o", output_format], catch_exceptions=False + ) assert result.exit_code == 0 loader(result.output) @@ -113,7 +117,7 @@ def test_get_timestamps_with_output_format( producer.flush() result = non_interactive_cli_runner.invoke( - get_timestamp, [topic_name, offset, "-o", output_format], catch_exceptions=False + esque, args=["get", "timestamp", topic_name, offset, "-o", output_format], catch_exceptions=False ) result_data = loader(result.output) assert len(result_data) == partitions @@ -164,7 +168,7 @@ def test_get_offset_with_output_format( producer.flush() result = non_interactive_cli_runner.invoke( - get_offset, [topic_name, str(timestamp), "-o", output_format], catch_exceptions=False + esque, args=["get", "offset", topic_name, str(timestamp), "-o", output_format], catch_exceptions=False ) result_data = loader(result.output) assert len(result_data) == partitions diff --git a/tests/integration/commands/test_multiargs.py b/tests/integration/commands/test_multiargs.py index 2ecac4ac..a727c809 100644 --- a/tests/integration/commands/test_multiargs.py +++ b/tests/integration/commands/test_multiargs.py @@ -8,10 +8,7 @@ from confluent_kafka.admin import AdminClient from confluent_kafka.cimpl import NewTopic, TopicPartition -from esque.cli.commands.delete.consumergroup import delete_consumergroup -from esque.cli.commands.delete.topics import delete_topics -from esque.cli.commands.get.consumergroups import get_consumergroups -from esque.cli.commands.get.topics import get_topics +from esque.cli.commands import esque from esque.config import Config from esque.controller.consumergroup_controller import ConsumerGroupController from esque.resources.consumergroup import ConsumerGroup @@ -58,7 +55,10 @@ def test_topic_deletions_multiple_cli( assert "not_in_the_list_of_topics" not in topics_pre_deletion result = interactive_cli_runner.invoke( - delete_topics, topics_to_delete + ["not_in_the_list_of_topics"], input="Y\n", catch_exceptions=False + esque, + args=["delete", "topics"] + topics_to_delete + ["not_in_the_list_of_topics"], + input="Y\n", + catch_exceptions=False, ) assert result.exit_code == 0 @@ -80,8 +80,8 @@ def test_topic_deletions_piped( assert "not_in_the_list_of_topics" not in topics_pre_deletion result = non_interactive_cli_runner.invoke( - delete_topics, - "--no-verify", + esque, + args=["delete", "topics", "--no-verify"], input="\n".join(topics_to_delete + ["not_in_the_list_of_topics"]), catch_exceptions=False, ) @@ -107,8 +107,8 @@ def test_consumer_group_deletions_multiple_cli( assert "not_in_the_list_of_consumers" not in consumer_groups_pre_deletion result = interactive_cli_runner.invoke( - delete_consumergroup, - consumer_groups_to_delete + ["not_in_the_list_of_consumers"], + esque, + args=["delete", "consumergroup"] + consumer_groups_to_delete + ["not_in_the_list_of_consumers"], input="Y\n", catch_exceptions=False, ) @@ -135,8 +135,8 @@ def test_consumer_group_deletions_piped( assert "not_in_the_list_of_consumers" not in consumer_groups_pre_deletion result = non_interactive_cli_runner.invoke( - delete_consumergroup, - "--no-verify", + esque, + args=["delete", "consumergroup", "--no-verify"], input="\n".join(consumer_groups_to_delete + ["not_in_the_list_of_consumers"]), catch_exceptions=False, ) @@ -152,9 +152,11 @@ def test_consumer_group_deletions_piped( def test_topic_list_output_compatibility_for_piping( non_interactive_cli_runner: CliRunner, confluent_admin_client: confluent_kafka.admin.AdminClient, topic: str ): - all_topics = non_interactive_cli_runner.invoke(get_topics, args="--hide-internal").stdout + all_topics = non_interactive_cli_runner.invoke(esque, args=["get", "topics", "--hide-internal"]).stdout assert topic in all_topics - result = non_interactive_cli_runner.invoke(delete_topics, "--no-verify", input=all_topics, catch_exceptions=False) + result = non_interactive_cli_runner.invoke( + esque, args=["delete", "topics", "--no-verify"], input=all_topics, catch_exceptions=False + ) assert result.exit_code == 0 all_topics = sorted(list(confluent_admin_client.list_topics(timeout=5).topics.keys())) assert all_topics == ["__confluent.support.metrics", "__consumer_offsets"] @@ -166,11 +168,13 @@ def test_consumergroup_list_output_compatibility_for_piping( confluent_admin_client: confluent_kafka.admin.AdminClient, consumergroup_instance: ConsumerGroup, ): - all_consumergroups = non_interactive_cli_runner.invoke(get_consumergroups).stdout + all_consumergroups = non_interactive_cli_runner.invoke(esque, args=["get", "consumergroups"]).stdout assert consumergroup_instance.id in all_consumergroups result = non_interactive_cli_runner.invoke( - delete_consumergroup, "--no-verify", input=all_consumergroups, catch_exceptions=False + esque, args=["delete", "consumergroup", "--no-verify"], input=all_consumergroups, catch_exceptions=False ) assert result.exit_code == 0 - all_consumergroups = non_interactive_cli_runner.invoke(get_consumergroups).stdout.replace("\n", "") + all_consumergroups = non_interactive_cli_runner.invoke(esque, args=["get", "consumergroups"]).stdout.replace( + "\n", "" + ) assert all_consumergroups == "[]" diff --git a/tests/integration/commands/test_ping.py b/tests/integration/commands/test_ping.py index 0aee2c50..530a6af9 100644 --- a/tests/integration/commands/test_ping.py +++ b/tests/integration/commands/test_ping.py @@ -2,20 +2,20 @@ from click.testing import CliRunner from esque import config -from esque.cli.commands.ping import ping +from esque.cli.commands import esque from esque.controller.consumergroup_controller import ConsumerGroupController from esque.errors import ConsumerGroupDoesNotExistException @pytest.mark.integration def test_smoke_test_ping(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(ping, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["ping"], catch_exceptions=False) assert result.exit_code == 0 @pytest.mark.integration def test_correct_amount_of_messages(non_interactive_cli_runner: CliRunner): - result = non_interactive_cli_runner.invoke(ping, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["ping"], catch_exceptions=False) assert result.exit_code == 0 # make sure we sent/received 10 messages @@ -27,7 +27,7 @@ def test_correct_amount_of_messages(non_interactive_cli_runner: CliRunner): def test_offset_not_committed( non_interactive_cli_runner: CliRunner, consumergroup_controller: ConsumerGroupController ): - result = non_interactive_cli_runner.invoke(ping, catch_exceptions=False) + result = non_interactive_cli_runner.invoke(esque, args=["ping"], catch_exceptions=False) assert result.exit_code == 0 # cannot use pytest.raises(ConsumerGroupDoesNotExistException) because other tests may have committed offsets diff --git a/tests/integration/commands/test_produce.py b/tests/integration/commands/test_produce.py index 52919e6c..5cdc111b 100644 --- a/tests/integration/commands/test_produce.py +++ b/tests/integration/commands/test_produce.py @@ -4,7 +4,7 @@ from click.testing import CliRunner from confluent_kafka.cimpl import Producer as ConfluenceProducer -from esque.cli.commands.produce import produce +from esque.cli.commands import esque from esque.clients.consumer import ConsumerFactory from esque.errors import TopicDoesNotExistException from tests.integration.test_clients import get_consumed_messages, produce_test_messages @@ -29,7 +29,7 @@ def test_plain_text_consume_and_produce_newly_created_topic( file_consumer.consume(10) result = interactive_cli_runner.invoke( - produce, args=["-d", output_directory, target_topic_id], input="y\n", catch_exceptions=False + esque, args=["produce", "-d", output_directory, target_topic_id], input="y\n", catch_exceptions=False ) assert result.exit_code == 0 @@ -48,7 +48,9 @@ def test_plain_text_consume_and_produce_newly_created_topic( @pytest.mark.integration def test_binary_and_avro_fails(non_interactive_cli_runner: CliRunner): with pytest.raises(ValueError): - non_interactive_cli_runner.invoke(produce, args=["--binary", "--avro", "thetopic"], catch_exceptions=False) + non_interactive_cli_runner.invoke( + esque, args=["produce", "--binary", "--avro", "thetopic"], catch_exceptions=False + ) @pytest.mark.integration @@ -57,7 +59,7 @@ def test_produce_to_non_existent_topic_fails( ): target_topic_id = topic_id - result = interactive_cli_runner.invoke(produce, args=["--stdin", target_topic_id], input="n\n") + result = interactive_cli_runner.invoke(esque, args=["produce", "--stdin", target_topic_id], input="n\n") assert isinstance(result.exception, TopicDoesNotExistException) topics = confluent_admin_client.list_topics(timeout=5).topics.keys() assert target_topic_id not in topics diff --git a/tests/integration/commands/test_set.py b/tests/integration/commands/test_set.py index 8b092e8e..c10de175 100644 --- a/tests/integration/commands/test_set.py +++ b/tests/integration/commands/test_set.py @@ -2,7 +2,7 @@ import pytest from confluent_kafka.cimpl import Producer as ConfluenceProducer -from esque.cli.commands.set_.offsets import set_offsets +from esque.cli.commands import esque from esque.clients.consumer import ConsumerFactory @@ -38,8 +38,8 @@ def test_set_offsets_offset_to_absolute_value( ) interactive_cli_runner.invoke( - set_offsets, - args=[consumer_group, "--topic-name", topic, "--offset-to-value", "1"], + esque, + args=["set", "offsets", consumer_group, "--topic-name", topic, "--offset-to-value", "1"], input="y\n", catch_exceptions=False, ) @@ -82,8 +82,8 @@ def test_set_offsets_offset_to_delta( ) interactive_cli_runner.invoke( - set_offsets, - args=[consumer_group, "--topic-name", topic, "--offset-by-delta", "-2"], + esque, + args=["set", "offsets", consumer_group, "--topic-name", topic, "--offset-by-delta", "-2"], input="y\n", catch_exceptions=False, ) @@ -126,7 +126,7 @@ def test_set_offsets_offset_to_delta_all_topics( ) interactive_cli_runner.invoke( - set_offsets, args=[consumer_group, "--offset-by-delta", "-2"], input="y\n", catch_exceptions=False + esque, args=["set", "offsets", consumer_group, "--offset-by-delta", "-2"], input="y\n", catch_exceptions=False ) # Check assertions: consumergroup_desc_after = consumergroup_controller.get_consumer_group(consumer_id=consumer_group).describe( @@ -168,7 +168,7 @@ def test_set_offsets_offset_from_group( ) interactive_cli_runner.invoke( - set_offsets, args=[consumer_group, "--offset-by-delta", "-2"], input="y\n", catch_exceptions=False + esque, args=["set", "offsets", consumer_group, "--offset-by-delta", "-2"], input="y\n", catch_exceptions=False ) consumergroup_desc_after = consumergroup_controller.get_consumer_group(consumer_id=consumer_group).describe( partitions=True @@ -192,8 +192,8 @@ def test_set_offsets_offset_from_group( del vanilla_target_consumer interactive_cli_runner.invoke( - set_offsets, - args=[target_consumer_group, "--offset-from-group", consumer_group], + esque, + args=["set", "offsets", target_consumer_group, "--offset-from-group", consumer_group], input="y\n", catch_exceptions=False, ) @@ -244,8 +244,16 @@ def test_set_offsets_offset_to_timestamp_value( dt = pendulum.from_timestamp(round(timestamp[1] / 1000) - 1) interactive_cli_runner.invoke( - set_offsets, - args=[consumer_group, "--topic-name", topic, "--offset-to-timestamp", dt.format("YYYY-MM-DDTHH:mm:ss")], + esque, + args=[ + "set", + "offsets", + consumer_group, + "--topic-name", + topic, + "--offset-to-timestamp", + dt.format("YYYY-MM-DDTHH:mm:ss"), + ], input="y\n", catch_exceptions=False, ) diff --git a/tests/integration/commands/test_transfer.py b/tests/integration/commands/test_transfer.py index 0d160b28..7664b855 100644 --- a/tests/integration/commands/test_transfer.py +++ b/tests/integration/commands/test_transfer.py @@ -6,8 +6,7 @@ from confluent_kafka.cimpl import Producer as ConfluentProducer from confluent_kafka.cimpl import TopicPartition -from esque.cli.commands.consume import consume -from esque.cli.commands.produce import produce +from esque.cli.commands import esque from esque.config import Config from esque.messages.message import MessageHeader from tests.integration.commands.conftest import ( @@ -43,10 +42,10 @@ def test_transfer_plain_text_message_using_cli_pipe( expected_messages = produce_text_test_messages(topic=source_topic, producer=producer) result1 = non_interactive_cli_runner.invoke( - consume, args=["--stdout", "--number", "10", source_topic[0]], catch_exceptions=False + esque, args=["consume", "--stdout", "--number", "10", source_topic[0]], catch_exceptions=False ) non_interactive_cli_runner.invoke( - produce, args=["--stdin", target_topic[0]], input=result1.output, catch_exceptions=False + esque, args=["produce", "--stdin", target_topic[0]], input=result1.output, catch_exceptions=False ) actual_messages = { @@ -68,10 +67,10 @@ def test_transfer_plain_text_message_with_headers_using_cli_pipe( expected_messages = produce_text_test_messages_with_headers(topic=source_topic, producer=producer) result1 = non_interactive_cli_runner.invoke( - consume, args=["--stdout", "--number", "10", source_topic[0]], catch_exceptions=False + esque, args=["consume", "--stdout", "--number", "10", source_topic[0]], catch_exceptions=False ) non_interactive_cli_runner.invoke( - produce, args=["--stdin", target_topic[0]], input=result1.output, catch_exceptions=False + esque, args=["produce", "--stdin", target_topic[0]], input=result1.output, catch_exceptions=False ) actual_messages = { @@ -98,10 +97,10 @@ def test_transfer_binary_message_using_cli_pipe( expected_messages = produce_binary_test_messages(topic=source_topic, producer=producer) result1 = non_interactive_cli_runner.invoke( - consume, args=["--stdout", "--binary", "--number", "10", source_topic[0]], catch_exceptions=False + esque, args=["consume", "--stdout", "--binary", "--number", "10", source_topic[0]], catch_exceptions=False ) non_interactive_cli_runner.invoke( - produce, args=["--stdin", "--binary", target_topic[0]], input=result1.output, catch_exceptions=False + esque, args=["produce", "--stdin", "--binary", target_topic[0]], input=result1.output, catch_exceptions=False ) actual_messages = { @@ -124,10 +123,10 @@ def test_transfer_plain_text_message_using_file( expected_messages = produce_text_test_messages(topic=source_topic, producer=producer) non_interactive_cli_runner.invoke( - consume, args=["-d", str(output_directory), "--number", "10", source_topic[0]], catch_exceptions=False + esque, args=["consume", "-d", str(output_directory), "--number", "10", source_topic[0]], catch_exceptions=False ) non_interactive_cli_runner.invoke( - produce, args=["-d", str(output_directory), target_topic[0]], catch_exceptions=False + esque, args=["produce", "-d", str(output_directory), target_topic[0]], catch_exceptions=False ) actual_messages = { @@ -151,10 +150,10 @@ def test_transfer_plain_text_message_with_headers_using_file( expected_messages = produce_text_test_messages_with_headers(topic=source_topic, producer=producer) non_interactive_cli_runner.invoke( - consume, args=["-d", str(output_directory), "--number", "10", source_topic[0]], catch_exceptions=False + esque, args=["consume", "-d", str(output_directory), "--number", "10", source_topic[0]], catch_exceptions=False ) non_interactive_cli_runner.invoke( - produce, args=["-d", str(output_directory), target_topic[0]], catch_exceptions=False + esque, args=["produce", "-d", str(output_directory), target_topic[0]], catch_exceptions=False ) actual_messages = { @@ -183,12 +182,12 @@ def test_transfer_binary_message_using_file( expected_messages = produce_binary_test_messages(topic=source_topic, producer=producer) non_interactive_cli_runner.invoke( - consume, - args=["-d", str(output_directory), "--binary", "--number", "10", source_topic[0]], + esque, + args=["consume", "-d", str(output_directory), "--binary", "--number", "10", source_topic[0]], catch_exceptions=False, ) non_interactive_cli_runner.invoke( - produce, args=["-d", str(output_directory), "--binary", target_topic[0]], catch_exceptions=False + esque, args=["produce", "-d", str(output_directory), "--binary", target_topic[0]], catch_exceptions=False ) actual_messages = {