fluent-plugin-google-cloud 0.7.15 → 0.7.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -39,6 +39,14 @@ module BaseTest
39
39
  # home var, which is used to find $HOME/.gcloud/...
40
40
  ENV.delete('HOME')
41
41
 
42
+ # Unregister Prometheus metrics.
43
+ registry = Prometheus::Client.registry
44
+ registry.unregister(:stackdriver_successful_requests_count)
45
+ registry.unregister(:stackdriver_failed_requests_count)
46
+ registry.unregister(:stackdriver_ingested_entries_count)
47
+ registry.unregister(:stackdriver_dropped_entries_count)
48
+ registry.unregister(:stackdriver_retried_entries_count)
49
+
42
50
  setup_auth_stubs
43
51
  @logs_sent = []
44
52
  end
@@ -142,6 +150,24 @@ module BaseTest
142
150
  end
143
151
  end
144
152
 
153
+ def test_configure_ignores_unknown_monitoring_type
154
+ # Verify that driver creation succeeds when monitoring type is not
155
+ # "prometheus" (in which case, we simply don't record metrics),
156
+ # and that the counters are set to nil.
157
+ setup_gce_metadata_stubs
158
+ create_driver(CONFIG_UNKNOWN_MONITORING_TYPE)
159
+ assert_nil(Prometheus::Client.registry.get(
160
+ :stackdriver_successful_requests_count))
161
+ assert_nil(Prometheus::Client.registry.get(
162
+ :stackdriver_failed_requests_count))
163
+ assert_nil(Prometheus::Client.registry.get(
164
+ :stackdriver_ingested_entries_count))
165
+ assert_nil(Prometheus::Client.registry.get(
166
+ :stackdriver_dropped_entries_count))
167
+ assert_nil(Prometheus::Client.registry.get(
168
+ :stackdriver_retried_entries_count))
169
+ end
170
+
145
171
  def test_metadata_loading
146
172
  setup_gce_metadata_stubs
147
173
  d = create_driver
@@ -330,12 +356,12 @@ module BaseTest
330
356
  d.run
331
357
  end
332
358
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry, i|
333
- fields = get_fields(entry['jsonPayload'])
359
+ fields = entry['jsonPayload']
334
360
  assert_equal 4, fields.size, entry
335
- verify_default_log_entry_text(get_string(fields['msg']), i, entry)
336
- assert_equal 'test', get_string(fields['tag2']), entry
337
- assert_equal 5000, get_number(fields['data']), entry
338
- assert_equal null_value, fields['some_null_field'], entry
361
+ verify_default_log_entry_text(fields['msg'], i, entry)
362
+ assert_equal 'test', fields['tag2'], entry
363
+ assert_equal 5000, fields['data'], entry
364
+ assert_nil fields['some_null_field'], entry
339
365
  end
340
366
  end
341
367
 
@@ -448,22 +474,17 @@ module BaseTest
448
474
  d.run
449
475
  end
450
476
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
451
- fields = get_fields(entry['jsonPayload'])
477
+ fields = entry['jsonPayload']
452
478
  assert_equal 7, fields.size, entry
453
- assert_equal message, get_string(get_fields(get_struct(fields \
454
- ['int_key']))['1']), entry
455
- assert_equal message, get_string(get_fields(get_struct(fields \
456
- ['int_array_key']))['[1, 2, 3, 4]']), entry
457
- assert_equal message, get_string(get_fields(get_struct(fields \
458
- ['string_array_key']))['["a", "b", "c"]']), entry
459
- assert_equal message, get_string(get_fields(get_struct(fields \
460
- ['hash_key']))['{"some_key"=>"some_value"}']), entry
461
- assert_equal message, get_string(get_fields(get_struct(fields \
462
- ['mixed_key']))['{"some_key"=>["a", "b", "c"]}']), entry
463
- assert_equal message, get_string(get_fields(get_struct(fields \
464
- ['symbol_key']))['some_symbol']), entry
465
- assert_equal message, get_string(get_fields(get_struct(fields \
466
- ['nil_key']))['']), entry
479
+ assert_equal message, fields['int_key']['1'], entry
480
+ assert_equal message, fields['int_array_key']['[1, 2, 3, 4]'], entry
481
+ assert_equal message, fields['string_array_key']['["a", "b", "c"]'], entry
482
+ assert_equal message, fields['hash_key']['{"some_key"=>"some_value"}'],
483
+ entry
484
+ assert_equal message,
485
+ fields['mixed_key']['{"some_key"=>["a", "b", "c"]}'], entry
486
+ assert_equal message, fields['symbol_key']['some_symbol'], entry
487
+ assert_equal message, fields['nil_key'][''], entry
467
488
  end
