Skip to content

tests: integration: introduce in-tree integration test suite#11663

Merged
edsiper merged 3 commits intomasterfrom
integration-tests
Apr 3, 2026
Merged

tests: integration: introduce in-tree integration test suite#11663
edsiper merged 3 commits intomasterfrom
integration-tests

Conversation

@edsiper
Copy link
Copy Markdown
Member

@edsiper edsiper commented Apr 3, 2026

Introduce Fluent Bit’s in-tree integration test suite as a dedicated end-to-end test harness for plugin and protocol validation. Document that it comes from the original github.com/fluent/fluent-bit-test-suite project and is now shipped inside Fluent Bit as the integration test suite, while excluding local runtime artifacts from version control.


Fluent Bit is licensed under Apache 2.0, by submitting this pull request I understand that this code will be released under the terms of that license.

Introduce Fluent Bit’s in-tree integration test suite as a dedicated end-to-end
test harness for plugin and protocol validation. Document that it comes from
the original github.com/fluent/fluent-bit-test-suite project and is now
shipped inside Fluent Bit as the integration test suite, while excluding local
runtime artifacts from version control.

Signed-off-by: Eduardo Silva <eduardo@chronosphere.io>
@edsiper edsiper requested a review from cosmo0920 as a code owner April 3, 2026 04:54
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 3, 2026

Important

Review skipped

Too many files!

This PR contains 186 files, which is 36 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 801ecc96-d041-430b-82d7-5ace705fbf70

📥 Commits

Reviewing files that changed from the base of the PR and between 66ffbe4 and 6899dc8.

⛔ Files ignored due to path filters (2)
  • tests/integration/scenarios/in_splunk/certificate/certificate.pem is excluded by !**/*.pem
  • tests/integration/scenarios/in_splunk/certificate/private_key.pem is excluded by !**/*.pem
