test/plugin/base_test.rb in fluent-plugin-google-cloud-0.6.23 vs test/plugin/base_test.rb in fluent-plugin-google-cloud-0.6.24

- old
+ new

@@ -1219,19 +1219,38 @@ end end def test_log_entry_trace_field verify_field_key('trace', DEFAULT_TRACE_KEY, 'custom_trace_key', - CONFIG_CUSTOM_TRACE_KEY_SPECIFIED, - 'projects/proj1/traces/1234567890abcdef1234567890abcdef') + CONFIG_CUSTOM_TRACE_KEY_SPECIFIED, TRACE) end def test_log_entry_span_id_field verify_field_key('spanId', DEFAULT_SPAN_ID_KEY, 'custom_span_id_key', - CONFIG_CUSTOM_SPAN_ID_KEY_SPECIFIED, '000000000000004a') + CONFIG_CUSTOM_SPAN_ID_KEY_SPECIFIED, SPAN_ID) end + def test_log_entry_insert_id_field + verify_field_key('insertId', DEFAULT_INSERT_ID_KEY, 'custom_insert_id_key', + CONFIG_CUSTOM_INSERT_ID_KEY_SPECIFIED, INSERT_ID) + end + + def test_cascading_json_detection_with_log_entry_trace_field + verify_cascading_json_detection_with_log_entry_fields( + 'trace', DEFAULT_TRACE_KEY, TRACE, TRACE2) + end + + def test_cascading_json_detection_with_log_entry_span_id_field + verify_cascading_json_detection_with_log_entry_fields( + 'spanId', DEFAULT_SPAN_ID_KEY, SPAN_ID, SPAN_ID2) + end + + def test_cascading_json_detection_with_log_entry_insert_id_field + verify_cascading_json_detection_with_log_entry_fields( + 'insertId', DEFAULT_INSERT_ID_KEY, INSERT_ID, INSERT_ID2) + end + # Metadata Agent related tests. # Test enable_metadata_agent not set or set to false. def test_configure_enable_metadata_agent_default_and_false setup_gce_metadata_stubs @@ -1853,10 +1872,17 @@ name: ML_LOG_AREA, message: log_entry(i) } end + def structured_log_entry + { + 'name' => 'test name', + 'code' => 'test code' + } + end + def log_entry(i) "test log entry #{i}" end def check_labels(labels, expected_labels) @@ -1999,9 +2025,74 @@ end verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry| field = get_fields(entry['jsonPayload'])[payload_key] assert_equal 'a_string', get_string(field), entry assert_nil entry[destination_key], entry + end + end + + # Cascading JSON detection is only triggered when the record has one field + # left with name "log", "message" or "msg". This test verifies additional + # LogEntry fields like spanId and traceId do not disable that by accident. + def verify_cascading_json_detection_with_log_entry_fields( + log_entry_field, default_key, root_level_value, nested_level_value) + setup_gce_metadata_stubs + + # { + # "logging.googleapis.com/XXX' => 'sample value' + # "msg": { + # "name": "test name", + # "code": "test code" + # } + # } + log_entry_with_root_level_field = { + default_key => root_level_value, + 'msg' => structured_log_entry.to_json + } + # { + # "msg": { + # "logging.googleapis.com/XXX' => 'another value', + # "name": "test name", + # "code": "test code" + # } + # } + log_entry_with_nested_level_field = { + 'msg' => { + default_key => nested_level_value + }.merge(structured_log_entry).to_json + } + # { + # "logging.googleapis.com/XXX' => 'sample value' + # "msg": { + # "logging.googleapis.com/XXX' => 'another value', + # "name": "test name", + # "code": "test code" + # } + # } + log_entry_with_both_level_fields = log_entry_with_nested_level_field.merge( + default_key => root_level_value) + + { + log_entry_with_root_level_field => root_level_value, + log_entry_with_nested_level_field => nested_level_value, + log_entry_with_both_level_fields => nested_level_value + }.each_with_index do |(input_log_entry, expected_value), index| + setup_logging_stubs do + @logs_sent = [] + d = create_driver(DETECT_JSON_CONFIG) + d.emit(input_log_entry) + d.run + end + verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry| + assert_equal expected_value, entry[log_entry_field], + "Index #{index} failed. #{expected_value} is expected" \ + " for #{log_entry_field} field." + payload_fields = get_fields(entry['jsonPayload']) + assert_equal structured_log_entry.size, payload_fields.size + payload_fields.each do |key, value| + assert_equal structured_log_entry[key], get_string(value) + end + end end end def verify_field_key(log_entry_field, default_key, custom_key, custom_key_config, sample_value)