468
489
  end
469
490
 
@@ -497,7 +518,7 @@ module BaseTest
497
518
  d.run
498
519
  end
499
520
  verify_log_entries(6, COMPUTE_PARAMS, 'jsonPayload') do |entry|
500
- fields = get_fields(entry['jsonPayload'])
521
+ fields = entry['jsonPayload']
501
522
  assert !fields.key?('tag2'), 'Did not expect tag2'
502
523
  assert !fields.key?('data'), 'Did not expect data'
503
524
  assert !fields.key?('some_null_field'), 'Did not expect some_null_field'
@@ -530,7 +551,7 @@ module BaseTest
530
551
  d.run
531
552
  end
532
553
  verify_log_entries(2, COMPUTE_PARAMS, 'jsonPayload') do |entry|
533
- fields = get_fields(entry['jsonPayload'])
554
+ fields = entry['jsonPayload']
534
555
  assert !fields.key?('tag2'), 'Did not expect tag2'
535
556
  assert !fields.key?('data'), 'Did not expect data'
536
557
  assert !fields.key?('some_null_field'), 'Did not expect some_null_field'
@@ -594,15 +615,14 @@ module BaseTest
594
615
  end
595
616
  else
596
617
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
597
- json_payload = get_fields(entry['jsonPayload'])
618
+ json_payload = entry['jsonPayload']
598
619
  assert_equal 1, json_payload.size, entry
599
- fields = get_fields(
600
- get_struct(json_payload[test_params[:field_name]]))
620
+ fields = json_payload[test_params[:field_name]]
601
621
  assert_equal 4, fields.size, entry
602
- assert_equal 'test log entry 0', get_string(fields['msg']), entry
603
- assert_equal 'test', get_string(fields['tag2']), entry
604
- assert_equal 5000, get_number(fields['data']), entry
605
- assert_equal null_value, fields['some_null_field'], entry
622
+ assert_equal 'test log entry 0', fields['msg'], entry
623
+ assert_equal 'test', fields['tag2'], entry
624
+ assert_equal 5000, fields['data'], entry
625
+ assert_nil fields['some_null_field'], entry
606
626
  end
607
627
  end
608
628
  end
@@ -622,12 +642,12 @@ module BaseTest
622
642
  d.run
623
643
  end
624
644
  verify_log_entries(6, COMPUTE_PARAMS, 'jsonPayload') do |entry|
625
- fields = get_fields(entry['jsonPayload'])
645
+ fields = entry['jsonPayload']
626
646
  assert_equal 4, fields.size, entry
627
- assert_equal 'test log entry 0', get_string(fields['msg']), entry
628
- assert_equal 'test', get_string(fields['tag2']), entry
629
- assert_equal 5000, get_number(fields['data']), entry
630
- assert_equal null_value, fields['some_null_field'], entry
647
+ assert_equal 'test log entry 0', fields['msg'], entry
648
+ assert_equal 'test', fields['tag2'], entry
649
+ assert_equal 5000, fields['data'], entry
650
+ assert_nil fields['some_null_field'], entry
631
651
  end
632
652
  end
633
653
 
@@ -676,12 +696,12 @@ module BaseTest
676
696
  end
677
697
  verify_log_entries(2, CONTAINER_FROM_METADATA_PARAMS, 'jsonPayload') \
678
698
  do |entry|
679
- fields = get_fields(entry['jsonPayload'])
699
+ fields = entry['jsonPayload']
680
700
  assert_equal 4, fields.size, entry
681
- assert_equal 'test log entry 0', get_string(fields['msg']), entry
682
- assert_equal 'test', get_string(fields['tag2']), entry
683
- assert_equal 5000, get_number(fields['data']), entry
684
- assert_equal null_value, fields['some_null_field'], entry
701
+ assert_equal 'test log entry 0', fields['msg'], entry
702
+ assert_equal 'test', fields['tag2'], entry
703
+ assert_equal 5000, fields['data'], entry
704
+ assert_nil fields['some_null_field'], entry
685
705
  end
686
706
  end
687
707
 
@@ -692,22 +712,26 @@ module BaseTest
692
712
  setup_gce_metadata_stubs