📒 Files selected for processing (186)
  • .github/scripts/commit_prefix_check.py
  • .gitignore
  • AGENTS.md
  • tests/integration/.gitignore
  • tests/integration/CONTRIBUTING.md
  • tests/integration/LICENSE
  • tests/integration/README.md
  • tests/integration/config.yaml
  • tests/integration/conftest.py
  • tests/integration/pytest.ini
  • tests/integration/requirements.txt
  • tests/integration/run_tests.py
  • tests/integration/scenarios/hot_reload_watch/config/fluent-bit-after.yaml
  • tests/integration/scenarios/hot_reload_watch/config/fluent-bit-before.yaml
  • tests/integration/scenarios/hot_reload_watch/config/fluent-bit-manual-after.yaml
  • tests/integration/scenarios/hot_reload_watch/config/fluent-bit-manual-before.yaml
  • tests/integration/scenarios/hot_reload_watch/tests/test_hot_reload_watch_001.py
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http1_cleartext.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http1_cleartext_small_buffer.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http1_cleartext_workers.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http1_tls.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http1_tls_workers.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http2_cleartext.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http2_cleartext_small_buffer.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http2_cleartext_small_buffer_workers.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http2_cleartext_workers.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http2_tls.yaml
  • tests/integration/scenarios/in_elasticsearch/config/in_elasticsearch_http2_tls_workers.yaml
  • tests/integration/scenarios/in_elasticsearch/tests/data_files/create_index.json
  • tests/integration/scenarios/in_elasticsearch/tests/data_files/create_multiple_documents.json
  • tests/integration/scenarios/in_elasticsearch/tests/data_files/delete_multiple_documents.json
  • tests/integration/scenarios/in_elasticsearch/tests/data_files/update_multiple_documents.json
  • tests/integration/scenarios/in_elasticsearch/tests/test_in_elasticsearch_001.py
  • tests/integration/scenarios/in_forward/config/in_forward.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_forced_tag.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_secure.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_storage_limit_multi_output.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_storage_limit_single_output.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_tag_prefix.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_tls.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_to_forward_receiver.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_to_forward_receiver_gzip.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_unix.yaml
  • tests/integration/scenarios/in_forward/config/in_forward_unix_perm.yaml
  • tests/integration/scenarios/in_forward/config/in_opentelemetry_to_forward_receiver.yaml
  • tests/integration/scenarios/in_forward/tests/test_in_forward_001.py
  • tests/integration/scenarios/in_http/config/in_http_config
  • tests/integration/scenarios/in_http/config/in_http_http1_cleartext.yaml
  • tests/integration/scenarios/in_http/config/in_http_http1_tls.yaml
  • tests/integration/scenarios/in_http/config/in_http_http2_cleartext.yaml
  • tests/integration/scenarios/in_http/config/in_http_http2_tls.yaml
  • tests/integration/scenarios/in_http/config/in_http_oauth2.yaml
  • tests/integration/scenarios/in_http/tests/data_files/sample_data.json
  • tests/integration/scenarios/in_http/tests/test_in_http_001.py
  • tests/integration/scenarios/in_http_max_connections/config/in_http_max_connections.yaml
  • tests/integration/scenarios/in_http_max_connections/tests/test_in_http_max_connections_001.py
  • tests/integration/scenarios/in_mqtt/config/in_mqtt.yaml
  • tests/integration/scenarios/in_mqtt/config/in_mqtt_payload_key.yaml
  • tests/integration/scenarios/in_mqtt/tests/test_in_mqtt_001.py
  • tests/integration/scenarios/in_opentelemetry/config/001-fluent-bit.yaml
  • tests/integration/scenarios/in_opentelemetry/config/002-fluent-bit.yaml
  • tests/integration/scenarios/in_opentelemetry/config/003-stdout-otlp-json.yaml
  • tests/integration/scenarios/in_opentelemetry/config/004-stdout-otlp-json-pretty.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http1_cleartext.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http1_cleartext_oauth2.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http1_cleartext_workers.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http1_tls.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http1_tls_oauth2.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http1_tls_workers.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http2_cleartext.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http2_cleartext_oauth2.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http2_cleartext_workers.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http2_tls.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http2_tls_oauth2.yaml
  • tests/integration/scenarios/in_opentelemetry/config/otlp_http2_tls_workers.yaml
  • tests/integration/scenarios/in_opentelemetry/tests/data_files/test_logs_001.in.json
  • tests/integration/scenarios/in_opentelemetry/tests/data_files/test_logs_001.out.json
  • tests/integration/scenarios/in_opentelemetry/tests/data_files/test_metrics_001.in.json
  • tests/integration/scenarios/in_opentelemetry/tests/data_files/test_metrics_002.in.json
  • tests/integration/scenarios/in_opentelemetry/tests/data_files/test_traces_001.in.json
  • tests/integration/scenarios/in_opentelemetry/tests/data_files/test_traces_002.in.json
  • tests/integration/scenarios/in_opentelemetry/tests/test_in_opentelemetry_001.py
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http1_cleartext.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http1_cleartext_workers.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http1_tls.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http1_tls_workers.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http2_cleartext.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http2_cleartext_workers.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http2_tls.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/receiver_http2_tls_workers.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/sender_cleartext.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/config/sender_tls.yaml
  • tests/integration/scenarios/in_prometheus_remote_write/tests/test_in_prometheus_remote_write_001.py
  • tests/integration/scenarios/in_splunk/config/in_splunk_to_out_splunk.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_http1_keepalive.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_http1_keepalive_workers.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_http1_no_keepalive.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_http1_tls_keepalive.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_http1_tls_keepalive_workers.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_on_http2_keepalive.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_on_http2_keepalive_tls_on.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_on_http2_keepalive_workers.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_on_http2_no_keepalive.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_on_http2_on_keepalive_on_tls_on.yaml
  • tests/integration/scenarios/in_splunk/config/splunk_on_http2_on_keepalive_on_tls_on_workers.yaml
  • tests/integration/scenarios/in_splunk/tests/test_in_splunk_001.py
  • tests/integration/scenarios/in_syslog/config/in_syslog_tcp_plaintext.yaml
  • tests/integration/scenarios/in_syslog/config/in_syslog_tcp_tls.yaml
  • tests/integration/scenarios/in_syslog/config/in_syslog_udp_plaintext.yaml
  • tests/integration/scenarios/in_syslog/config/in_syslog_uds_dgram_plaintext.yaml
  • tests/integration/scenarios/in_syslog/config/in_syslog_uds_stream_plaintext.yaml
  • tests/integration/scenarios/in_syslog/tests/test_in_syslog_001.py
  • tests/integration/scenarios/internal_http_server/config/internal_http_server.yaml
  • tests/integration/scenarios/internal_http_server/tests/test_internal_http_server_001.py
  • tests/integration/scenarios/out_azure_logs_ingestion/config/out_azure_logs_ingestion_oauth2.yaml
  • tests/integration/scenarios/out_azure_logs_ingestion/tests/test_out_azure_logs_ingestion_001.py
  • tests/integration/scenarios/out_http/config/out_http_basic.yaml
  • tests/integration/scenarios/out_http/config/out_http_oauth2_basic.yaml
  • tests/integration/scenarios/out_http/config/out_http_oauth2_private_key_jwt.yaml
  • tests/integration/scenarios/out_http/config/out_http_retry.yaml
  • tests/integration/scenarios/out_http/tests/test_out_http_001.py
  • tests/integration/scenarios/out_kafka/config/out_kafka_basic.yaml
  • tests/integration/scenarios/out_kafka/config/out_kafka_dynamic_topic.yaml
  • tests/integration/scenarios/out_kafka/config/out_kafka_message_key_field.yaml
  • tests/integration/scenarios/out_kafka/config/out_kafka_msgpack.yaml
  • tests/integration/scenarios/out_kafka/config/out_kafka_otlp_json.yaml
  • tests/integration/scenarios/out_kafka/config/out_kafka_otlp_proto.yaml
  • tests/integration/scenarios/out_kafka/config/out_kafka_raw.yaml
  • tests/integration/scenarios/out_kafka/tests/test_out_kafka_001.py
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_grpc_logs.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_grpc_logs_oauth2_basic.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_grpc_logs_oauth2_private_key_jwt.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_grpc_metrics.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_limited_logs.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_limited_scopes_logs.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_batch_size.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_gzip.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_message_keys.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_oauth2_basic.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_oauth2_private_key_jwt.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_tls.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_logs_zstd.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_metadata_keys.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_metrics.yaml
  • tests/integration/scenarios/out_opentelemetry/config/out_otel_http_traces.yaml
  • tests/integration/scenarios/out_opentelemetry/tests/data_files/test_logs_metadata_001.in.json
  • tests/integration/scenarios/out_opentelemetry/tests/test_out_opentelemetry_001.py
  • tests/integration/scenarios/out_prometheus_exporter/config/out_prometheus_exporter.yaml
  • tests/integration/scenarios/out_prometheus_exporter/tests/test_out_prometheus_exporter_001.py
  • tests/integration/scenarios/out_s3/config/out_s3_basic.yaml
  • tests/integration/scenarios/out_s3/config/out_s3_format_json.yaml
  • tests/integration/scenarios/out_s3/config/out_s3_gzip.yaml
  • tests/integration/scenarios/out_s3/config/out_s3_otlp_json.yaml
  • tests/integration/scenarios/out_s3/tests/test_out_s3_001.py
  • tests/integration/scenarios/out_stdout/config/out_stdout_basic.yaml
  • tests/integration/scenarios/out_stdout/config/out_stdout_json_lines.yaml
  • tests/integration/scenarios/out_stdout/config/out_stdout_metrics.yaml
  • tests/integration/scenarios/out_stdout/config/out_stdout_otel.yaml
  • tests/integration/scenarios/out_stdout/config/out_stdout_traces.yaml
  • tests/integration/scenarios/out_stdout/tests/test_out_stdout_001.py
  • tests/integration/scenarios/out_vivo_exporter/config/out_vivo_exporter.yaml
  • tests/integration/scenarios/out_vivo_exporter/tests/test_out_vivo_exporter_001.py
  • tests/integration/setup-venv.sh
  • tests/integration/src/__init__.py
  • tests/integration/src/parsers/http_parser.py
  • tests/integration/src/parsers/otlp_parser.py
  • tests/integration/src/parsers/splunk_parser.py
  • tests/integration/src/server/forward_server.py
  • tests/integration/src/server/http_server.py
  • tests/integration/src/server/kafka_server.py
  • tests/integration/src/server/otlp_server.py
  • tests/integration/src/server/s3_server.py
  • tests/integration/src/server/splunk_server.py
  • tests/integration/src/utils/data_utils.py
  • tests/integration/src/utils/fluent_bit_manager.py
  • tests/integration/src/utils/http_matrix.py
  • tests/integration/src/utils/network.py
  • tests/integration/src/utils/test_service.py
  • tests/integration/src/utils/valgrind.py
  • tests/integration/src/validators/http_validator.py
  • tests/integration/src/validators/otlp_trace_validator.py
  • tests/integration/src/validators/splunk_validator.py
  • tests/integration/test_valgrind_utils.py
  • tests/integration/tests/test_fluent_bit_manager.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch integration-tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Signed-off-by: Eduardo Silva <eduardo@chronosphere.io>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 86dec2e1c7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

