diff --git a/tests/kuttl-test.yaml.jinja2 b/tests/kuttl-test.yaml.jinja2 index 76b502aa..9d0b5efb 100644 --- a/tests/kuttl-test.yaml.jinja2 +++ b/tests/kuttl-test.yaml.jinja2 @@ -9,3 +9,19 @@ testDirs: startKIND: false suppress: ["events"] parallel: 2 + +# The timeout (in seconds) is used when namespaces are created or +# deleted, and, if not overridden, in TestSteps, TestAsserts, and +# Commands. If not set, the timeout is 30 seconds by default. +# +# The deletion of a namespace can take a while until all resources are +# gracefully shut down. If the timeout is reached in the meantime, even +# a successful test case is considered a failure. +# +# For instance, the termination grace period of the Vector aggregator in +# the logging tests is set to 60 seconds. If there are logs entries +# which could not be forwarded yet to the external aggregator defined in +# the VECTOR_AGGREGATOR environment variable, then the test aggregator +# uses this period of time by trying to forward the events. In this +# case, deleting a namespace with several Pods takes about 90 seconds. +timeout: 120 diff --git a/tests/templates/kuttl/logging/01-install-hbase-vector-aggregator.yaml b/tests/templates/kuttl/logging/01-install-hbase-vector-aggregator.yaml index 9925bf08..1222a32c 100644 --- a/tests/templates/kuttl/logging/01-install-hbase-vector-aggregator.yaml +++ b/tests/templates/kuttl/logging/01-install-hbase-vector-aggregator.yaml @@ -5,7 +5,7 @@ commands: - script: >- helm install hive-vector-aggregator vector --namespace $NAMESPACE - --version 0.19.0 + --version 0.23.0 --repo https://helm.vector.dev --values hive-vector-aggregator-values.yaml --- diff --git a/tests/templates/kuttl/logging/hive-vector-aggregator-values.yaml.j2 b/tests/templates/kuttl/logging/hive-vector-aggregator-values.yaml.j2 index 806e06bf..5ff6f560 100644 --- a/tests/templates/kuttl/logging/hive-vector-aggregator-values.yaml.j2 +++ b/tests/templates/kuttl/logging/hive-vector-aggregator-values.yaml.j2 @@ -20,36 +20,48 @@ customConfig: type: vector version: "2" transforms: - automaticLogConfigMetastoreHive: + filteredAutomaticLogConfigMetastoreHive: type: filter inputs: [vector] condition: >- .pod == "test-hive-metastore-automatic-log-config-0" && .container == "hive" - automaticLogConfigMetastoreVector: + filteredAutomaticLogConfigMetastoreVector: type: filter inputs: [vector] condition: >- .pod == "test-hive-metastore-automatic-log-config-0" && .container == "vector" - customLogConfigMetastoreHive: + filteredCustomLogConfigMetastoreHive: type: filter inputs: [vector] condition: >- .pod == "test-hive-metastore-custom-log-config-0" && .container == "hive" - customLogConfigMetastoreVector: + filteredCustomLogConfigMetastoreVector: type: filter inputs: [vector] condition: >- .pod == "test-hive-metastore-custom-log-config-0" && .container == "vector" + filteredInvalidEvents: + type: filter + inputs: [vector] + condition: |- + .timestamp == from_unix_timestamp!(0) || + is_null(.level) || + is_null(.logger) || + is_null(.message) sinks: out: - inputs: [automaticLogConfig*, customLogConfig*] + inputs: [filtered*] {% if lookup('env', 'VECTOR_AGGREGATOR') %} type: vector address: {{ lookup('env', 'VECTOR_AGGREGATOR') }} + buffer: + # Avoid back pressure from VECTOR_AGGREGATOR. The test should + # not fail if the aggregator is not available. + when_full: drop_newest {% else %} type: blackhole {% endif %} diff --git a/tests/templates/kuttl/logging/test_log_aggregation.py b/tests/templates/kuttl/logging/test_log_aggregation.py index b37fa34a..c2b76e5a 100755 --- a/tests/templates/kuttl/logging/test_log_aggregation.py +++ b/tests/templates/kuttl/logging/test_log_aggregation.py @@ -2,7 +2,7 @@ import requests -def check_processed_events(): +def check_sent_events(): response = requests.post( 'http://hive-vector-aggregator:8686/graphql', json={ @@ -12,8 +12,8 @@ def check_processed_events(): nodes { componentId metrics { - processedEventsTotal { - processedEventsTotal + sentEventsTotal { + sentEventsTotal } } } @@ -30,12 +30,19 @@ def check_processed_events(): transforms = result['data']['transforms']['nodes'] for transform in transforms: - processedEvents = transform['metrics']['processedEventsTotal']['processedEventsTotal'] + sentEvents = transform['metrics']['sentEventsTotal'] componentId = transform['componentId'] - assert processedEvents > 0, \ - f'No events were processed in "{componentId}".' + + if componentId == 'filteredInvalidEvents': + assert sentEvents is None or \ + sentEvents['sentEventsTotal'] == 0, \ + 'Invalid log events were sent.' + else: + assert sentEvents is not None and \ + sentEvents['sentEventsTotal'] > 0, \ + f'No events were sent in "{componentId}".' if __name__ == '__main__': - check_processed_events() + check_sent_events() print('Test successful!')