693
713
  json_string = '{"msg": "test log entry 0", "tag2": "test", ' \
694
714
  '"data": 5000, "some_null_field": null}'
695
- setup_logging_stubs do
696
- d = create_driver(DETECT_JSON_CONFIG)
697
- %w(message log msg).each do |field|
698
- d.emit(PRESERVED_KEYS_MAP.merge(field => json_string))
715
+ PRESERVED_KEYS_TIMESTAMP_FIELDS.each do |timestamp_fields|
716
+ setup_logging_stubs do
717
+ @logs_sent = []
718
+ d = create_driver(DETECT_JSON_CONFIG)
719
+ %w(message log msg).each do |field|
720
+ d.emit(PRESERVED_KEYS_MAP.merge(
721
+ field => json_string).merge(timestamp_fields))
722
+ end
723
+ d.run
724
+ end
725
+ expected_params = COMPUTE_PARAMS.merge(
726
+ labels: COMPUTE_PARAMS[:labels].merge(LABELS_MESSAGE))
727
+ verify_log_entries(3, expected_params, 'jsonPayload') do |entry|
728
+ fields = entry['jsonPayload']
729
+ assert_equal 4, fields.size, entry
730
+ assert_equal 'test log entry 0', fields['msg'], entry
731
+ assert_equal 'test', fields['tag2'], entry
732
+ assert_equal 5000, fields['data'], entry
733
+ assert_nil fields['some_null_field'], entry
699
734
  end
700
- d.run
701
- end
702
- expected_params = COMPUTE_PARAMS.merge(
703
- labels: COMPUTE_PARAMS[:labels].merge(LABELS_MESSAGE))
704
- verify_log_entries(3, expected_params, 'jsonPayload') do |entry|
705
- fields = get_fields(entry['jsonPayload'])
706
- assert_equal 4, fields.size, entry
707
- assert_equal 'test log entry 0', get_string(fields['msg']), entry
708
- assert_equal 'test', get_string(fields['tag2']), entry
709
- assert_equal 5000, get_number(fields['data']), entry
710
- assert_equal null_value, fields['some_null_field'], entry
711
735
  end
712
736
  end
713
737
 
@@ -961,19 +985,15 @@ module BaseTest
961
985
  d.run
962
986
  verify_log_entries(emit_index, COMPUTE_PARAMS) do |entry, i|
963
987
  verify_default_log_entry_text(entry['textPayload'], i, entry)
964
- assert_equal_with_default entry['timestamp']['seconds'],
965
- expected_ts.tv_sec, 0, entry
966
- assert_equal_with_default \
967
- entry['timestamp']['nanos'],
968
- expected_ts.tv_nsec, 0, entry do
969
- # Fluentd v0.14 onwards supports nanosecond timestamp values.
970
- # Added in 600 ns delta to avoid flaky tests introduced
971
- # due to rounding error in double-precision floating-point numbers
972
- # (to account for the missing 9 bits of precision ~ 512 ns).
973
- # See http://wikipedia.org/wiki/Double-precision_floating-point_format.
974
- assert_in_delta expected_ts.tv_nsec,
975
- entry['timestamp']['nanos'], 600, entry
976
- end
988
+ actual_timestamp = timestamp_parse(entry['timestamp'])
989
+ assert_equal actual_timestamp['seconds'], expected_ts.tv_sec, entry
990
+ # Fluentd v0.14 onwards supports nanosecond timestamp values.
991
+ # Added in 600 ns delta to avoid flaky tests introduced
992
+ # due to rounding error in double-precision floating-point numbers
993
+ # (to account for the missing 9 bits of precision ~ 512 ns).
994
+ # See http://wikipedia.org/wiki/Double-precision_floating-point_format.
995
+ assert_in_delta expected_ts.tv_nsec, actual_timestamp['nanos'],
996
+ 600, entry
977
997
  end
978
998
  end
979
999
  end
@@ -989,9 +1009,9 @@ module BaseTest
989
1009
  d.run
990
1010
  end
991
1011
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
992
- fields = get_fields(entry['jsonPayload'])
1012
+ fields = entry['jsonPayload']
993
1013
  assert_equal 2, fields.size, entry
994
- assert_equal 'not-a-hash', get_string(fields['timestamp']), entry
1014
+ assert_equal 'not-a-hash', fields['timestamp'], entry
995
1015
  end
996
1016
  end
997
1017
 
@@ -1082,10 +1102,10 @@ module BaseTest
1082
1102
  params[:labels]['foo.googleapis.com/bar'] = 'value2'
1083
1103
  params[:labels]['label3'] = 'value3'
1084
1104
  verify_log_entries(1, params, 'jsonPayload') do |entry, i|
1085
- fields = get_fields(entry['jsonPayload'])
1105
+ fields = entry['jsonPayload']
1086
1106
  assert_equal 2, fields.size, entry
1087
- verify_default_log_entry_text(get_string(fields['message']), i, entry)
1088
- assert_equal 'value4', get_string(fields['not_a_label']), entry
1107
+ verify_default_log_entry_text(fields['message'], i, entry)
1108
+ assert_equal 'value4', fields['not_a_label'], entry
1089
1109
  end
1090
1110
  end
1091
1111
 
@@ -1171,8 +1191,9 @@ module BaseTest
1171
1191
  ) { |_, oldval, newval| oldval.merge(newval) }
1172
1192
  verify_log_entries(1, expected_params) do |entry, i|
1173
1193
  verify_default_log_entry_text(entry['textPayload'], i, entry)
1174
- assert_equal K8S_SECONDS_EPOCH, entry['timestamp']['seconds'], entry
1175
- assert_equal K8S_NANOS, entry['timestamp']['nanos'], entry
1194
+ actual_timestamp = timestamp_parse(entry['timestamp'])
1195
+ assert_equal K8S_SECONDS_EPOCH, actual_timestamp['seconds'], entry
1196
+ assert_equal K8S_NANOS, actual_timestamp['nanos'], entry
1176
1197
  assert_equal 'ERROR', entry['severity'], entry
1177
1198
  end
1178
1199
  end
@@ -1189,13 +1210,14 @@ module BaseTest
1189
1210
  end
1190
1211
  verify_log_entries(1, CONTAINER_FROM_METADATA_PARAMS,
1191
1212
  'jsonPayload') do |entry|
1192
- fields = get_fields(entry['jsonPayload'])
1213
+ fields = entry['jsonPayload']
1193
1214
  assert_equal 3, fields.size, entry
1194
- assert_equal 'test log entry 0', get_string(fields['msg']), entry
1195
- assert_equal 'test', get_string(fields['tag2']), entry
1196
- assert_equal 5000, get_number(fields['data']), entry
1197
- assert_equal K8S_SECONDS_EPOCH, entry['timestamp']['seconds'], entry
1198
- assert_equal K8S_NANOS, entry['timestamp']['nanos'], entry
1215
+ assert_equal 'test log entry 0', fields['msg'], entry
1216
+ assert_equal 'test', fields['tag2'], entry
1217
+ assert_equal 5000, fields['data'], entry
1218
+ actual_timestamp = timestamp_parse(entry['timestamp'])
1219
+ assert_equal K8S_SECONDS_EPOCH, actual_timestamp['seconds'], entry
1220
+ assert_equal K8S_NANOS, actual_timestamp['nanos'], entry
1199
1221
  assert_equal 'WARNING', entry['severity'], entry
1200
1222
  end
1201
1223
  end
@@ -1212,13 +1234,14 @@ module BaseTest
1212
1234
  end
1213
1235
  verify_log_entries(1, CONTAINER_FROM_TAG_PARAMS,
1214
1236
  'jsonPayload') do |entry|
1215
- fields = get_fields(entry['jsonPayload'])
1237
+ fields = entry['jsonPayload']
1216
1238
  assert_equal 3, fields.size, entry
1217
- assert_equal 'test log entry 0', get_string(fields['msg']), entry
1218
- assert_equal 'test', get_string(fields['tag2']), entry
1219
- assert_equal 5000, get_number(fields['data']), entry
1220
- assert_equal K8S_SECONDS_EPOCH, entry['timestamp']['seconds'], entry
1221
- assert_equal K8S_NANOS, entry['timestamp']['nanos'], entry
1239
+ assert_equal 'test log entry 0', fields['msg'], entry
1240
+ assert_equal 'test', fields['tag2'], entry
1241
+ assert_equal 5000, fields['data'], entry
1242
+ actual_timestamp = timestamp_parse(entry['timestamp'])
1243
+ assert_equal K8S_SECONDS_EPOCH, actual_timestamp['seconds'], entry
1244
+ assert_equal K8S_NANOS, actual_timestamp['nanos'], entry
1222
1245
  assert_equal 'WARNING', entry['severity'], entry
1223
1246
  end
1224
1247
  end
@@ -1356,7 +1379,7 @@ module BaseTest
1356
1379
  verify_log_entries(1, COMPUTE_PARAMS, 'httpRequest') do |entry|
1357
1380
  assert_equal http_request_message_with_absent_referer,
1358
1381
  entry['httpRequest'], entry
1359
- assert_nil get_fields(entry['jsonPayload'])['httpRequest'], entry
1382
+ assert_nil entry['jsonPayload']['httpRequest'], entry
1360
1383
  end
1361
1384
  end
1362
1385
  end
@@ -1367,13 +1390,13 @@ module BaseTest
1367
1390
  setup_logging_stubs do
1368
1391
  d = create_driver
1369
1392
  @logs_sent = []
1370
- d.emit('httpRequest' => http_request_message.merge('latency' => input))
1393
+ d.emit('httpRequest' => HTTP_REQUEST_MESSAGE.merge('latency' => input))
1371
1394
  d.run
1372
1395
  end
1373
1396
  verify_log_entries(1, COMPUTE_PARAMS, 'httpRequest') do |entry|
1374
- assert_equal http_request_message.merge('latency' => expected),
1397
+ assert_equal HTTP_REQUEST_MESSAGE.merge('latency' => expected),
1375
1398
  entry['httpRequest'], entry
1376
- assert_nil get_fields(entry['jsonPayload'])['httpRequest'], entry
1399
+ assert_nil entry['jsonPayload']['httpRequest'], entry
1377
1400
  end
1378
1401
  end
1379
1402
  end
@@ -1388,12 +1411,12 @@ module BaseTest
1388
1411
  setup_logging_stubs do
1389
1412
  d = create_driver
1390
1413
  @logs_sent = []
1391
- d.emit('httpRequest' => http_request_message.merge('latency' => input))
1414
+ d.emit('httpRequest' => HTTP_REQUEST_MESSAGE.merge('latency' => input))
1392
1415
  d.run
1393
1416
  end
1394
1417
  verify_log_entries(1, COMPUTE_PARAMS, 'httpRequest') do |entry|
1395
- assert_equal http_request_message, entry['httpRequest'], entry
1396
- assert_nil get_fields(entry['jsonPayload'])['httpRequest'], entry
1418
+ assert_equal HTTP_REQUEST_MESSAGE, entry['httpRequest'], entry
1419
+ assert_nil entry['jsonPayload']['httpRequest'], entry
1397
1420
  end
1398
1421
  end
1399
1422
  end
@@ -1432,7 +1455,7 @@ module BaseTest
1432
1455
  custom_key: 'custom_source_location_key',
1433
1456
  custom_key_config: \
1434
1457
  CONFIG_CUSTOM_SOURCE_LOCATION_KEY_SPECIFIED,
1435
- sample_value: source_location_message)
1458
+ sample_value: SOURCE_LOCATION_MESSAGE)
1436
1459
  end
1437
1460
 
1438
1461
  def test_log_entry_span_id_field
@@ -1490,8 +1513,8 @@ module BaseTest
1490
1513
  def test_cascading_json_detection_with_log_entry_source_location_field
1491
1514
  verify_cascading_json_detection_with_log_entry_fields(
1492
1515
  'sourceLocation', DEFAULT_SOURCE_LOCATION_KEY,
1493
- root_level_value: source_location_message,
1494
- nested_level_value: source_location_message2)
1516
+ root_level_value: SOURCE_LOCATION_MESSAGE,
1517
+ nested_level_value: SOURCE_LOCATION_MESSAGE2)
1495
1518
  end
1496
1519
 
1497
1520
  def test_cascading_json_detection_with_log_entry_span_id_field
@@ -1652,11 +1675,11 @@ module BaseTest
1652
1675
  d.run
1653
1676
  end
1654
1677
  verify_log_entries(n, DOCKER_CONTAINER_PARAMS, 'jsonPayload') do |entry|
1655
- fields = get_fields(entry['jsonPayload'])
1678
+ fields = entry['jsonPayload']
1656
1679
  assert_equal 3, fields.size, entry
1657
- assert_equal "test log entry #{n}", get_string(fields['msg']), entry
1658
- assert_equal 'test', get_string(fields['tag2']), entry
1659
- assert_equal 5000, get_number(fields['data']), entry
1680
+ assert_equal "test log entry #{n}", fields['msg'], entry
1681
+ assert_equal 'test', fields['tag2'], entry
1682
+ assert_equal 5000, fields['data'], entry
1660
1683
  end
1661
1684
  assert_requested_metadata_agent_stub("container.#{DOCKER_CONTAINER_ID}")
1662
1685
  end
@@ -1771,10 +1794,10 @@ module BaseTest
1771
1794
  end
1772
1795
  verify_log_entries(1, test_params[:expected_params],
1773
1796
  'jsonPayload') do |entry|
1774
- fields = get_fields(entry['jsonPayload'])
1797
+ fields = entry['jsonPayload']
1775
1798
  assert_equal 2, fields.size, entry
1776
- assert_equal 'test log entry 0', get_string(fields['log']), entry
1777
- assert_equal K8S_STREAM, get_string(fields['stream']), entry
1799
+ assert_equal 'test log entry 0', fields['log'], entry
1800
+ assert_equal K8S_STREAM, fields['stream'], entry
1778
1801
  end
1779
1802
  end
1780
1803
  end
@@ -1868,10 +1891,10 @@ module BaseTest
1868
1891
  end
1869
1892
  verify_log_entries(1, test_params[:expected_params],
1870
1893
  'jsonPayload') do |entry|
1871
- fields = get_fields(entry['jsonPayload'])
1894
+ fields = entry['jsonPayload']
1872
1895
  assert_equal 2, fields.size, entry
1873
- assert_equal 'test log entry 0', get_string(fields['log']), entry
1874
- assert_equal K8S_STREAM, get_string(fields['stream']), entry
1896
+ assert_equal 'test log entry 0', fields['log'], entry
1897
+ assert_equal K8S_STREAM, fields['stream'], entry
1875
1898
  end
1876
1899
  end
1877
1900
  end
@@ -1928,10 +1951,10 @@ module BaseTest
1928
1951
  end
1929
1952
  verify_log_entries(1, test_params[:expected_params],
1930
1953
  'jsonPayload') do |entry|
1931
- fields = get_fields(entry['jsonPayload'])
1954
+ fields = entry['jsonPayload']
1932
1955
  assert_equal 2, fields.size, entry
1933
- assert_equal 'test log entry 0', get_string(fields['log']), entry
1934
- assert_equal K8S_STREAM, get_string(fields['stream']), entry
1956
+ assert_equal 'test log entry 0', fields['log'], entry
1957
+ assert_equal K8S_STREAM, fields['stream'], entry
1935
1958
  end
1936
1959
  end
1937
1960
  end
@@ -1951,10 +1974,10 @@ module BaseTest
1951
1974
  verify_log_entries(1, DOCKER_CONTAINER_PARAMS_NO_STREAM) do |entry, i|
1952
1975
  verify_default_log_entry_text(entry['textPayload'], i, entry)
1953
1976
  # Timestamp in 'time' field from log entry should be set properly.
1977
+ actual_timestamp = timestamp_parse(entry['timestamp'])
1954
1978
  assert_equal DOCKER_CONTAINER_SECONDS_EPOCH,
1955
- entry['timestamp']['seconds'], entry
1956
- assert_equal DOCKER_CONTAINER_NANOS,
1957
- entry['timestamp']['nanos'], entry
1979
+ actual_timestamp['seconds'], entry
1980
+ assert_equal DOCKER_CONTAINER_NANOS, actual_timestamp['nanos'], entry
1958
1981
  end
1959
1982
  assert_requested_metadata_agent_stub(
1960
1983
  "#{DOCKER_CONTAINER_LOCAL_RESOURCE_ID_PREFIX}.#{DOCKER_CONTAINER_NAME}")
@@ -2381,8 +2404,9 @@ module BaseTest
2381
2404
  end
2382
2405
  verify_log_entries(n, expected_params) do |entry, i|
2383
2406
  verify_default_log_entry_text(entry['textPayload'], i, entry)
2384
- assert_equal K8S_SECONDS_EPOCH, entry['timestamp']['seconds'], entry
2385
- assert_equal K8S_NANOS, entry['timestamp']['nanos'], entry
2407
+ actual_timestamp = timestamp_parse(entry['timestamp'])
2408
+ assert_equal K8S_SECONDS_EPOCH, actual_timestamp['seconds'], entry
2409
+ assert_equal K8S_NANOS, actual_timestamp['nanos'], entry
2386
2410
  assert_equal CONTAINER_SEVERITY, entry['severity'], entry
2387
2411
  end
2388
2412
  end
