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)