test/plugin/base_test.rb in fluent-plugin-google-cloud-0.6.13.pre.memory.2 vs test/plugin/base_test.rb in fluent-plugin-google-cloud-0.6.13

- old
+ new

@@ -603,10 +603,60 @@ log_name: encoded_container_name) verify_log_entries(1, params, 'textPayload') end end + def test_configure_split_logs_by_tag + setup_gce_metadata_stubs + { + APPLICATION_DEFAULT_CONFIG => true, + DISABLE_SPLIT_LOGS_BY_TAG_CONFIG => false + }.each do |(config, split_logs_by_tag)| + d = create_driver(config) + assert_equal split_logs_by_tag, + d.instance.instance_variable_get(:@split_logs_by_tag) + end + end + + def test_split_logs_by_tag + setup_gce_metadata_stubs + log_entry_count = 5 + dynamic_log_names = (0..log_entry_count - 1).map do |index| + "projects/test-project-id/logs/tag#{index}" + end + [ + # [] returns nil for any index. + [APPLICATION_DEFAULT_CONFIG, log_entry_count, dynamic_log_names, []], + [DISABLE_SPLIT_LOGS_BY_TAG_CONFIG, 1, [''], dynamic_log_names] + ].each do |(config, request_count, request_log_names, entry_log_names)| + setup_prometheus + setup_logging_stubs do + @logs_sent = [] + d = create_driver(config + PROMETHEUS_ENABLE_CONFIG, 'test', true) + log_entry_count.times do |i| + d.emit("tag#{i}", 'message' => log_entry(i)) + end + d.run + end + @logs_sent.zip(request_log_names).each do |request, log_name| + assert_equal log_name, request['logName'] + end + verify_log_entries(log_entry_count, COMPUTE_PARAMS_NO_LOG_NAME, + 'textPayload') do |entry, entry_index| + verify_default_log_entry_text(entry['textPayload'], entry_index, + entry) + assert_equal entry_log_names[entry_index], entry['logName'] + end + # Verify the number of requests is different based on whether the + # 'split_logs_by_tag' flag is enabled. + assert_prometheus_metric_value(:stackdriver_successful_requests_count, + request_count, :aggregate) + assert_prometheus_metric_value(:stackdriver_ingested_entries_count, + log_entry_count, :aggregate) + end + end + def test_timestamps setup_gce_metadata_stubs current_time = Time.now next_year = Time.mktime(current_time.year + 1) one_second_before_next_year = next_year - 1 @@ -1589,16 +1639,17 @@ "Entry ##{i} had unexpected text: #{entry}" end # The caller can optionally provide a block which is called for each entry. def verify_json_log_entries(n, params, payload_type = 'textPayload') - i = 0 + entry_count = 0 @logs_sent.each do |request| request['entries'].each do |entry| unless payload_type.empty? - assert entry.key?(payload_type), "Entry ##{i} did not contain " \ - "expected #{payload_type} key: #{entry}" + assert entry.key?(payload_type), + "Entry ##{entry_count} did not contain expected" \ + " #{payload_type} key: #{entry}." end # per-entry resource or log_name overrides the corresponding field # from the request. Labels are merged, with the per-entry label # taking precedence in case of overlap. @@ -1606,26 +1657,31 @@ log_name = entry['logName'] || request['logName'] labels ||= request['labels'] labels.merge!(entry['labels'] || {}) - assert_equal \ - "projects/#{params[:project_id]}/logs/#{params[:log_name]}", log_name + if params[:log_name] + assert_equal \ + "projects/#{params[:project_id]}/logs/#{params[:log_name]}", + log_name + end assert_equal params[:resource][:type], resource['type'] check_labels resource['labels'], params[:resource][:labels] check_labels labels, params[:labels] if block_given? - yield(entry, i) + yield(entry, entry_count) elsif payload_type == 'textPayload' # Check the payload for textPayload, otherwise it's up to the caller. - verify_default_log_entry_text(entry['textPayload'], i, entry) + verify_default_log_entry_text(entry['textPayload'], entry_count, + entry) end - i += 1 - assert i <= n, "Number of entries #{i} exceeds expected number #{n}" + entry_count += 1 + assert entry_count <= n, + "Number of entries #{entry_count} exceeds expected number #{n}." end end - assert i == n, "Number of entries #{i} does not match expected number #{n}" + assert_equal n, entry_count end def verify_container_logs(log_entry_factory, expected_params) setup_gce_metadata_stubs setup_container_metadata_stubs @@ -1779,10 +1835,16 @@ end def assert_prometheus_metric_value(metric_name, expected_value, labels = {}) metric = Prometheus::Client.registry.get(metric_name) assert_not_nil(metric) - assert_equal(expected_value, metric.get(labels)) + metric_value = if labels == :aggregate + # Sum up all metric values regardless of the labels. + metric.values.values.reduce(0.0, :+) + else + metric.get(labels) + end + assert_equal(expected_value, metric_value) end # Get the fields of the payload. def get_fields(_payload) _undefined