@@ -2394,13 +2418,13 @@ module BaseTest
2394
2418
  # LogEntry info from. The values are lists of two elements: the name of
2395
2419
  # the subfield in LogEntry object and the expected value of that field.
2396
2420
  DEFAULT_HTTP_REQUEST_KEY => [
2397
- 'httpRequest', http_request_message],
2421
+ 'httpRequest', HTTP_REQUEST_MESSAGE],
2398
2422
  DEFAULT_LABELS_KEY => [
2399
2423
  'labels', COMPUTE_PARAMS[:labels].merge(LABELS_MESSAGE)],
2400
2424
  DEFAULT_OPERATION_KEY => [
2401
2425
  'operation', OPERATION_MESSAGE],
2402
2426
  DEFAULT_SOURCE_LOCATION_KEY => [
2403
- 'sourceLocation', source_location_message]
2427
+ 'sourceLocation', SOURCE_LOCATION_MESSAGE]
2404
2428
  }
2405
2429
  end
2406
2430
 
@@ -2416,7 +2440,7 @@ module BaseTest
2416
2440
  verify_log_entries(1, COMPUTE_PARAMS, destination_key,
2417
2441
  check_exact_entry_labels) do |entry|
2418
2442
  assert_equal payload_value, entry[destination_key], entry
2419
- fields = get_fields(entry['jsonPayload'])
2443
+ fields = entry['jsonPayload']
2420
2444
  assert_nil fields[payload_key], entry
2421
2445
  end
2422
2446
  end
@@ -2432,9 +2456,9 @@ module BaseTest
2432
2456
  end
2433
2457
  verify_log_entries(1, COMPUTE_PARAMS, destination_key) do |entry|
2434
2458
  assert_equal payload_value, entry[destination_key], entry
2435
- fields = get_fields(entry['jsonPayload'])
2436
- request = get_fields(get_struct(fields[payload_key]))
2437
- assert_equal 'value', get_string(request['otherKey']), entry
2459
+ fields = entry['jsonPayload']
2460
+ request = fields[payload_key]
2461
+ assert_equal 'value', request['otherKey'], entry
2438
2462
  end
2439
2463
  end
2440
2464
 
@@ -2449,7 +2473,7 @@ module BaseTest
2449
2473
  end
2450
2474
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
2451
2475
  # The malformed field has been removed from the payload.
2452
- assert_true get_fields(entry['jsonPayload']).empty?, entry
2476
+ assert_true entry['jsonPayload'].empty?, entry
2453
2477
  # No additional labels.
2454
2478
  assert_equal COMPUTE_PARAMS[:labels].size,
2455
2479
  entry[destination_key].size, entry
@@ -2467,8 +2491,8 @@ module BaseTest
2467
2491
  end
2468
2492
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
2469
2493
  # Verify that we leave the malformed field as it is.
2470
- field = get_fields(entry['jsonPayload'])[payload_key]
2471
- assert_equal 'a_string', get_string(field), entry
2494
+ field = entry['jsonPayload'][payload_key]
2495
+ assert_equal 'a_string', field, entry
2472
2496
  assert_false entry.key?(destination_key), entry
2473
2497
  end
2474
2498
  end
@@ -2484,7 +2508,7 @@ module BaseTest
2484
2508
  end
2485
2509
 
2486
2510
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload') do |entry|
2487
- fields = get_fields(entry['jsonPayload'])
2511
+ fields = entry['jsonPayload']
2488
2512
  assert_false fields.key?(payload_key), entry
2489
2513
  if payload_key == DEFAULT_LABELS_KEY
2490
2514
  # No additional labels.
@@ -2576,10 +2600,10 @@ module BaseTest
2576
2600
  entry[log_entry_field], expected_value, default_value,
2577
2601
  "Index #{index} failed. #{expected_value} is expected for " \
2578
2602
  "#{log_entry_field} field."
2579
- payload_fields = get_fields(entry['jsonPayload'])
2603
+ payload_fields = entry['jsonPayload']
2580
2604
  assert_equal structured_log_entry.size, payload_fields.size
2581
2605
  payload_fields.each do |key, value|
2582
- assert_equal structured_log_entry[key], get_string(value)
2606
+ assert_equal structured_log_entry[key], value
2583
2607
  end
2584
2608
  end
2585
2609
  end
@@ -2632,10 +2656,10 @@ module BaseTest
2632
2656
  end
2633
2657
  verify_log_entries(1, COMPUTE_PARAMS, 'jsonPayload', false) do |entry|
2634
2658
  assert_equal input[:expected_field_value], entry[log_entry_field], input
2635
- payload_fields = get_fields(entry['jsonPayload'])
2659
+ payload_fields = entry['jsonPayload']
2636
2660
  assert_equal input[:expected_payload].size, payload_fields.size, input
2637
2661
  payload_fields.each do |key, value|
2638
- assert_hash_equal_json(input[:expected_payload][key], value)
2662
+ assert_equal input[:expected_payload][key], value
2639
2663
  end
2640
2664
  end
2641
2665
  end
@@ -2643,35 +2667,19 @@ module BaseTest
2643
2667
 
2644
2668
  # Replace the 'referer' field with nil.
2645
2669
  def http_request_message_with_nil_referer
2646
- http_request_message.merge('referer' => nil)
2670
+ HTTP_REQUEST_MESSAGE.merge('referer' => nil)
2647
2671
  end
2648
2672
 
2649
2673
  # Unset the 'referer' field.
2650
2674
  def http_request_message_with_absent_referer
2651
- http_request_message.reject do |k, _|
2675
+ HTTP_REQUEST_MESSAGE.reject do |k, _|
2652
2676
  k == 'referer'
2653
2677
  end
2654
2678
  end
2655
2679
 
2656
2680
  # The conversions from user input to output.
2657
2681
  def latency_conversion
2658
- {
2659
- '32 s' => { 'seconds' => 32 },
2660
- '32s' => { 'seconds' => 32 },
2661
- '0.32s' => { 'nanos' => 320_000_000 },
2662
- ' 123 s ' => { 'seconds' => 123 },
2663
- '1.3442 s' => { 'seconds' => 1, 'nanos' => 344_200_000 },
2664
-
2665
- # Test whitespace.
2666
- # \t: tab. \r: carriage return. \n: line break.
2667
- # \v: vertical whitespace. \f: form feed.
2668
- "\t123.5\ts\t" => { 'seconds' => 123, 'nanos' => 500_000_000 },
2669
- "\r123.5\rs\r" => { 'seconds' => 123, 'nanos' => 500_000_000 },
2670
- "\n123.5\ns\n" => { 'seconds' => 123, 'nanos' => 500_000_000 },
2671
- "\v123.5\vs\v" => { 'seconds' => 123, 'nanos' => 500_000_000 },
2672
- "\f123.5\fs\f" => { 'seconds' => 123, 'nanos' => 500_000_000 },
2673
- "\r123.5\ts\f" => { 'seconds' => 123, 'nanos' => 500_000_000 }
2674
- }
2682
+ _undefined
2675
2683
  end
2676
2684
 
2677
2685
  # This module expects the methods below to be overridden.
@@ -2715,53 +2723,15 @@ module BaseTest
2715
2723
  assert_equal(expected_value, metric_value)
2716
2724
  end
2717
2725
 
2718
- # Get the fields of the payload.
2719
- def get_fields(_payload)
2720
- _undefined
2721
- end
2722
-
2723
- # Get the value of a struct field.
2724
- def get_struct(_field)
2725
- _undefined
2726
- end
2727
-
2728
- # Get the value of a string field.
2729
- def get_string(_field)
2730
- _undefined
2731
- end
2732
-
2733
- # Get the value of a number field.
2734
- def get_number(_field)
2735
- _undefined
2736
- end
2737
-
2738
- # The null value.
2739
- def null_value(_field)
2740
- _undefined
2741
- end
2742
-
2743
- # Defined in specific gRPC or REST files.
2744
- def http_request_message
2745
- _undefined
2746
- end
2747
-
2748
- # Defined in specific gRPC or REST files.
2749
- def source_location_message
2750
- _undefined
2751
- end
2752
-
2753
- # Defined in specific gRPC or REST files.
2754
- def source_location_message2
2755
- _undefined
2756
- end
2757
-
2758
2726
  # Defined in specific gRPC or REST files.
2759
2727
  def expected_operation_message2
2760
2728
  _undefined
2761
2729
  end
2762
2730
 
2731
+ # Parse timestamp and convert it to a hash with the "seconds" and "nanos" keys
2732
+ # if necessary.
2763
2733
  # Defined in specific gRPC or REST files.
2764
- def assert_hash_equal_json(_expected, _actual)
2734
+ def timestamp_parse(_timestamp)
2765
2735
  _undefined
2766
2736
  end
2767
2737