@platformatic/rdkafka 4.0.0 → 4.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/bench/seed.sh +0 -0
- package/binding.gyp +3 -3
- package/ci/prepublish.js +4 -3
- package/ci/update-version.js +123 -0
- package/config.d.ts +126 -10
- package/configure +0 -0
- package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
- package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
- package/deps/librdkafka/.semaphore/semaphore.yml +67 -44
- package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
- package/deps/librdkafka/CHANGELOG.md +471 -1
- package/deps/librdkafka/CONFIGURATION.md +29 -9
- package/deps/librdkafka/INTRODUCTION.md +909 -601
- package/deps/librdkafka/Makefile +2 -1
- package/deps/librdkafka/configure +0 -0
- package/deps/librdkafka/debian/rules +0 -0
- package/deps/librdkafka/dev-conf.sh +0 -0
- package/deps/librdkafka/examples/consumer.c +18 -8
- package/deps/librdkafka/examples/describe_consumer_groups.c +25 -6
- package/deps/librdkafka/examples/incremental_alter_configs.c +4 -5
- package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +26 -42
- package/deps/librdkafka/examples/openssl_engine_example.cpp +3 -4
- package/deps/librdkafka/examples/producer.cpp +2 -2
- package/deps/librdkafka/examples/user_scram.c +4 -5
- package/deps/librdkafka/examples/win_ssl_cert_store.cpp +4 -3
- package/deps/librdkafka/lds-gen.py +0 -0
- package/deps/librdkafka/mklove/Makefile.base +0 -0
- package/deps/librdkafka/packaging/RELEASE.md +8 -0
- package/deps/librdkafka/packaging/alpine/build-alpine.sh +0 -0
- package/deps/librdkafka/packaging/cp/README.md +4 -1
- package/deps/librdkafka/packaging/cp/check_features.c +12 -4
- package/deps/librdkafka/packaging/cp/verify-deb.sh +6 -6
- package/deps/librdkafka/packaging/cp/verify-packages.sh +52 -31
- package/deps/librdkafka/packaging/cp/verify-rpm.sh +6 -13
- package/deps/librdkafka/packaging/debian/docs +5 -0
- package/deps/librdkafka/packaging/debian/rules +0 -0
- package/deps/librdkafka/packaging/get_version.py +0 -0
- package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +0 -0
- package/deps/librdkafka/packaging/mingw-w64/{travis-before-install.sh → export-variables.sh} +0 -7
- package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +1 -1
- package/deps/librdkafka/packaging/nuget/artifact.py +0 -0
- package/deps/librdkafka/packaging/nuget/cleanup-s3.py +0 -0
- package/deps/librdkafka/packaging/nuget/nuget.sh +0 -0
- package/deps/librdkafka/packaging/nuget/packaging.py +0 -0
- package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +0 -0
- package/deps/librdkafka/packaging/nuget/release.py +0 -0
- package/deps/librdkafka/packaging/nuget/requirements.txt +3 -3
- package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +0 -0
- package/deps/librdkafka/packaging/rpm/tests/run-test.sh +0 -0
- package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +3 -1
- package/deps/librdkafka/packaging/tools/build-deb-package.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-debian.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-manylinux.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +0 -0
- package/deps/librdkafka/packaging/tools/distro-build.sh +0 -0
- package/deps/librdkafka/packaging/tools/gh-release-checksums.py +0 -0
- package/deps/librdkafka/packaging/tools/rdutcoverage.sh +0 -0
- package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
- package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
- package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
- package/deps/librdkafka/packaging/tools/style-format.sh +6 -5
- package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
- package/deps/librdkafka/service.yml +154 -0
- package/deps/librdkafka/src/generate_proto.sh +0 -0
- package/deps/librdkafka/src/rd.h +145 -2
- package/deps/librdkafka/src/rdaddr.h +6 -7
- package/deps/librdkafka/src/rdatomic.h +15 -11
- package/deps/librdkafka/src/rdavg.h +3 -2
- package/deps/librdkafka/src/rdbase64.c +33 -2
- package/deps/librdkafka/src/rdbase64.h +2 -0
- package/deps/librdkafka/src/rdendian.h +10 -9
- package/deps/librdkafka/src/rdhttp.c +418 -100
- package/deps/librdkafka/src/rdhttp.h +23 -5
- package/deps/librdkafka/src/rdkafka.c +299 -145
- package/deps/librdkafka/src/rdkafka.h +89 -6
- package/deps/librdkafka/src/rdkafka_admin.c +482 -105
- package/deps/librdkafka/src/rdkafka_admin.h +42 -0
- package/deps/librdkafka/src/rdkafka_broker.c +463 -312
- package/deps/librdkafka/src/rdkafka_broker.h +68 -10
- package/deps/librdkafka/src/rdkafka_buf.c +8 -5
- package/deps/librdkafka/src/rdkafka_buf.h +4 -3
- package/deps/librdkafka/src/rdkafka_cert.c +25 -1
- package/deps/librdkafka/src/rdkafka_cert.h +4 -3
- package/deps/librdkafka/src/rdkafka_cgrp.c +468 -143
- package/deps/librdkafka/src/rdkafka_cgrp.h +36 -2
- package/deps/librdkafka/src/rdkafka_conf.c +526 -102
- package/deps/librdkafka/src/rdkafka_conf.h +68 -4
- package/deps/librdkafka/src/rdkafka_feature.c +472 -35
- package/deps/librdkafka/src/rdkafka_feature.h +2 -0
- package/deps/librdkafka/src/rdkafka_fetcher.c +22 -2
- package/deps/librdkafka/src/rdkafka_fetcher.h +2 -2
- package/deps/librdkafka/src/rdkafka_int.h +84 -46
- package/deps/librdkafka/src/rdkafka_metadata.c +221 -136
- package/deps/librdkafka/src/rdkafka_metadata.h +15 -11
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +279 -73
- package/deps/librdkafka/src/rdkafka_mock.c +795 -19
- package/deps/librdkafka/src/rdkafka_mock.h +119 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1298 -132
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +345 -49
- package/deps/librdkafka/src/rdkafka_mock_int.h +180 -61
- package/deps/librdkafka/src/rdkafka_msg.c +35 -19
- package/deps/librdkafka/src/rdkafka_msg.h +3 -3
- package/deps/librdkafka/src/rdkafka_msgset_writer.c +14 -10
- package/deps/librdkafka/src/rdkafka_offset.c +33 -5
- package/deps/librdkafka/src/rdkafka_op.c +1 -1
- package/deps/librdkafka/src/rdkafka_op.h +45 -21
- package/deps/librdkafka/src/rdkafka_partition.c +118 -23
- package/deps/librdkafka/src/rdkafka_partition.h +16 -7
- package/deps/librdkafka/src/rdkafka_proto.h +4 -1
- package/deps/librdkafka/src/rdkafka_protocol.h +1 -0
- package/deps/librdkafka/src/rdkafka_queue.c +125 -48
- package/deps/librdkafka/src/rdkafka_queue.h +19 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1 -1
- package/deps/librdkafka/src/rdkafka_request.c +336 -64
- package/deps/librdkafka/src/rdkafka_request.h +24 -1
- package/deps/librdkafka/src/rdkafka_sasl.c +5 -3
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +14 -10
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1166 -89
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +13 -3
- package/deps/librdkafka/src/rdkafka_sasl_plain.c +3 -3
- package/deps/librdkafka/src/rdkafka_sasl_scram.c +4 -3
- package/deps/librdkafka/src/rdkafka_ssl.c +306 -81
- package/deps/librdkafka/src/rdkafka_ssl.h +22 -0
- package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +80 -23
- package/deps/librdkafka/src/rdkafka_telemetry_encode.c +5 -1
- package/deps/librdkafka/src/rdkafka_telemetry_encode.h +20 -20
- package/deps/librdkafka/src/rdkafka_topic.c +220 -137
- package/deps/librdkafka/src/rdkafka_topic.h +14 -8
- package/deps/librdkafka/src/rdkafka_transport.c +59 -47
- package/deps/librdkafka/src/rdkafka_transport.h +5 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.c +6 -1
- package/deps/librdkafka/src/rdmap.c +6 -1
- package/deps/librdkafka/src/rdrand.c +11 -1
- package/deps/librdkafka/src/rdtime.h +48 -17
- package/deps/librdkafka/src/rdunittest.c +42 -25
- package/deps/librdkafka/src/rdunittest.h +2 -0
- package/deps/librdkafka/src/rdwin32.h +1 -1
- package/deps/librdkafka/src/regexp.c +47 -42
- package/deps/librdkafka/src/tinycthread_extra.c +45 -21
- package/deps/librdkafka/src/tinycthread_extra.h +7 -3
- package/deps/librdkafka/src-cpp/rdkafkacpp.h +28 -2
- package/deps/librdkafka/tests/0001-multiobj.c +4 -0
- package/deps/librdkafka/tests/0004-conf.c +103 -36
- package/deps/librdkafka/tests/0009-mock_cluster.c +1 -0
- package/deps/librdkafka/tests/0011-produce_batch.c +2 -1
- package/deps/librdkafka/tests/0016-client_swname.c +18 -3
- package/deps/librdkafka/tests/0017-compression.c +6 -8
- package/deps/librdkafka/tests/0018-cgrp_term.c +8 -3
- package/deps/librdkafka/tests/0021-rkt_destroy.c +1 -0
- package/deps/librdkafka/tests/0022-consume_batch.c +4 -1
- package/deps/librdkafka/tests/0026-consume_pause.c +12 -14
- package/deps/librdkafka/tests/0028-long_topicnames.c +1 -1
- package/deps/librdkafka/tests/0029-assign_offset.c +6 -8
- package/deps/librdkafka/tests/0030-offset_commit.c +2 -2
- package/deps/librdkafka/tests/0033-regex_subscribe.c +33 -17
- package/deps/librdkafka/tests/0034-offset_reset.c +25 -4
- package/deps/librdkafka/tests/0036-partial_fetch.c +1 -0
- package/deps/librdkafka/tests/0038-performance.c +1 -0
- package/deps/librdkafka/tests/0040-io_event.c +11 -5
- package/deps/librdkafka/tests/0041-fetch_max_bytes.c +1 -0
- package/deps/librdkafka/tests/0044-partition_cnt.c +3 -2
- package/deps/librdkafka/tests/0045-subscribe_update.c +284 -20
- package/deps/librdkafka/tests/0047-partial_buf_tmout.c +1 -0
- package/deps/librdkafka/tests/0048-partitioner.c +1 -1
- package/deps/librdkafka/tests/0050-subscribe_adds.c +1 -0
- package/deps/librdkafka/tests/0051-assign_adds.c +1 -0
- package/deps/librdkafka/tests/0052-msg_timestamps.c +22 -4
- package/deps/librdkafka/tests/0053-stats_cb.cpp +12 -20
- package/deps/librdkafka/tests/0055-producer_latency.c +176 -3
- package/deps/librdkafka/tests/0056-balanced_group_mt.c +6 -2
- package/deps/librdkafka/tests/0058-log.cpp +3 -3
- package/deps/librdkafka/tests/0059-bsearch.cpp +8 -4
- package/deps/librdkafka/tests/0061-consumer_lag.cpp +25 -5
- package/deps/librdkafka/tests/0067-empty_topic.cpp +3 -0
- package/deps/librdkafka/tests/0068-produce_timeout.c +21 -23
- package/deps/librdkafka/tests/0069-consumer_add_parts.c +3 -7
- package/deps/librdkafka/tests/0075-retry.c +38 -1
- package/deps/librdkafka/tests/0076-produce_retry.c +2 -0
- package/deps/librdkafka/tests/0077-compaction.c +8 -2
- package/deps/librdkafka/tests/0080-admin_ut.c +34 -4
- package/deps/librdkafka/tests/0081-admin.c +455 -155
- package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +4 -0
- package/deps/librdkafka/tests/0083-cb_event.c +8 -3
- package/deps/librdkafka/tests/0084-destroy_flags.c +14 -18
- package/deps/librdkafka/tests/0085-headers.cpp +4 -0
- package/deps/librdkafka/tests/0086-purge.c +40 -7
- package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +1 -1
- package/deps/librdkafka/tests/0089-max_poll_interval.c +12 -7
- package/deps/librdkafka/tests/0090-idempotence.c +1 -2
- package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +5 -7
- package/deps/librdkafka/tests/0092-mixed_msgver.c +6 -0
- package/deps/librdkafka/tests/0093-holb.c +8 -5
- package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +1 -0
- package/deps/librdkafka/tests/0097-ssl_verify.cpp +262 -70
- package/deps/librdkafka/tests/0098-consumer-txn.cpp +16 -16
- package/deps/librdkafka/tests/0099-commit_metadata.c +1 -1
- package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +1 -1
- package/deps/librdkafka/tests/0102-static_group_rebalance.c +317 -16
- package/deps/librdkafka/tests/0103-transactions.c +7 -7
- package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +1 -0
- package/deps/librdkafka/tests/0105-transactions_mock.c +18 -11
- package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +35 -14
- package/deps/librdkafka/tests/0107-topic_recreate.c +2 -2
- package/deps/librdkafka/tests/0109-auto_create_topics.cpp +86 -26
- package/deps/librdkafka/tests/0110-batch_size.cpp +1 -2
- package/deps/librdkafka/tests/0112-assign_unknown_part.c +3 -14
- package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +248 -104
- package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +3 -3
- package/deps/librdkafka/tests/0115-producer_auth.cpp +4 -1
- package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +7 -5
- package/deps/librdkafka/tests/0117-mock_errors.c +15 -5
- package/deps/librdkafka/tests/0118-commit_rebalance.c +41 -8
- package/deps/librdkafka/tests/0119-consumer_auth.cpp +20 -1
- package/deps/librdkafka/tests/0120-asymmetric_subscription.c +8 -3
- package/deps/librdkafka/tests/0125-immediate_flush.c +1 -1
- package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +323 -8
- package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +1 -0
- package/deps/librdkafka/tests/0132-strategy_ordering.c +12 -4
- package/deps/librdkafka/tests/0133-ssl_keys.c +28 -6
- package/deps/librdkafka/tests/0137-barrier_batch_consume.c +24 -14
- package/deps/librdkafka/tests/0139-offset_validation_mock.c +510 -2
- package/deps/librdkafka/tests/0140-commit_metadata.cpp +1 -1
- package/deps/librdkafka/tests/0142-reauthentication.c +37 -17
- package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +39 -40
- package/deps/librdkafka/tests/0146-metadata_mock.c +76 -15
- package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
- package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
- package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
- package/deps/librdkafka/tests/0150-telemetry_mock.c +9 -6
- package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
- package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
- package/deps/librdkafka/tests/0153-memberid.c +128 -0
- package/deps/librdkafka/tests/CMakeLists.txt +6 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +34 -9
- package/deps/librdkafka/tests/autotest.sh +0 -0
- package/deps/librdkafka/tests/broker_version_tests.py +0 -0
- package/deps/librdkafka/tests/buildbox.sh +0 -0
- package/deps/librdkafka/tests/cleanup-checker-tests.sh +0 -0
- package/deps/librdkafka/tests/cluster_testing.py +0 -0
- package/deps/librdkafka/tests/delete-test-topics.sh +0 -0
- package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +42 -101
- package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.key +41 -29
- package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +112 -37
- package/deps/librdkafka/tests/gen-ssl-certs.sh +0 -0
- package/deps/librdkafka/tests/interactive_broker_version.py +0 -0
- package/deps/librdkafka/tests/java/Makefile +2 -1
- package/deps/librdkafka/tests/java/run-class.sh +0 -0
- package/deps/librdkafka/tests/lz4_manual_test.sh +0 -0
- package/deps/librdkafka/tests/multi-broker-version-test.sh +0 -0
- package/deps/librdkafka/tests/parse-refcnt.sh +0 -0
- package/deps/librdkafka/tests/performance_plot.py +0 -0
- package/deps/librdkafka/tests/requirements.txt +1 -1
- package/deps/librdkafka/tests/run-all-tests.sh +79 -0
- package/deps/librdkafka/tests/run-consumer-tests.sh +0 -0
- package/deps/librdkafka/tests/run-producer-tests.sh +0 -0
- package/deps/librdkafka/tests/run-test-batches.py +157 -0
- package/deps/librdkafka/tests/run-test.sh +0 -0
- package/deps/librdkafka/tests/sasl_test.py +0 -0
- package/deps/librdkafka/tests/test.c +478 -18
- package/deps/librdkafka/tests/test.h +62 -13
- package/deps/librdkafka/tests/testcpp.cpp +6 -1
- package/deps/librdkafka/tests/testcpp.h +30 -2
- package/deps/librdkafka/tests/testshared.h +16 -2
- package/deps/librdkafka/tests/tools/stats/graph.py +0 -0
- package/deps/librdkafka/tests/tools/stats/to_csv.py +1 -1
- package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
- package/deps/librdkafka/tests/until-fail.sh +0 -0
- package/deps/librdkafka/tests/xxxx-metadata.cpp +1 -1
- package/deps/librdkafka/vcpkg.json +1 -1
- package/deps/librdkafka/win32/setup-msys2.ps1 +24 -8
- package/deps/librdkafka/win32/setup-vcpkg.ps1 +28 -6
- package/deps/librdkafka/win32/tests/tests.vcxproj +6 -0
- package/deps/librdkafka/win32/wingetopt.h +5 -4
- package/errors.d.ts +27 -1
- package/lib/error.js +29 -3
- package/make_docs.sh +0 -0
- package/package.json +12 -13
- package/run_docker.sh +0 -0
- package/src/callbacks.cc +6 -9
- package/src/callbacks.h +1 -5
- package/test/kafka-consumer-worker.js +10 -7
- package/test/kafka-consumer.spec.js +32 -21
- package/deps/librdkafka/.semaphore/project.yml +0 -43
- package/deps/librdkafka/.semaphore/project_public.yml +0 -20
- package/deps/librdkafka/win32/install-openssl.ps1 +0 -33
|
@@ -39,6 +39,9 @@
|
|
|
39
39
|
static int32_t *avail_brokers;
|
|
40
40
|
static size_t avail_broker_cnt;
|
|
41
41
|
|
|
42
|
+
#define group_configs_supported() \
|
|
43
|
+
(test_broker_version >= TEST_BRKVER(4, 0, 0, 0))
|
|
44
|
+
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
static void do_test_CreateTopics(const char *what,
|
|
@@ -781,7 +784,7 @@ static void do_test_AlterConfigs(rd_kafka_t *rk, rd_kafka_queue_t *rkqu) {
|
|
|
781
784
|
TEST_ASSERT(!err, "%s", rd_kafka_err2str(err));
|
|
782
785
|
|
|
783
786
|
err = rd_kafka_ConfigResource_set_config(
|
|
784
|
-
configs[ci], "
|
|
787
|
+
configs[ci], "max.compaction.lag.ms", "3600000");
|
|
785
788
|
TEST_ASSERT(!err, "%s", rd_kafka_err2str(err));
|
|
786
789
|
|
|
787
790
|
if (test_broker_version >= TEST_BRKVER(2, 7, 0, 0))
|
|
@@ -902,7 +905,7 @@ static void do_test_AlterConfigs(rd_kafka_t *rk, rd_kafka_queue_t *rkqu) {
|
|
|
902
905
|
*/
|
|
903
906
|
static void do_test_IncrementalAlterConfigs(rd_kafka_t *rk,
|
|
904
907
|
rd_kafka_queue_t *rkqu) {
|
|
905
|
-
#define MY_CONFRES_CNT
|
|
908
|
+
#define MY_CONFRES_CNT 4
|
|
906
909
|
char *topics[MY_CONFRES_CNT];
|
|
907
910
|
rd_kafka_ConfigResource_t *configs[MY_CONFRES_CNT];
|
|
908
911
|
rd_kafka_AdminOptions_t *options;
|
|
@@ -935,6 +938,7 @@ static void do_test_IncrementalAlterConfigs(rd_kafka_t *rk,
|
|
|
935
938
|
/** Test the test helper, for use in other tests. */
|
|
936
939
|
do {
|
|
937
940
|
const char *broker_id = tsprintf("%d", avail_brokers[0]);
|
|
941
|
+
const char *group_id = topics[0];
|
|
938
942
|
const char *confs_set_append[] = {
|
|
939
943
|
"compression.type", "SET", "lz4",
|
|
940
944
|
"cleanup.policy", "APPEND", "compact"};
|
|
@@ -947,6 +951,10 @@ static void do_test_IncrementalAlterConfigs(rd_kafka_t *rk,
|
|
|
947
951
|
const char *confs_delete_subtract_broker[] = {
|
|
948
952
|
"background.threads", "DELETE", "",
|
|
949
953
|
"log.cleanup.policy", "SUBTRACT", "compact"};
|
|
954
|
+
const char *confs_set_group[] = {"consumer.session.timeout.ms",
|
|
955
|
+
"SET", "50000"};
|
|
956
|
+
const char *confs_delete_group[] = {
|
|
957
|
+
"consumer.session.timeout.ms", "DELETE", ""};
|
|
950
958
|
|
|
951
959
|
TEST_SAY("Testing test helper with SET and APPEND\n");
|
|
952
960
|
test_IncrementalAlterConfigs_simple(rk, RD_KAFKA_RESOURCE_TOPIC,
|
|
@@ -969,6 +977,16 @@ static void do_test_IncrementalAlterConfigs(rd_kafka_t *rk,
|
|
|
969
977
|
test_IncrementalAlterConfigs_simple(
|
|
970
978
|
rk, RD_KAFKA_RESOURCE_BROKER, broker_id,
|
|
971
979
|
confs_delete_subtract_broker, 2);
|
|
980
|
+
TEST_SAY(
|
|
981
|
+
"Testing test helper with SET with GROUP resource type\n");
|
|
982
|
+
test_IncrementalAlterConfigs_simple(
|
|
983
|
+
rk, RD_KAFKA_RESOURCE_GROUP, group_id, confs_set_group, 1);
|
|
984
|
+
TEST_SAY(
|
|
985
|
+
"Testing test helper with DELETE with GROUP resource "
|
|
986
|
+
"type\n");
|
|
987
|
+
test_IncrementalAlterConfigs_simple(rk, RD_KAFKA_RESOURCE_GROUP,
|
|
988
|
+
group_id,
|
|
989
|
+
confs_delete_group, 1);
|
|
972
990
|
TEST_SAY("End testing test helper\n");
|
|
973
991
|
} while (0);
|
|
974
992
|
|
|
@@ -1025,8 +1043,8 @@ static void do_test_IncrementalAlterConfigs(rd_kafka_t *rk,
|
|
|
1025
1043
|
TEST_ASSERT(!error, "%s", rd_kafka_error_string(error));
|
|
1026
1044
|
|
|
1027
1045
|
error = rd_kafka_ConfigResource_add_incremental_config(
|
|
1028
|
-
configs[ci], "
|
|
1029
|
-
RD_KAFKA_ALTER_CONFIG_OP_TYPE_SET, "
|
|
1046
|
+
configs[ci], "max.compaction.lag.ms",
|
|
1047
|
+
RD_KAFKA_ALTER_CONFIG_OP_TYPE_SET, "3600000");
|
|
1030
1048
|
TEST_ASSERT(!error, "%s", rd_kafka_error_string(error));
|
|
1031
1049
|
|
|
1032
1050
|
if (test_broker_version >= TEST_BRKVER(2, 7, 0, 0))
|
|
@@ -1035,6 +1053,23 @@ static void do_test_IncrementalAlterConfigs(rd_kafka_t *rk,
|
|
|
1035
1053
|
exp_err[ci] = RD_KAFKA_RESP_ERR_UNKNOWN;
|
|
1036
1054
|
ci++;
|
|
1037
1055
|
|
|
1056
|
+
/**
|
|
1057
|
+
* ConfigResource #3: valid group config
|
|
1058
|
+
*/
|
|
1059
|
+
configs[ci] =
|
|
1060
|
+
rd_kafka_ConfigResource_new(RD_KAFKA_RESOURCE_GROUP, "my-group");
|
|
1061
|
+
|
|
1062
|
+
error = rd_kafka_ConfigResource_add_incremental_config(
|
|
1063
|
+
configs[ci], "consumer.session.timeout.ms",
|
|
1064
|
+
RD_KAFKA_ALTER_CONFIG_OP_TYPE_SET, "50000");
|
|
1065
|
+
TEST_ASSERT(!error, "%s", rd_kafka_error_string(error));
|
|
1066
|
+
if (group_configs_supported()) {
|
|
1067
|
+
exp_err[ci] = RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
1068
|
+
} else {
|
|
1069
|
+
exp_err[ci] = RD_KAFKA_RESP_ERR_INVALID_REQUEST;
|
|
1070
|
+
}
|
|
1071
|
+
ci++;
|
|
1072
|
+
|
|
1038
1073
|
/*
|
|
1039
1074
|
* Timeout options
|
|
1040
1075
|
*/
|
|
@@ -1334,6 +1369,148 @@ retry_describe:
|
|
|
1334
1369
|
SUB_TEST_PASS();
|
|
1335
1370
|
}
|
|
1336
1371
|
|
|
1372
|
+
/**
|
|
1373
|
+
* @brief Test DescribeConfigs for groups
|
|
1374
|
+
*/
|
|
1375
|
+
static void do_test_DescribeConfigs_groups(rd_kafka_t *rk,
|
|
1376
|
+
rd_kafka_queue_t *rkqu) {
|
|
1377
|
+
#define MY_CONFRES_CNT 1
|
|
1378
|
+
rd_kafka_ConfigResource_t *configs[MY_CONFRES_CNT];
|
|
1379
|
+
rd_kafka_AdminOptions_t *options;
|
|
1380
|
+
rd_kafka_resp_err_t exp_err[MY_CONFRES_CNT];
|
|
1381
|
+
rd_kafka_event_t *rkev;
|
|
1382
|
+
rd_kafka_resp_err_t err;
|
|
1383
|
+
const rd_kafka_DescribeConfigs_result_t *res;
|
|
1384
|
+
const rd_kafka_ConfigResource_t **rconfigs;
|
|
1385
|
+
char *group;
|
|
1386
|
+
size_t rconfig_cnt;
|
|
1387
|
+
char errstr[128];
|
|
1388
|
+
const char *errstr2;
|
|
1389
|
+
int ci = 0;
|
|
1390
|
+
int i;
|
|
1391
|
+
int fails = 0;
|
|
1392
|
+
|
|
1393
|
+
SUB_TEST_QUICK();
|
|
1394
|
+
|
|
1395
|
+
group = rd_strdup(test_mk_topic_name(__FUNCTION__, 1));
|
|
1396
|
+
|
|
1397
|
+
/*
|
|
1398
|
+
* ConfigResource #0: group config, for a non-existent group.
|
|
1399
|
+
*/
|
|
1400
|
+
configs[ci] =
|
|
1401
|
+
rd_kafka_ConfigResource_new(RD_KAFKA_RESOURCE_GROUP, group);
|
|
1402
|
+
if (group_configs_supported()) {
|
|
1403
|
+
exp_err[ci] = RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
1404
|
+
} else {
|
|
1405
|
+
exp_err[ci] = RD_KAFKA_RESP_ERR_INVALID_REQUEST;
|
|
1406
|
+
}
|
|
1407
|
+
ci++;
|
|
1408
|
+
|
|
1409
|
+
/*
|
|
1410
|
+
* Timeout options
|
|
1411
|
+
*/
|
|
1412
|
+
options = rd_kafka_AdminOptions_new(rk, RD_KAFKA_ADMIN_OP_ANY);
|
|
1413
|
+
err = rd_kafka_AdminOptions_set_request_timeout(options, 10000, errstr,
|
|
1414
|
+
sizeof(errstr));
|
|
1415
|
+
TEST_ASSERT(!err, "%s", errstr);
|
|
1416
|
+
|
|
1417
|
+
/*
|
|
1418
|
+
* Fire off request
|
|
1419
|
+
*/
|
|
1420
|
+
rd_kafka_DescribeConfigs(rk, configs, ci, options, rkqu);
|
|
1421
|
+
|
|
1422
|
+
/*
|
|
1423
|
+
* Wait for result
|
|
1424
|
+
*/
|
|
1425
|
+
rkev = test_wait_admin_result(
|
|
1426
|
+
rkqu, RD_KAFKA_EVENT_DESCRIBECONFIGS_RESULT, 10000 + 1000);
|
|
1427
|
+
|
|
1428
|
+
/*
|
|
1429
|
+
* Extract result
|
|
1430
|
+
*/
|
|
1431
|
+
res = rd_kafka_event_DescribeConfigs_result(rkev);
|
|
1432
|
+
TEST_ASSERT(res, "Expected DescribeConfigs result, not %s",
|
|
1433
|
+
rd_kafka_event_name(rkev));
|
|
1434
|
+
|
|
1435
|
+
err = rd_kafka_event_error(rkev);
|
|
1436
|
+
errstr2 = rd_kafka_event_error_string(rkev);
|
|
1437
|
+
TEST_ASSERT(!err, "Expected success, not %s: %s",
|
|
1438
|
+
rd_kafka_err2name(err), errstr2);
|
|
1439
|
+
|
|
1440
|
+
rconfigs = rd_kafka_DescribeConfigs_result_resources(res, &rconfig_cnt);
|
|
1441
|
+
TEST_ASSERT((int)rconfig_cnt == ci,
|
|
1442
|
+
"Expected %d result resources, got %" PRIusz "\n", ci,
|
|
1443
|
+
rconfig_cnt);
|
|
1444
|
+
|
|
1445
|
+
/*
|
|
1446
|
+
* Verify status per resource
|
|
1447
|
+
*/
|
|
1448
|
+
for (i = 0; i < (int)rconfig_cnt; i++) {
|
|
1449
|
+
const rd_kafka_ConfigEntry_t **entries;
|
|
1450
|
+
size_t entry_cnt;
|
|
1451
|
+
|
|
1452
|
+
err = rd_kafka_ConfigResource_error(rconfigs[i]);
|
|
1453
|
+
errstr2 = rd_kafka_ConfigResource_error_string(rconfigs[i]);
|
|
1454
|
+
|
|
1455
|
+
entries =
|
|
1456
|
+
rd_kafka_ConfigResource_configs(rconfigs[i], &entry_cnt);
|
|
1457
|
+
|
|
1458
|
+
TEST_SAY(
|
|
1459
|
+
"ConfigResource #%d: type %s (%d), \"%s\": "
|
|
1460
|
+
"%" PRIusz " ConfigEntries, error %s (%s)\n",
|
|
1461
|
+
i,
|
|
1462
|
+
rd_kafka_ResourceType_name(
|
|
1463
|
+
rd_kafka_ConfigResource_type(rconfigs[i])),
|
|
1464
|
+
rd_kafka_ConfigResource_type(rconfigs[i]),
|
|
1465
|
+
rd_kafka_ConfigResource_name(rconfigs[i]), entry_cnt,
|
|
1466
|
+
rd_kafka_err2name(err), errstr2 ? errstr2 : "");
|
|
1467
|
+
|
|
1468
|
+
test_print_ConfigEntry_array(entries, entry_cnt, 1);
|
|
1469
|
+
|
|
1470
|
+
if (rd_kafka_ConfigResource_type(rconfigs[i]) !=
|
|
1471
|
+
rd_kafka_ConfigResource_type(configs[i]) ||
|
|
1472
|
+
strcmp(rd_kafka_ConfigResource_name(rconfigs[i]),
|
|
1473
|
+
rd_kafka_ConfigResource_name(configs[i]))) {
|
|
1474
|
+
TEST_FAIL_LATER(
|
|
1475
|
+
"ConfigResource #%d: "
|
|
1476
|
+
"expected type %s name %s, "
|
|
1477
|
+
"got type %s name %s",
|
|
1478
|
+
i,
|
|
1479
|
+
rd_kafka_ResourceType_name(
|
|
1480
|
+
rd_kafka_ConfigResource_type(configs[i])),
|
|
1481
|
+
rd_kafka_ConfigResource_name(configs[i]),
|
|
1482
|
+
rd_kafka_ResourceType_name(
|
|
1483
|
+
rd_kafka_ConfigResource_type(rconfigs[i])),
|
|
1484
|
+
rd_kafka_ConfigResource_name(rconfigs[i]));
|
|
1485
|
+
fails++;
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
if (err != exp_err[i]) {
|
|
1489
|
+
TEST_FAIL_LATER(
|
|
1490
|
+
"ConfigResource #%d: "
|
|
1491
|
+
"expected %s (%d), got %s (%s)",
|
|
1492
|
+
i, rd_kafka_err2name(exp_err[i]), exp_err[i],
|
|
1493
|
+
rd_kafka_err2name(err), errstr2 ? errstr2 : "");
|
|
1494
|
+
fails++;
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
TEST_ASSERT(!fails, "See %d previous failure(s)", fails);
|
|
1499
|
+
|
|
1500
|
+
rd_kafka_event_destroy(rkev);
|
|
1501
|
+
|
|
1502
|
+
rd_kafka_ConfigResource_destroy_array(configs, ci);
|
|
1503
|
+
|
|
1504
|
+
rd_kafka_AdminOptions_destroy(options);
|
|
1505
|
+
|
|
1506
|
+
rd_free(group);
|
|
1507
|
+
|
|
1508
|
+
TEST_LATER_CHECK();
|
|
1509
|
+
#undef MY_CONFRES_CNT
|
|
1510
|
+
|
|
1511
|
+
SUB_TEST_PASS();
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1337
1514
|
/**
|
|
1338
1515
|
* @brief Test CreateAcls
|
|
1339
1516
|
*/
|
|
@@ -1515,6 +1692,9 @@ do_test_DescribeAcls(rd_kafka_t *rk, rd_kafka_queue_t *useq, int version) {
|
|
|
1515
1692
|
create_err =
|
|
1516
1693
|
test_CreateAcls_simple(rk, NULL, acl_bindings_create, 2, NULL);
|
|
1517
1694
|
|
|
1695
|
+
/* Wait for ACL propagation. */
|
|
1696
|
+
rd_sleep(tmout_multip(2));
|
|
1697
|
+
|
|
1518
1698
|
TEST_ASSERT(!create_err, "create error: %s",
|
|
1519
1699
|
rd_kafka_err2str(create_err));
|
|
1520
1700
|
|
|
@@ -1927,6 +2107,9 @@ do_test_DeleteAcls(rd_kafka_t *rk, rd_kafka_queue_t *useq, int version) {
|
|
|
1927
2107
|
create_err =
|
|
1928
2108
|
test_CreateAcls_simple(rk, NULL, acl_bindings_create, 3, NULL);
|
|
1929
2109
|
|
|
2110
|
+
/* Wait for ACL propagation. */
|
|
2111
|
+
rd_sleep(tmout_multip(2));
|
|
2112
|
+
|
|
1930
2113
|
TEST_ASSERT(!create_err, "create error: %s",
|
|
1931
2114
|
rd_kafka_err2str(create_err));
|
|
1932
2115
|
|
|
@@ -1946,6 +2129,9 @@ do_test_DeleteAcls(rd_kafka_t *rk, rd_kafka_queue_t *useq, int version) {
|
|
|
1946
2129
|
q);
|
|
1947
2130
|
TIMING_ASSERT_LATER(&timing, 0, 50);
|
|
1948
2131
|
|
|
2132
|
+
/* Wait for ACL propagation. */
|
|
2133
|
+
rd_sleep(tmout_multip(2));
|
|
2134
|
+
|
|
1949
2135
|
/*
|
|
1950
2136
|
* Wait for result
|
|
1951
2137
|
*/
|
|
@@ -2062,6 +2248,9 @@ do_test_DeleteAcls(rd_kafka_t *rk, rd_kafka_queue_t *useq, int version) {
|
|
|
2062
2248
|
q);
|
|
2063
2249
|
TIMING_ASSERT_LATER(&timing, 0, 50);
|
|
2064
2250
|
|
|
2251
|
+
/* Wait for ACL propagation. */
|
|
2252
|
+
rd_sleep(1);
|
|
2253
|
+
|
|
2065
2254
|
/*
|
|
2066
2255
|
* Wait for result
|
|
2067
2256
|
*/
|
|
@@ -2634,135 +2823,63 @@ static void do_test_DeleteGroups(const char *what,
|
|
|
2634
2823
|
}
|
|
2635
2824
|
|
|
2636
2825
|
/**
|
|
2637
|
-
* @brief
|
|
2638
|
-
*
|
|
2826
|
+
* @brief Helper for do_test_ListConsumerGroups, makes ListConsumerGroups call
|
|
2827
|
+
* and checks returned group count equals to \p exp_found.
|
|
2828
|
+
*
|
|
2829
|
+
* Parameter \p exp_type, if not UNKNOWN, needs to match
|
|
2830
|
+
* returned groups type.
|
|
2831
|
+
*
|
|
2832
|
+
* If \p match_states is true, then the state of the
|
|
2833
|
+
* returned groups is checked and expected to be `EMPTY`.
|
|
2639
2834
|
*/
|
|
2640
|
-
static void
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
const int partitions_cnt = 1;
|
|
2657
|
-
const int msgs_cnt = 100;
|
|
2658
|
-
size_t i, found;
|
|
2659
|
-
char *topic;
|
|
2660
|
-
rd_kafka_metadata_topic_t exp_mdtopic = {0};
|
|
2661
|
-
int64_t testid = test_id_generate();
|
|
2662
|
-
test_timing_t timing;
|
|
2663
|
-
rd_kafka_resp_err_t exp_err = RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
2664
|
-
const rd_kafka_ListConsumerGroups_result_t *res;
|
|
2665
|
-
const rd_kafka_ConsumerGroupListing_t **groups;
|
|
2666
|
-
rd_bool_t has_match_states =
|
|
2667
|
-
test_broker_version >= TEST_BRKVER(2, 7, 0, 0);
|
|
2668
|
-
|
|
2669
|
-
SUB_TEST_QUICK(
|
|
2670
|
-
"%s ListConsumerGroups with %s, request_timeout %d"
|
|
2671
|
-
", match_states %s",
|
|
2672
|
-
rd_kafka_name(rk), what, request_timeout, RD_STR_ToF(match_states));
|
|
2673
|
-
|
|
2674
|
-
q = useq ? useq : rd_kafka_queue_new(rk);
|
|
2675
|
-
|
|
2676
|
-
if (request_timeout != -1) {
|
|
2677
|
-
options = rd_kafka_AdminOptions_new(
|
|
2678
|
-
rk, RD_KAFKA_ADMIN_OP_LISTCONSUMERGROUPS);
|
|
2679
|
-
|
|
2680
|
-
if (match_states) {
|
|
2681
|
-
rd_kafka_consumer_group_state_t empty =
|
|
2682
|
-
RD_KAFKA_CONSUMER_GROUP_STATE_EMPTY;
|
|
2683
|
-
|
|
2684
|
-
TEST_CALL_ERROR__(
|
|
2685
|
-
rd_kafka_AdminOptions_set_match_consumer_group_states(
|
|
2686
|
-
options, &empty, 1));
|
|
2687
|
-
}
|
|
2688
|
-
|
|
2689
|
-
TEST_CALL_ERR__(rd_kafka_AdminOptions_set_request_timeout(
|
|
2690
|
-
options, request_timeout, errstr, sizeof(errstr)));
|
|
2691
|
-
}
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
topic = rd_strdup(test_mk_topic_name(__FUNCTION__, 1));
|
|
2695
|
-
exp_mdtopic.topic = topic;
|
|
2696
|
-
|
|
2697
|
-
/* Create the topics first. */
|
|
2698
|
-
test_CreateTopics_simple(rk, NULL, &topic, 1, partitions_cnt, NULL);
|
|
2699
|
-
|
|
2700
|
-
/* Verify that topics are reported by metadata */
|
|
2701
|
-
test_wait_metadata_update(rk, &exp_mdtopic, 1, NULL, 0, 15 * 1000);
|
|
2702
|
-
|
|
2703
|
-
/* Produce 100 msgs */
|
|
2704
|
-
test_produce_msgs_easy(topic, testid, 0, msgs_cnt);
|
|
2705
|
-
|
|
2706
|
-
for (i = 0; i < TEST_LIST_CONSUMER_GROUPS_CNT; i++) {
|
|
2707
|
-
char *group = rd_strdup(test_mk_topic_name(__FUNCTION__, 1));
|
|
2708
|
-
test_consume_msgs_easy(group, topic, testid, -1, msgs_cnt,
|
|
2709
|
-
NULL);
|
|
2710
|
-
list_consumer_groups[i] = group;
|
|
2711
|
-
}
|
|
2835
|
+
static void
|
|
2836
|
+
test_ListConsumerGroups_helper(rd_kafka_t *rk,
|
|
2837
|
+
rd_kafka_AdminOptions_t *option,
|
|
2838
|
+
rd_kafka_queue_t *q,
|
|
2839
|
+
char **list_consumer_groups,
|
|
2840
|
+
size_t list_consumer_groups_cnt,
|
|
2841
|
+
size_t exp_found,
|
|
2842
|
+
rd_kafka_consumer_group_type_t exp_type,
|
|
2843
|
+
rd_bool_t match_states) {
|
|
2844
|
+
rd_kafka_event_t *rkev = NULL;
|
|
2845
|
+
const rd_kafka_ListConsumerGroups_result_t *result = NULL;
|
|
2846
|
+
size_t group_cnt;
|
|
2847
|
+
size_t error_cnt;
|
|
2848
|
+
size_t found;
|
|
2849
|
+
size_t i, j;
|
|
2850
|
+
const rd_kafka_ConsumerGroupListing_t **groups = NULL;
|
|
2712
2851
|
|
|
2713
|
-
TIMING_START(&timing, "ListConsumerGroups");
|
|
2714
2852
|
TEST_SAY("Call ListConsumerGroups\n");
|
|
2715
|
-
rd_kafka_ListConsumerGroups(rk,
|
|
2716
|
-
TIMING_ASSERT_LATER(&timing, 0, 50);
|
|
2717
|
-
|
|
2718
|
-
TIMING_START(&timing, "ListConsumerGroups.queue_poll");
|
|
2719
|
-
|
|
2853
|
+
rd_kafka_ListConsumerGroups(rk, option, q);
|
|
2720
2854
|
/* Poll result queue for ListConsumerGroups result.
|
|
2721
2855
|
* Print but otherwise ignore other event types
|
|
2722
2856
|
* (typically generic Error events). */
|
|
2723
2857
|
while (1) {
|
|
2724
2858
|
rkev = rd_kafka_queue_poll(q, tmout_multip(20 * 1000));
|
|
2725
|
-
TEST_SAY("ListConsumerGroups: got %s in %.3fms\n",
|
|
2726
|
-
rd_kafka_event_name(rkev),
|
|
2727
|
-
TIMING_DURATION(&timing) / 1000.0f);
|
|
2728
2859
|
if (rkev == NULL)
|
|
2729
2860
|
continue;
|
|
2861
|
+
|
|
2730
2862
|
if (rd_kafka_event_error(rkev))
|
|
2731
2863
|
TEST_SAY("%s: %s\n", rd_kafka_event_name(rkev),
|
|
2732
2864
|
rd_kafka_event_error_string(rkev));
|
|
2733
2865
|
|
|
2734
2866
|
if (rd_kafka_event_type(rkev) ==
|
|
2735
|
-
RD_KAFKA_EVENT_LISTCONSUMERGROUPS_RESULT)
|
|
2867
|
+
RD_KAFKA_EVENT_LISTCONSUMERGROUPS_RESULT)
|
|
2736
2868
|
break;
|
|
2737
|
-
}
|
|
2738
2869
|
|
|
2739
2870
|
rd_kafka_event_destroy(rkev);
|
|
2740
2871
|
}
|
|
2741
2872
|
/* Convert event to proper result */
|
|
2742
|
-
|
|
2743
|
-
TEST_ASSERT(
|
|
2873
|
+
result = rd_kafka_event_ListConsumerGroups_result(rkev);
|
|
2874
|
+
TEST_ASSERT(result, "expected ListConsumerGroups_result, got %s",
|
|
2744
2875
|
rd_kafka_event_name(rkev));
|
|
2745
2876
|
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
TEST_ASSERT(err == exp_err,
|
|
2750
|
-
"expected ListConsumerGroups to return %s, got %s (%s)",
|
|
2751
|
-
rd_kafka_err2str(exp_err), rd_kafka_err2str(err),
|
|
2752
|
-
err ? errstr2 : "n/a");
|
|
2753
|
-
|
|
2754
|
-
TEST_SAY("ListConsumerGroups: returned %s (%s)\n",
|
|
2755
|
-
rd_kafka_err2str(err), err ? errstr2 : "n/a");
|
|
2756
|
-
|
|
2757
|
-
groups = rd_kafka_ListConsumerGroups_result_valid(res, &valid_cnt);
|
|
2758
|
-
rd_kafka_ListConsumerGroups_result_errors(res, &error_cnt);
|
|
2877
|
+
if (rd_kafka_event_error(rkev))
|
|
2878
|
+
TEST_FAIL("ListConsumerGroups failed with %s",
|
|
2879
|
+
rd_kafka_event_error_string(rkev));
|
|
2759
2880
|
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
"expected ListConsumerGroups to return at least %" PRId32
|
|
2763
|
-
" valid groups,"
|
|
2764
|
-
" got %zu",
|
|
2765
|
-
TEST_LIST_CONSUMER_GROUPS_CNT, valid_cnt);
|
|
2881
|
+
groups = rd_kafka_ListConsumerGroups_result_valid(result, &group_cnt);
|
|
2882
|
+
rd_kafka_ListConsumerGroups_result_errors(result, &error_cnt);
|
|
2766
2883
|
|
|
2767
2884
|
TEST_ASSERT(error_cnt == 0,
|
|
2768
2885
|
"expected ListConsumerGroups to return 0 errors,"
|
|
@@ -2770,23 +2887,32 @@ static void do_test_ListConsumerGroups(const char *what,
|
|
|
2770
2887
|
error_cnt);
|
|
2771
2888
|
|
|
2772
2889
|
found = 0;
|
|
2773
|
-
for (i = 0; i <
|
|
2774
|
-
|
|
2775
|
-
const
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
is_simple_consumer_group =
|
|
2890
|
+
for (i = 0; i < group_cnt; i++) {
|
|
2891
|
+
const rd_kafka_ConsumerGroupListing_t *group = groups[i];
|
|
2892
|
+
const char *group_id =
|
|
2893
|
+
rd_kafka_ConsumerGroupListing_group_id(group);
|
|
2894
|
+
int is_simple_consumer_group =
|
|
2779
2895
|
rd_kafka_ConsumerGroupListing_is_simple_consumer_group(
|
|
2780
2896
|
group);
|
|
2781
|
-
state =
|
|
2782
|
-
|
|
2897
|
+
rd_kafka_consumer_group_state_t state =
|
|
2898
|
+
rd_kafka_ConsumerGroupListing_state(group);
|
|
2899
|
+
rd_kafka_consumer_group_type_t type =
|
|
2900
|
+
rd_kafka_ConsumerGroupListing_type(group);
|
|
2901
|
+
for (j = 0; j < list_consumer_groups_cnt; j++) {
|
|
2783
2902
|
if (!strcmp(list_consumer_groups[j], group_id)) {
|
|
2784
2903
|
found++;
|
|
2785
2904
|
TEST_ASSERT(!is_simple_consumer_group,
|
|
2786
2905
|
"expected a normal group,"
|
|
2787
2906
|
" got a simple group");
|
|
2907
|
+
if (exp_type !=
|
|
2908
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_UNKNOWN) {
|
|
2909
|
+
TEST_ASSERT(
|
|
2910
|
+
type == exp_type,
|
|
2911
|
+
"Expected the Consumer Group Type "
|
|
2912
|
+
"to be set by the Broker.");
|
|
2913
|
+
}
|
|
2788
2914
|
|
|
2789
|
-
if (!
|
|
2915
|
+
if (!match_states)
|
|
2790
2916
|
break;
|
|
2791
2917
|
|
|
2792
2918
|
TEST_ASSERT(
|
|
@@ -2799,13 +2925,137 @@ static void do_test_ListConsumerGroups(const char *what,
|
|
|
2799
2925
|
}
|
|
2800
2926
|
}
|
|
2801
2927
|
}
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
"
|
|
2928
|
+
|
|
2929
|
+
TEST_ASSERT(found == exp_found,
|
|
2930
|
+
"expected to find %" PRIusz
|
|
2931
|
+
" consumer groups,"
|
|
2805
2932
|
" got %" PRIusz,
|
|
2806
|
-
|
|
2933
|
+
exp_found, found);
|
|
2807
2934
|
|
|
2808
2935
|
rd_kafka_event_destroy(rkev);
|
|
2936
|
+
}
|
|
2937
|
+
|
|
2938
|
+
/**
|
|
2939
|
+
* @brief Test list groups, creating consumers for a set of groups,
|
|
2940
|
+
* listing and deleting them at the end.
|
|
2941
|
+
*/
|
|
2942
|
+
static void do_test_ListConsumerGroups(const char *what,
|
|
2943
|
+
rd_kafka_t *rk,
|
|
2944
|
+
rd_kafka_queue_t *useq,
|
|
2945
|
+
int request_timeout,
|
|
2946
|
+
rd_bool_t match_states,
|
|
2947
|
+
rd_bool_t match_types) {
|
|
2948
|
+
#define TEST_LIST_CONSUMER_GROUPS_CNT 4
|
|
2949
|
+
rd_kafka_queue_t *q;
|
|
2950
|
+
rd_kafka_AdminOptions_t *options;
|
|
2951
|
+
char errstr[512];
|
|
2952
|
+
char *list_consumer_groups[TEST_LIST_CONSUMER_GROUPS_CNT];
|
|
2953
|
+
const int partitions_cnt = 1;
|
|
2954
|
+
const int msgs_cnt = 100;
|
|
2955
|
+
char *topic;
|
|
2956
|
+
size_t i;
|
|
2957
|
+
rd_kafka_metadata_topic_t exp_mdtopic = {0};
|
|
2958
|
+
int64_t testid = test_id_generate();
|
|
2959
|
+
rd_bool_t has_match_states =
|
|
2960
|
+
test_broker_version >= TEST_BRKVER(2, 7, 0, 0);
|
|
2961
|
+
rd_bool_t has_match_types =
|
|
2962
|
+
test_broker_version >= TEST_BRKVER(3, 8, 0, 0);
|
|
2963
|
+
|
|
2964
|
+
rd_kafka_consumer_group_type_t group_protocol_in_use =
|
|
2965
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_UNKNOWN;
|
|
2966
|
+
rd_kafka_consumer_group_type_t group_protocol_not_in_use =
|
|
2967
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_UNKNOWN;
|
|
2968
|
+
|
|
2969
|
+
SUB_TEST_QUICK(
|
|
2970
|
+
"%s ListConsumerGroups with %s, request_timeout %d"
|
|
2971
|
+
", match_states %s, match_types %s",
|
|
2972
|
+
rd_kafka_name(rk), what, request_timeout, RD_STR_ToF(match_states),
|
|
2973
|
+
RD_STR_ToF(match_types));
|
|
2974
|
+
|
|
2975
|
+
/* match_states would not work if broker version is below 2.7.0 */
|
|
2976
|
+
if (!has_match_states)
|
|
2977
|
+
match_states = rd_false;
|
|
2978
|
+
|
|
2979
|
+
/* match_types would not work if broker version is below 3.8.0 */
|
|
2980
|
+
if (!has_match_types)
|
|
2981
|
+
match_types = rd_false;
|
|
2982
|
+
|
|
2983
|
+
q = useq ? useq : rd_kafka_queue_new(rk);
|
|
2984
|
+
|
|
2985
|
+
options =
|
|
2986
|
+
rd_kafka_AdminOptions_new(rk, RD_KAFKA_ADMIN_OP_LISTCONSUMERGROUPS);
|
|
2987
|
+
|
|
2988
|
+
if (request_timeout != -1) {
|
|
2989
|
+
TEST_CALL_ERR__(rd_kafka_AdminOptions_set_request_timeout(
|
|
2990
|
+
options, request_timeout, errstr, sizeof(errstr)));
|
|
2991
|
+
}
|
|
2992
|
+
|
|
2993
|
+
if (match_states) {
|
|
2994
|
+
rd_kafka_consumer_group_state_t empty =
|
|
2995
|
+
RD_KAFKA_CONSUMER_GROUP_STATE_EMPTY;
|
|
2996
|
+
|
|
2997
|
+
TEST_CALL_ERROR__(
|
|
2998
|
+
rd_kafka_AdminOptions_set_match_consumer_group_states(
|
|
2999
|
+
options, &empty, 1));
|
|
3000
|
+
}
|
|
3001
|
+
|
|
3002
|
+
if (match_types) {
|
|
3003
|
+
if (test_consumer_group_protocol_classic()) {
|
|
3004
|
+
group_protocol_in_use =
|
|
3005
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_CLASSIC;
|
|
3006
|
+
group_protocol_not_in_use =
|
|
3007
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_CONSUMER;
|
|
3008
|
+
} else {
|
|
3009
|
+
group_protocol_in_use =
|
|
3010
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_CONSUMER;
|
|
3011
|
+
group_protocol_not_in_use =
|
|
3012
|
+
RD_KAFKA_CONSUMER_GROUP_TYPE_CLASSIC;
|
|
3013
|
+
}
|
|
3014
|
+
TEST_CALL_ERROR__(
|
|
3015
|
+
rd_kafka_AdminOptions_set_match_consumer_group_types(
|
|
3016
|
+
options, &group_protocol_in_use, 1));
|
|
3017
|
+
}
|
|
3018
|
+
|
|
3019
|
+
topic = rd_strdup(test_mk_topic_name(__FUNCTION__, 1));
|
|
3020
|
+
exp_mdtopic.topic = topic;
|
|
3021
|
+
|
|
3022
|
+
/* Create the topics first. */
|
|
3023
|
+
test_CreateTopics_simple(rk, NULL, &topic, 1, partitions_cnt, NULL);
|
|
3024
|
+
|
|
3025
|
+
/* Verify that topics are reported by metadata */
|
|
3026
|
+
test_wait_metadata_update(rk, &exp_mdtopic, 1, NULL, 0, 15 * 1000);
|
|
3027
|
+
|
|
3028
|
+
/* Produce 100 msgs */
|
|
3029
|
+
test_produce_msgs_easy(topic, testid, 0, msgs_cnt);
|
|
3030
|
+
|
|
3031
|
+
for (i = 0; i < TEST_LIST_CONSUMER_GROUPS_CNT; i++) {
|
|
3032
|
+
char *group = rd_strdup(test_mk_topic_name(__FUNCTION__, 1));
|
|
3033
|
+
test_consume_msgs_easy(group, topic, testid, -1, msgs_cnt,
|
|
3034
|
+
NULL);
|
|
3035
|
+
list_consumer_groups[i] = group;
|
|
3036
|
+
}
|
|
3037
|
+
|
|
3038
|
+
test_ListConsumerGroups_helper(rk, options, q, list_consumer_groups,
|
|
3039
|
+
TEST_LIST_CONSUMER_GROUPS_CNT,
|
|
3040
|
+
TEST_LIST_CONSUMER_GROUPS_CNT,
|
|
3041
|
+
group_protocol_in_use, has_match_states);
|
|
3042
|
+
|
|
3043
|
+
if (match_types) {
|
|
3044
|
+
/* Simply test with the option of protocol not in use */
|
|
3045
|
+
rd_kafka_AdminOptions_t *option_group_protocol_not_in_use =
|
|
3046
|
+
rd_kafka_AdminOptions_new(
|
|
3047
|
+
rk, RD_KAFKA_ADMIN_OP_LISTCONSUMERGROUPS);
|
|
3048
|
+
rd_kafka_AdminOptions_set_match_consumer_group_types(
|
|
3049
|
+
option_group_protocol_not_in_use,
|
|
3050
|
+
&group_protocol_not_in_use, 1);
|
|
3051
|
+
|
|
3052
|
+
test_ListConsumerGroups_helper(
|
|
3053
|
+
rk, option_group_protocol_not_in_use, q,
|
|
3054
|
+
list_consumer_groups, TEST_LIST_CONSUMER_GROUPS_CNT, 0,
|
|
3055
|
+
group_protocol_not_in_use, rd_false);
|
|
3056
|
+
|
|
3057
|
+
rd_kafka_AdminOptions_destroy(option_group_protocol_not_in_use);
|
|
3058
|
+
}
|
|
2809
3059
|
|
|
2810
3060
|
test_DeleteGroups_simple(rk, NULL, (char **)list_consumer_groups,
|
|
2811
3061
|
TEST_LIST_CONSUMER_GROUPS_CNT, NULL);
|
|
@@ -2816,8 +3066,7 @@ static void do_test_ListConsumerGroups(const char *what,
|
|
|
2816
3066
|
|
|
2817
3067
|
rd_free(topic);
|
|
2818
3068
|
|
|
2819
|
-
|
|
2820
|
-
rd_kafka_AdminOptions_destroy(options);
|
|
3069
|
+
rd_kafka_AdminOptions_destroy(options);
|
|
2821
3070
|
|
|
2822
3071
|
if (!useq)
|
|
2823
3072
|
rd_kafka_queue_destroy(q);
|
|
@@ -3363,6 +3612,9 @@ static void do_test_DescribeTopics(const char *what,
|
|
|
3363
3612
|
test_CreateAcls_simple(rk, NULL, acl_bindings, 1, NULL));
|
|
3364
3613
|
rd_kafka_AclBinding_destroy(acl_bindings[0]);
|
|
3365
3614
|
|
|
3615
|
+
/* Wait for ACL propagation. */
|
|
3616
|
+
rd_sleep(tmout_multip(2));
|
|
3617
|
+
|
|
3366
3618
|
/* Call DescribeTopics. */
|
|
3367
3619
|
options =
|
|
3368
3620
|
rd_kafka_AdminOptions_new(rk, RD_KAFKA_ADMIN_OP_DESCRIBETOPICS);
|
|
@@ -3422,19 +3674,21 @@ static void do_test_DescribeTopics(const char *what,
|
|
|
3422
3674
|
rd_kafka_event_destroy(rkev);
|
|
3423
3675
|
|
|
3424
3676
|
/*
|
|
3425
|
-
*
|
|
3426
|
-
* of the created topic
|
|
3427
|
-
* and describe.
|
|
3677
|
+
* Remove create ACLs to allow deletion
|
|
3678
|
+
* of the created topic.
|
|
3428
3679
|
*/
|
|
3429
3680
|
acl_bindings[0] = rd_kafka_AclBinding_new(
|
|
3430
3681
|
RD_KAFKA_RESOURCE_TOPIC, topic_names[0],
|
|
3431
3682
|
RD_KAFKA_RESOURCE_PATTERN_LITERAL, principal, "*",
|
|
3432
|
-
|
|
3683
|
+
RD_KAFKA_ACL_OPERATION_READ, RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW,
|
|
3433
3684
|
NULL, 0);
|
|
3434
3685
|
TEST_CALL_ERR__(
|
|
3435
|
-
|
|
3686
|
+
test_DeleteAcls_simple(rk, NULL, acl_bindings, 1, NULL));
|
|
3436
3687
|
rd_kafka_AclBinding_destroy(acl_bindings[0]);
|
|
3437
3688
|
|
|
3689
|
+
/* Wait for ACL propagation. */
|
|
3690
|
+
rd_sleep(tmout_multip(2));
|
|
3691
|
+
|
|
3438
3692
|
done:
|
|
3439
3693
|
test_DeleteTopics_simple(rk, NULL, topic_names, 1, NULL);
|
|
3440
3694
|
if (!rkqu)
|
|
@@ -3585,6 +3839,9 @@ static void do_test_DescribeCluster(const char *what,
|
|
|
3585
3839
|
test_CreateAcls_simple(rk, NULL, acl_bindings, 1, NULL);
|
|
3586
3840
|
rd_kafka_AclBinding_destroy(acl_bindings[0]);
|
|
3587
3841
|
|
|
3842
|
+
/* Wait for ACL propagation. */
|
|
3843
|
+
rd_sleep(tmout_multip(2));
|
|
3844
|
+
|
|
3588
3845
|
/* Call DescribeCluster. */
|
|
3589
3846
|
options =
|
|
3590
3847
|
rd_kafka_AdminOptions_new(rk, RD_KAFKA_ADMIN_OP_DESCRIBECLUSTER);
|
|
@@ -3646,6 +3903,9 @@ static void do_test_DescribeCluster(const char *what,
|
|
|
3646
3903
|
test_DeleteAcls_simple(rk, NULL, &acl_bindings_delete, 1, NULL);
|
|
3647
3904
|
rd_kafka_AclBinding_destroy(acl_bindings_delete);
|
|
3648
3905
|
|
|
3906
|
+
/* Wait for ACL propagation. */
|
|
3907
|
+
rd_sleep(tmout_multip(2));
|
|
3908
|
+
|
|
3649
3909
|
done:
|
|
3650
3910
|
TEST_LATER_CHECK();
|
|
3651
3911
|
|
|
@@ -3752,16 +4012,27 @@ do_test_DescribeConsumerGroups_with_authorized_ops(const char *what,
|
|
|
3752
4012
|
rd_kafka_error_string(error));
|
|
3753
4013
|
|
|
3754
4014
|
{
|
|
3755
|
-
const rd_kafka_AclOperation_t
|
|
4015
|
+
const rd_kafka_AclOperation_t expected_ak3[] = {
|
|
3756
4016
|
RD_KAFKA_ACL_OPERATION_DELETE,
|
|
3757
4017
|
RD_KAFKA_ACL_OPERATION_DESCRIBE,
|
|
3758
4018
|
RD_KAFKA_ACL_OPERATION_READ};
|
|
4019
|
+
const rd_kafka_AclOperation_t expected_ak4[] = {
|
|
4020
|
+
RD_KAFKA_ACL_OPERATION_DELETE,
|
|
4021
|
+
RD_KAFKA_ACL_OPERATION_DESCRIBE,
|
|
4022
|
+
RD_KAFKA_ACL_OPERATION_READ,
|
|
4023
|
+
RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS,
|
|
4024
|
+
RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS};
|
|
3759
4025
|
authorized_operations =
|
|
3760
4026
|
rd_kafka_ConsumerGroupDescription_authorized_operations(
|
|
3761
4027
|
results[0], &authorized_operations_cnt);
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
4028
|
+
if (test_broker_version < TEST_BRKVER(4, 0, 0, 0))
|
|
4029
|
+
test_match_authorized_operations(
|
|
4030
|
+
expected_ak3, 3, authorized_operations,
|
|
4031
|
+
authorized_operations_cnt);
|
|
4032
|
+
else
|
|
4033
|
+
test_match_authorized_operations(
|
|
4034
|
+
expected_ak4, 5, authorized_operations,
|
|
4035
|
+
authorized_operations_cnt);
|
|
3765
4036
|
}
|
|
3766
4037
|
|
|
3767
4038
|
rd_kafka_event_destroy(rkev);
|
|
@@ -3835,13 +4106,12 @@ do_test_DescribeConsumerGroups_with_authorized_ops(const char *what,
|
|
|
3835
4106
|
acl_bindings[0] = rd_kafka_AclBinding_new(
|
|
3836
4107
|
RD_KAFKA_RESOURCE_GROUP, group_id,
|
|
3837
4108
|
RD_KAFKA_RESOURCE_PATTERN_LITERAL, principal, "*",
|
|
3838
|
-
|
|
4109
|
+
RD_KAFKA_ACL_OPERATION_READ, RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW,
|
|
3839
4110
|
NULL, 0);
|
|
3840
|
-
|
|
4111
|
+
test_DeleteAcls_simple(rk, NULL, acl_bindings, 1, NULL);
|
|
3841
4112
|
rd_kafka_AclBinding_destroy(acl_bindings[0]);
|
|
3842
4113
|
|
|
3843
|
-
/*
|
|
3844
|
-
* propagate for a group.*/
|
|
4114
|
+
/* Wait for ACL propagation. */
|
|
3845
4115
|
rd_sleep(tmout_multip(2));
|
|
3846
4116
|
|
|
3847
4117
|
test_DeleteGroups_simple(rk, NULL, &group_id, 1, NULL);
|
|
@@ -3938,8 +4208,6 @@ static void do_test_DeleteConsumerGroupOffsets(const char *what,
|
|
|
3938
4208
|
test_wait_metadata_update(rk, exp_mdtopics, exp_mdtopic_cnt, NULL, 0,
|
|
3939
4209
|
15 * 1000);
|
|
3940
4210
|
|
|
3941
|
-
rd_sleep(1); /* Additional wait time for cluster propagation */
|
|
3942
|
-
|
|
3943
4211
|
consumer = test_create_consumer(groupid, NULL, NULL, NULL);
|
|
3944
4212
|
|
|
3945
4213
|
if (sub_consumer) {
|
|
@@ -4215,8 +4483,6 @@ static void do_test_AlterConsumerGroupOffsets(const char *what,
|
|
|
4215
4483
|
test_wait_metadata_update(rk, exp_mdtopics, exp_mdtopic_cnt,
|
|
4216
4484
|
NULL, 0, 15 * 1000);
|
|
4217
4485
|
|
|
4218
|
-
rd_sleep(1); /* Additional wait time for cluster propagation */
|
|
4219
|
-
|
|
4220
4486
|
consumer = test_create_consumer(group_id, NULL, NULL, NULL);
|
|
4221
4487
|
|
|
4222
4488
|
if (sub_consumer) {
|
|
@@ -4499,8 +4765,6 @@ static void do_test_ListConsumerGroupOffsets(const char *what,
|
|
|
4499
4765
|
test_wait_metadata_update(rk, exp_mdtopics, exp_mdtopic_cnt, NULL, 0,
|
|
4500
4766
|
15 * 1000);
|
|
4501
4767
|
|
|
4502
|
-
rd_sleep(1); /* Additional wait time for cluster propagation */
|
|
4503
|
-
|
|
4504
4768
|
consumer = test_create_consumer(group_id, NULL, NULL, NULL);
|
|
4505
4769
|
|
|
4506
4770
|
if (sub_consumer) {
|
|
@@ -4681,7 +4945,7 @@ static void do_test_UserScramCredentials(const char *what,
|
|
|
4681
4945
|
size_t password_size = 8;
|
|
4682
4946
|
rd_kafka_queue_t *queue;
|
|
4683
4947
|
const char *users[1];
|
|
4684
|
-
users[0] = "testuserforscram";
|
|
4948
|
+
users[0] = test_mk_topic_name("testuserforscram", 1);
|
|
4685
4949
|
|
|
4686
4950
|
if (null_bytes) {
|
|
4687
4951
|
salt[1] = '\0';
|
|
@@ -4801,6 +5065,9 @@ static void do_test_UserScramCredentials(const char *what,
|
|
|
4801
5065
|
rd_kafka_event_destroy(event);
|
|
4802
5066
|
#endif
|
|
4803
5067
|
|
|
5068
|
+
/* Wait for user propagation. */
|
|
5069
|
+
rd_sleep(tmout_multip(2));
|
|
5070
|
+
|
|
4804
5071
|
/* Credential should be retrieved */
|
|
4805
5072
|
options = rd_kafka_AdminOptions_new(
|
|
4806
5073
|
rk, RD_KAFKA_ADMIN_OP_DESCRIBEUSERSCRAMCREDENTIALS);
|
|
@@ -4913,6 +5180,9 @@ static void do_test_UserScramCredentials(const char *what,
|
|
|
4913
5180
|
final_checks:
|
|
4914
5181
|
#endif
|
|
4915
5182
|
|
|
5183
|
+
/* Wait for user propagation. */
|
|
5184
|
+
rd_sleep(tmout_multip(2));
|
|
5185
|
+
|
|
4916
5186
|
/* Credential doesn't exist anymore for this user */
|
|
4917
5187
|
|
|
4918
5188
|
options = rd_kafka_AdminOptions_new(
|
|
@@ -5013,6 +5283,8 @@ static void do_test_ListOffsets(const char *what,
|
|
|
5013
5283
|
|
|
5014
5284
|
test_CreateTopics_simple(rk, NULL, (char **)&topic, 1, 1, NULL);
|
|
5015
5285
|
|
|
5286
|
+
test_wait_topic_exists(rk, topic, 5000);
|
|
5287
|
+
|
|
5016
5288
|
p = test_create_producer();
|
|
5017
5289
|
for (i = 0; i < RD_ARRAY_SIZE(timestamps); i++) {
|
|
5018
5290
|
rd_kafka_producev(
|
|
@@ -5081,6 +5353,15 @@ static void do_test_ListOffsets(const char *what,
|
|
|
5081
5353
|
test_fixture.query);
|
|
5082
5354
|
continue;
|
|
5083
5355
|
}
|
|
5356
|
+
if (test_fixture.query == RD_KAFKA_OFFSET_SPEC_MAX_TIMESTAMP &&
|
|
5357
|
+
test_broker_version >= TEST_BRKVER(3, 7, 0, 0) &&
|
|
5358
|
+
test_broker_version < TEST_BRKVER(3, 8, 0, 0)) {
|
|
5359
|
+
/* 3.8.0 released fix for KAFKA-16310 */
|
|
5360
|
+
TEST_SAY(
|
|
5361
|
+
"Skipping offset MAX_TIMESTAMP,"
|
|
5362
|
+
" as there was a regression in this version\n");
|
|
5363
|
+
continue;
|
|
5364
|
+
}
|
|
5084
5365
|
|
|
5085
5366
|
TEST_SAY("Testing offset %" PRId64 "\n", test_fixture.query);
|
|
5086
5367
|
|
|
@@ -5171,7 +5452,9 @@ static void do_test_apis(rd_kafka_type_t cltype) {
|
|
|
5171
5452
|
mainq = rd_kafka_queue_get_main(rk);
|
|
5172
5453
|
|
|
5173
5454
|
/* Create topics */
|
|
5174
|
-
|
|
5455
|
+
/* FIXME: KRaft async CreateTopics is working differently than
|
|
5456
|
+
* wth Zookeeper
|
|
5457
|
+
* do_test_CreateTopics("temp queue, op timeout 0", rk, NULL, 0, 0); */
|
|
5175
5458
|
do_test_CreateTopics("temp queue, op timeout 15000", rk, NULL, 15000,
|
|
5176
5459
|
0);
|
|
5177
5460
|
do_test_CreateTopics(
|
|
@@ -5183,15 +5466,20 @@ static void do_test_apis(rd_kafka_type_t cltype) {
|
|
|
5183
5466
|
do_test_CreateTopics("main queue, options", rk, mainq, -1, 0);
|
|
5184
5467
|
|
|
5185
5468
|
/* Delete topics */
|
|
5186
|
-
|
|
5469
|
+
/* FIXME: KRaft async DeleteTopics is working differently than
|
|
5470
|
+
* with Zookeeper
|
|
5471
|
+
* do_test_DeleteTopics("temp queue, op timeout 0", rk, NULL, 0); */
|
|
5187
5472
|
do_test_DeleteTopics("main queue, op timeout 15000", rk, mainq, 1500);
|
|
5188
5473
|
|
|
5189
5474
|
if (test_broker_version >= TEST_BRKVER(1, 0, 0, 0)) {
|
|
5190
5475
|
/* Create Partitions */
|
|
5191
5476
|
do_test_CreatePartitions("temp queue, op timeout 6500", rk,
|
|
5192
5477
|
NULL, 6500);
|
|
5193
|
-
|
|
5194
|
-
|
|
5478
|
+
/* FIXME: KRaft async CreatePartitions is working differently
|
|
5479
|
+
* than with Zookeeper
|
|
5480
|
+
* do_test_CreatePartitions("main queue, op timeout 0", rk,
|
|
5481
|
+
* mainq, 0);
|
|
5482
|
+
*/
|
|
5195
5483
|
}
|
|
5196
5484
|
|
|
5197
5485
|
/* CreateAcls */
|
|
@@ -5216,18 +5504,29 @@ static void do_test_apis(rd_kafka_type_t cltype) {
|
|
|
5216
5504
|
|
|
5217
5505
|
/* DescribeConfigs */
|
|
5218
5506
|
do_test_DescribeConfigs(rk, mainq);
|
|
5507
|
+
do_test_DescribeConfigs_groups(rk, mainq);
|
|
5219
5508
|
|
|
5220
5509
|
/* Delete records */
|
|
5221
5510
|
do_test_DeleteRecords("temp queue, op timeout 0", rk, NULL, 0);
|
|
5222
5511
|
do_test_DeleteRecords("main queue, op timeout 1500", rk, mainq, 1500);
|
|
5223
5512
|
|
|
5224
5513
|
/* List groups */
|
|
5225
|
-
do_test_ListConsumerGroups("temp queue", rk, NULL, -1, rd_false
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5514
|
+
do_test_ListConsumerGroups("temp queue", rk, NULL, -1, rd_false,
|
|
5515
|
+
rd_true);
|
|
5516
|
+
do_test_ListConsumerGroups("temp queue", rk, NULL, -1, rd_false,
|
|
5517
|
+
rd_false);
|
|
5518
|
+
do_test_ListConsumerGroups("main queue", rk, mainq, 1500, rd_true,
|
|
5519
|
+
rd_true);
|
|
5520
|
+
do_test_ListConsumerGroups("main queue", rk, mainq, 1500, rd_true,
|
|
5521
|
+
rd_false);
|
|
5522
|
+
|
|
5523
|
+
/* TODO: check this test after KIP-848 admin operation
|
|
5524
|
+
* implementation */
|
|
5525
|
+
if (test_consumer_group_protocol_classic()) {
|
|
5526
|
+
/* Describe groups */
|
|
5527
|
+
do_test_DescribeConsumerGroups("temp queue", rk, NULL, -1);
|
|
5528
|
+
do_test_DescribeConsumerGroups("main queue", rk, mainq, 1500);
|
|
5529
|
+
}
|
|
5231
5530
|
|
|
5232
5531
|
/* Describe topics */
|
|
5233
5532
|
do_test_DescribeTopics("temp queue", rk, NULL, 15000, rd_false);
|
|
@@ -5279,6 +5578,7 @@ static void do_test_apis(rd_kafka_type_t cltype) {
|
|
|
5279
5578
|
do_test_AlterConsumerGroupOffsets(
|
|
5280
5579
|
"main queue, nonexistent topics", rk, mainq, 1500, rd_false,
|
|
5281
5580
|
rd_false /* don't create topics */);
|
|
5581
|
+
|
|
5282
5582
|
do_test_AlterConsumerGroupOffsets(
|
|
5283
5583
|
"main queue", rk, mainq, 1500,
|
|
5284
5584
|
rd_true, /*with subscribing consumer*/
|