assert service.read_message(0) == "before"

service.replace_config()
service.flb.wait_for_hot_reload_count(1)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Stop calling missing FluentBitManager hot-reload APIs

The hot-reload scenario invokes wait_for_hot_reload_count, send_sighup, and trigger_http_reload, but the FluentBitManager added in this commit (tests/integration/src/utils/fluent_bit_manager.py) does not define any of these methods. Because run_tests.py defaults to running all scenarios, this causes the hot-reload tests to fail with AttributeError as soon as this line is reached, so the new integration suite cannot complete successfully.

Useful? React with 👍 / 👎.

import requests

from src.utils import fluent_bit_manager as manager_module
from src.utils.fluent_bit_manager import ENV_FLB_BINARY_PATH
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update manager unit tests to match exported API

This test module imports ENV_FLB_BINARY_PATH and later exercises send_signal/hot-reload helpers that are not present in the committed src/utils/fluent_bit_manager.py, so running pytest tests/test_fluent_bit_manager.py fails at import/attribute resolution instead of executing assertions. As written, the file provides no usable coverage and will break targeted test runs for this component.

Useful? React with 👍 / 👎.

Signed-off-by: Eduardo Silva <eduardo@chronosphere.io>
@edsiper edsiper merged commit 3e414ac into master Apr 3, 2026
27 of 29 checks passed
@edsiper edsiper deleted the integration-tests branch April 3, 2026 05:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant