fluent-plugin-google-cloud 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d9571be109300197bc432ba7f561345addc0c2e9b477b676a05c0a56f661b46
4
- data.tar.gz: b18d90aa70e5b25876fbe64912096225c21ad52e3bb81ad056fb0f5938d4efa4
3
+ metadata.gz: fbcd8e43170062fe787c54619c5ad959f0a8d1603fb7dfc2a1c2be5ac7997d4e
4
+ data.tar.gz: d22989b9d59f470ecc3e184bff6bd1bc049f66f0d0e3918a649f36e2cbbd0424
5
5
  SHA512:
6
- metadata.gz: c64ce586b924a3900ea389ab424cf5027e2e5df3703d23afde7f3076c805acc9da6c382256f722ba463e5af64f2dd8f4a311457ceb6276c76c203d2d115b3b8f
7
- data.tar.gz: 144524c87fb2d803591d57fa0f62543a49121a4028ac2cba0efb1cf45a1f7a19a5ae094b0dc3d56651609efc36f143fe0e9aadf02700b88c93d39f0c353780f5
6
+ metadata.gz: b5b5e63ddf4cc5bffcc92ae9a89dc47b25570c4108c5fde3a34a9c3a77b8b15dbeb2832e55295a5b44505fb2b7b3919a521ab89f847642427728f8c698537a1e
7
+ data.tar.gz: 19554fb0fc748dc0a246850053874dcc53dbc7264d4d75d321e0a64c812f2beb887616945d73f104090aae92656386dde464f87b52ffc9e6c745ad72c10d2bf3
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-google-cloud (0.7.2)
4
+ fluent-plugin-google-cloud (0.7.3)
5
5
  fluentd (= 1.2.5)
6
6
  google-api-client (= 0.23.9)
7
7
  google-cloud-logging (= 1.5.4)
@@ -129,7 +129,7 @@ GEM
129
129
  stackdriver-core (1.3.3)
130
130
  google-cloud-core (~> 1.2)
131
131
  strptime (0.2.3)
132
- test-unit (3.2.8)
132
+ test-unit (3.2.9)
133
133
  power_assert
134
134
  thread_safe (0.3.6)
135
135
  tzinfo (1.2.5)
@@ -137,7 +137,7 @@ GEM
137
137
  tzinfo-data (1.2018.7)
138
138
  tzinfo (>= 1.0.0)
139
139
  uber (0.1.0)
140
- unicode-display_width (1.4.0)
140
+ unicode-display_width (1.4.1)
141
141
  webmock (2.3.2)
142
142
  addressable (>= 2.3.6)
143
143
  crack (>= 0.3.2)
@@ -10,7 +10,7 @@ eos
10
10
  gem.homepage =
11
11
  'https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud'
12
12
  gem.license = 'Apache-2.0'
13
- gem.version = '0.7.2'
13
+ gem.version = '0.7.3'
14
14
  gem.authors = ['Stackdriver Agents Team']
15
15
  gem.email = ['stackdriver-agents@google.com']
16
16
  gem.required_ruby_version = Gem::Requirement.new('>= 2.2')
@@ -186,6 +186,7 @@ module Fluent
186
186
  %w(responseSize response_size parse_int),
187
187
  %w(userAgent user_agent parse_string),
188
188
  %w(remoteIp remote_ip parse_string),
189
+ %w(serverIp server_ip parse_string),
189
190
  %w(referer referer parse_string),
190
191
  %w(cacheHit cache_hit parse_bool),
191
192
  %w(cacheValidatedWithOriginServer
@@ -609,7 +610,14 @@ module Fluent
609
610
  # allow for determining whether we should parse the log or message
610
611
  # field.
611
612
  preserved_keys = [
612
- 'time', 'severity', @trace_key, @span_id_key, @insert_id_key
613
+ 'time',
614
+ 'severity',
615
+ @http_request_key,
616
+ @insert_id_key,
617
+ @operation_key,
618
+ @source_location_key,
619
+ @span_id_key,
620
+ @trace_key
613
621
  ]
614
622
 
615
623
  # If the log is json, we want to export it as a structured log
@@ -612,6 +612,30 @@ module BaseTest
612
612
  end
613
613
  end
614
614
 
615
+ # Verify that when the log has only one effective field (named 'log',
616
+ # 'message', or 'msg') and the field is in JSON format, the field is parsed as
617
+ # JSON and sent as jsonPayload.
618
+ def test_detect_json_auto_triggered_with_one_field
619
+ setup_gce_metadata_stubs
620
+ json_string = '{"msg": "test log entry 0", "tag2": "test", ' \
621
+ '"data": 5000, "some_null_field": null}'
622
+ setup_logging_stubs do
623
+ d = create_driver(DETECT_JSON_CONFIG)
624
+ %w(message log msg).each do |field|
625
+ d.emit(PRESERVED_KEYS_MAP.merge(field => json_string))
626
+ end
627
+ d.run
628
+ end
629
+ verify_log_entries(3, COMPUTE_PARAMS, 'jsonPayload') do |entry|
630
+ fields = get_fields(entry['jsonPayload'])
631
+ assert_equal 4, fields.size, entry
632
+ assert_equal 'test log entry 0', get_string(fields['msg']), entry
633
+ assert_equal 'test', get_string(fields['tag2']), entry
634
+ assert_equal 5000, get_number(fields['data']), entry
635
+ assert_equal null_value, fields['some_null_field'], entry
636
+ end
637
+ end
638
+
615
639
  # Verify that we drop the log entries when 'require_valid_tags' is true and
616
640
  # any non-string tags or tags with non-utf8 characters are detected.
617
641
  def test_reject_invalid_tags_with_require_valid_tags_true
@@ -1219,6 +1243,8 @@ module BaseTest
1219
1243
  verify_log_entries(1, DATAFLOW_PARAMS)
1220
1244
  end
1221
1245
 
1246
+ # Verify the subfields extraction of LogEntry fields.
1247
+
1222
1248
  def test_log_entry_http_request_field_from_record
1223
1249
  verify_subfields_from_record(DEFAULT_HTTP_REQUEST_KEY)
1224
1250
  end
@@ -1231,6 +1257,9 @@ module BaseTest
1231
1257
  verify_subfields_from_record(DEFAULT_OPERATION_KEY)
1232
1258
  end
1233
1259
 
1260
+ # Verify the subfields extraction of LogEntry fields when there are other
1261
+ # fields.
1262
+
1234
1263
  def test_log_entry_http_request_field_partial_from_record
1235
1264
  verify_subfields_partial_from_record(DEFAULT_HTTP_REQUEST_KEY)
1236
1265
  end
@@ -1243,6 +1272,8 @@ module BaseTest
1243
1272
  verify_subfields_partial_from_record(DEFAULT_OPERATION_KEY)
1244
1273
  end
1245
1274
 
1275
+ # Verify the subfields extraction of LogEntry fields when they are not hashes.
1276
+
1246
1277
  def test_log_entry_http_request_field_when_not_hash
1247
1278
  verify_subfields_when_not_hash(DEFAULT_HTTP_REQUEST_KEY)
1248
1279
  end
@@ -1255,6 +1286,8 @@ module BaseTest
1255
1286
  verify_subfields_when_not_hash(DEFAULT_OPERATION_KEY)
1256
1287
  end
1257
1288
 
1289
+ # Verify the subfields extraction of LogEntry fields when they are nil.
1290
+
1258
1291
  def test_log_entry_http_request_field_when_nil
1259
1292
  verify_subfields_when_nil(DEFAULT_HTTP_REQUEST_KEY)
1260
1293
  end
@@ -1324,9 +1357,23 @@ module BaseTest
1324
1357
  end
1325
1358
  end
1326
1359
 
1327
- def test_log_entry_trace_field
1328
- verify_field_key('trace', DEFAULT_TRACE_KEY, 'custom_trace_key',
1329
- CONFIG_CUSTOM_TRACE_KEY_SPECIFIED, TRACE)
1360
+ # Verify the default and customization of LogEntry field extraction key.
1361
+
1362
+ def test_log_entry_insert_id_field
1363
+ verify_field_key('insertId', DEFAULT_INSERT_ID_KEY, 'custom_insert_id_key',
1364
+ CONFIG_CUSTOM_INSERT_ID_KEY_SPECIFIED, INSERT_ID)
1365
+ end
1366
+
1367
+ def test_log_entry_operation_field
1368
+ verify_field_key('operation', DEFAULT_OPERATION_KEY, 'custom_operation_key',
1369
+ CONFIG_CUSTOM_OPERATION_KEY_SPECIFIED, OPERATION_MESSAGE)
1370
+ end
1371
+
1372
+ def test_log_entry_source_location_field
1373
+ verify_field_key('sourceLocation', DEFAULT_SOURCE_LOCATION_KEY,
1374
+ 'custom_source_location_key',
1375
+ CONFIG_CUSTOM_SOURCE_LOCATION_KEY_SPECIFIED,
1376
+ source_location_message)
1330
1377
  end
1331
1378
 
1332
1379
  def test_log_entry_span_id_field
@@ -1334,24 +1381,47 @@ module BaseTest
1334
1381
  CONFIG_CUSTOM_SPAN_ID_KEY_SPECIFIED, SPAN_ID)
1335
1382
  end
1336
1383
 
1337
- def test_log_entry_insert_id_field
1338
- verify_field_key('insertId', DEFAULT_INSERT_ID_KEY, 'custom_insert_id_key',
1339
- CONFIG_CUSTOM_INSERT_ID_KEY_SPECIFIED, INSERT_ID)
1384
+ def test_log_entry_trace_field
1385
+ verify_field_key('trace', DEFAULT_TRACE_KEY, 'custom_trace_key',
1386
+ CONFIG_CUSTOM_TRACE_KEY_SPECIFIED, TRACE)
1340
1387
  end
1341
1388
 
1342
- def test_cascading_json_detection_with_log_entry_trace_field
1389
+ # Verify the cascading JSON detection of LogEntry fields.
1390
+
1391
+ def test_cascading_json_detection_with_log_entry_insert_id_field
1343
1392
  verify_cascading_json_detection_with_log_entry_fields(
1344
- 'trace', DEFAULT_TRACE_KEY, TRACE, TRACE2)
1393
+ 'insertId', DEFAULT_INSERT_ID_KEY,
1394
+ root_level_value: INSERT_ID,
1395
+ nested_level_value: INSERT_ID2)
1396
+ end
1397
+
1398
+ def test_cascading_json_detection_with_log_entry_operation_field
1399
+ verify_cascading_json_detection_with_log_entry_fields(
1400
+ 'operation', DEFAULT_OPERATION_KEY,
1401
+ root_level_value: OPERATION_MESSAGE,
1402
+ nested_level_value: OPERATION_MESSAGE2,
1403
+ expected_value_from_nested: expected_operation_message2)
1404
+ end
1405
+
1406
+ def test_cascading_json_detection_with_log_entry_source_location_field
1407
+ verify_cascading_json_detection_with_log_entry_fields(
1408
+ 'sourceLocation', DEFAULT_SOURCE_LOCATION_KEY,
1409
+ root_level_value: source_location_message,
1410
+ nested_level_value: source_location_message2)
1345
1411
  end
1346
1412
 
1347
1413
  def test_cascading_json_detection_with_log_entry_span_id_field
1348
1414
  verify_cascading_json_detection_with_log_entry_fields(
1349
- 'spanId', DEFAULT_SPAN_ID_KEY, SPAN_ID, SPAN_ID2)
1415
+ 'spanId', DEFAULT_SPAN_ID_KEY,
1416
+ root_level_value: SPAN_ID,
1417
+ nested_level_value: SPAN_ID2)
1350
1418
  end
1351
1419
 
1352
- def test_cascading_json_detection_with_log_entry_insert_id_field
1420
+ def test_cascading_json_detection_with_log_entry_trace_field
1353
1421
  verify_cascading_json_detection_with_log_entry_fields(
1354
- 'insertId', DEFAULT_INSERT_ID_KEY, INSERT_ID, INSERT_ID2)
1422
+ 'trace', DEFAULT_TRACE_KEY,
1423
+ root_level_value: TRACE,
1424
+ nested_level_value: TRACE2)
1355
1425
  end
1356
1426
 
1357
1427
  # Metadata Agent related tests.
@@ -2177,7 +2247,14 @@ module BaseTest
2177
2247
  # left with name "log", "message" or "msg". This test verifies additional
2178
2248
  # LogEntry fields like spanId and traceId do not disable that by accident.
2179
2249
  def verify_cascading_json_detection_with_log_entry_fields(
2180
- log_entry_field, default_key, root_level_value, nested_level_value)
2250
+ log_entry_field, default_key, expectation)
2251
+ root_level_value = expectation[:root_level_value]
2252
+ nested_level_value = expectation[:nested_level_value]
2253
+ expected_value_from_root = expectation.fetch(
2254
+ :expected_value_from_root, root_level_value)
2255
+ expected_value_from_nested = expectation.fetch(
2256
+ :expected_value_from_nested, nested_level_value)
2257
+
2181
2258
  setup_gce_metadata_stubs
2182
2259
 
2183
2260
  # {
@@ -2215,9 +2292,9 @@ module BaseTest
2215
2292
  default_key => root_level_value)
2216
2293
 
2217
2294
  {
2218
- log_entry_with_root_level_field => root_level_value,
2219
- log_entry_with_nested_level_field => nested_level_value,
2220
- log_entry_with_both_level_fields => nested_level_value
2295
+ log_entry_with_root_level_field => expected_value_from_root,
2296
+ log_entry_with_nested_level_field => expected_value_from_nested,
2297
+ log_entry_with_both_level_fields => expected_value_from_nested
2221
2298
  }.each_with_index do |(input_log_entry, expected_value), index|
2222
2299
  setup_logging_stubs do
2223
2300
  @logs_sent = []
@@ -2283,20 +2360,12 @@ module BaseTest
2283
2360
  payload_fields = get_fields(entry['jsonPayload'])
2284
2361
  assert_equal input[:expected_payload].size, payload_fields.size, input
2285
2362
  payload_fields.each do |key, value|
2286
- assert_equal input[:expected_payload][key], get_string(value), input
2363
+ assert_hash_equal_json(input[:expected_payload][key], value)
2287
2364
  end
2288
2365
  end
2289
2366
  end
2290
2367
  end
2291
2368
 
2292
- def http_request_message
2293
- HTTP_REQUEST_MESSAGE
2294
- end
2295
-
2296
- def source_location_message
2297
- SOURCE_LOCATION_MESSAGE
2298
- end
2299
-
2300
2369
  # Replace the 'referer' field with nil.
2301
2370
  def http_request_message_with_nil_referer
2302
2371
  http_request_message.merge('referer' => nil)
@@ -2395,6 +2464,31 @@ module BaseTest
2395
2464
  _undefined
2396
2465
  end
2397
2466
 
2467
+ # Defined in specific gRPC or REST files.
2468
+ def http_request_message
2469
+ _undefined
2470
+ end
2471
+
2472
+ # Defined in specific gRPC or REST files.
2473
+ def source_location_message
2474
+ _undefined
2475
+ end
2476
+
2477
+ # Defined in specific gRPC or REST files.
2478
+ def source_location_message2
2479
+ _undefined
2480
+ end
2481
+
2482
+ # Defined in specific gRPC or REST files.
2483
+ def expected_operation_message2
2484
+ _undefined
2485
+ end
2486
+
2487
+ # Defined in specific gRPC or REST files.
2488
+ def assert_hash_equal_json(_expected, _actual)
2489
+ _undefined
2490
+ end
2491
+
2398
2492
  def _undefined
2399
2493
  raise "Method #{__callee__} is unimplemented and needs to be overridden."
2400
2494
  end
@@ -371,16 +371,24 @@ module Constants
371
371
  label_map { "name": "#{ML_CONSTANTS[:service]}/job_id/log_area" }
372
372
  ).freeze
373
373
 
374
- CONFIG_CUSTOM_TRACE_KEY_SPECIFIED = %(
375
- trace_key custom_trace_key
374
+ CONFIG_CUSTOM_INSERT_ID_KEY_SPECIFIED = %(
375
+ insert_id_key custom_insert_id_key
376
+ ).freeze
377
+
378
+ CONFIG_CUSTOM_OPERATION_KEY_SPECIFIED = %(
379
+ operation_key custom_operation_key
380
+ ).freeze
381
+
382
+ CONFIG_CUSTOM_SOURCE_LOCATION_KEY_SPECIFIED = %(
383
+ source_location_key custom_source_location_key
376
384
  ).freeze
377
385
 
378
386
  CONFIG_CUSTOM_SPAN_ID_KEY_SPECIFIED = %(
379
387
  span_id_key custom_span_id_key
380
388
  ).freeze
381
389
 
382
- CONFIG_CUSTOM_INSERT_ID_KEY_SPECIFIED = %(
383
- insert_id_key custom_insert_id_key
390
+ CONFIG_CUSTOM_TRACE_KEY_SPECIFIED = %(
391
+ trace_key custom_trace_key
384
392
  ).freeze
385
393
 
386
394
  # Service configurations for various services.
@@ -740,6 +748,7 @@ module Constants
740
748
  'responseSize' => 65,
741
749
  'userAgent' => 'USER AGENT 1.0',
742
750
  'remoteIp' => '55.55.55.55',
751
+ 'serverIp' => '66.66.66.66',
743
752
  'referer' => 'http://referer/',
744
753
  'cacheHit' => true,
745
754
  'cacheValidatedWithOriginServer' => true
@@ -751,12 +760,24 @@ module Constants
751
760
  'line' => 18
752
761
  }.freeze
753
762
 
763
+ SOURCE_LOCATION_MESSAGE2 = {
764
+ 'file' => 'src/file',
765
+ 'function' => 'my_func',
766
+ 'line' => 8
767
+ }.freeze
768
+
754
769
  OPERATION_MESSAGE = {
755
770
  'id' => 'op_id',
756
771
  'producer' => 'my/app',
757
772
  'last' => true
758
773
  }.freeze
759
774
 
775
+ OPERATION_MESSAGE2 = {
776
+ 'id' => 'op_id2',
777
+ 'producer' => 'my/app2',
778
+ 'last' => false
779
+ }.freeze
780
+
760
781
  CUSTOM_LABELS_MESSAGE = {
761
782
  'customKey' => 'value'
762
783
  }.freeze
@@ -950,4 +971,15 @@ module Constants
950
971
  'grpc-status-details-bin' => status_details.to_proto
951
972
  }.freeze
952
973
  end
974
+
975
+ PRESERVED_KEYS_MAP = {
976
+ 'time' => K8S_TIMESTAMP,
977
+ 'severity' => CONTAINER_SEVERITY,
978
+ DEFAULT_HTTP_REQUEST_KEY => HTTP_REQUEST_MESSAGE,
979
+ DEFAULT_INSERT_ID_KEY => INSERT_ID,
980
+ DEFAULT_OPERATION_KEY => OPERATION_MESSAGE,
981
+ DEFAULT_SOURCE_LOCATION_KEY => SOURCE_LOCATION_MESSAGE,
982
+ DEFAULT_SPAN_ID_KEY => SPAN_ID,
983
+ DEFAULT_TRACE_KEY => TRACE
984
+ }.freeze
953
985
  end
@@ -407,24 +407,44 @@ class GoogleCloudOutputTest < Test::Unit::TestCase
407
407
  nil
408
408
  end
409
409
 
410
- # 'responseSize' and 'requestSize' are Integers in the gRPC proto, yet Strings
411
- # in REST API client.
412
- # TODO(qingling128): Address this accordingly once the following question is
413
- # answered: https://github.com/google/google-api-ruby-client/issues/619.
414
- # If this discrepancy is legit, add some comments to explain the reason.
415
- # Otherwise once the discrepancy is fixed, we need to upgrade to that version
416
- # and change our tests accordingly.
410
+ # Convert certain fields to strings for compatibility between gRPC and REST.
411
+ # See more details in:
412
+ # https://github.com/google/google-api-ruby-client/issues/619.
413
+ def convert_subfields_to_strings(full_hash, fields_to_convert)
414
+ full_hash.merge(Hash[
415
+ fields_to_convert.collect do |field_name|
416
+ [field_name, full_hash[field_name].to_s]
417
+ end
418
+ ])
419
+ end
420
+
421
+ # 'responseSize' and 'requestSize' are Integers in the gRPC protos, yet
422
+ # Strings in REST API client libraries.
417
423
  def http_request_message
418
- HTTP_REQUEST_MESSAGE.merge(
419
- 'responseSize' => HTTP_REQUEST_MESSAGE['responseSize'].to_s,
420
- 'requestSize' => HTTP_REQUEST_MESSAGE['requestSize'].to_s
421
- )
424
+ convert_subfields_to_strings(
425
+ HTTP_REQUEST_MESSAGE, %w(responseSize requestSize))
422
426
  end
423
427
 
424
428
  # 'line' is an Integer in the gRPC proto, yet a String in the REST API client.
425
429
  def source_location_message
426
- SOURCE_LOCATION_MESSAGE.merge(
427
- 'line' => SOURCE_LOCATION_MESSAGE['line'].to_s
428
- )
430
+ convert_subfields_to_strings(
431
+ SOURCE_LOCATION_MESSAGE, ['line'])
432
+ end
433
+
434
+ # 'line' is an Integer in the gRPC proto, yet a String in the REST API client.
435
+ def source_location_message2
436
+ convert_subfields_to_strings(
437
+ SOURCE_LOCATION_MESSAGE2, ['line'])
438
+ end
439
+
440
+ def expected_operation_message2
441
+ OPERATION_MESSAGE2
442
+ end
443
+
444
+ # Both expected and actual are Ruby hashes that represent JSON
445
+ # objects.
446
+ # This method has a different implementation at the gRPC side.
447
+ def assert_hash_equal_json(expected, actual)
448
+ assert_equal expected, actual, "expected: #{expected}\nactual: #{actual}"
429
449
  end
430
450
  end
@@ -466,8 +466,79 @@ class GoogleCloudOutputGRPCTest < Test::Unit::TestCase
466
466
  field['numberValue']
467
467
  end
468
468
 
469
+ def get_bool(field)
470
+ field['boolValue']
471
+ end
472
+
469
473
  # The null value.
470
474
  def null_value
471
475
  { 'nullValue' => 'NULL_VALUE' }
472
476
  end
477
+
478
+ def http_request_message
479
+ HTTP_REQUEST_MESSAGE
480
+ end
481
+
482
+ def source_location_message
483
+ SOURCE_LOCATION_MESSAGE
484
+ end
485
+
486
+ def source_location_message2
487
+ SOURCE_LOCATION_MESSAGE2
488
+ end
489
+
490
+ def expected_operation_message2
491
+ # 'last' is a boolean field with false as default value. Protobuf omit
492
+ # fields with default values during deserialization.
493
+ OPERATION_MESSAGE2.reject { |k, _| k == 'last' }
494
+ end
495
+
496
+ # expected: A Ruby hash that represents a JSON object.
497
+ # e.g.:
498
+ # {
499
+ # "file" => "source/file",
500
+ # "function" => "my_function",
501
+ # "line" => 18
502
+ # }
503
+ #
504
+ # actual: A Ruby hash that represents a Proto object.
505
+ # e.g.:
506
+ # {
507
+ # "structValue" => {
508
+ # "fields" => {
509
+ # "file" => {
510
+ # "stringValue" => "source/file"
511
+ # },
512
+ # "function" => {
513
+ # "stringValue" => "my_function"
514
+ # },
515
+ # "line" => {
516
+ # "numberValue" => 18
517
+ # }
518
+ # }
519
+ # }
520
+ # }
521
+ # This method has a different implementation at the REST side.
522
+ def assert_hash_equal_json(expected, actual)
523
+ error_message = "expected: #{expected}\nactual: #{actual}"
524
+ assert_true actual.is_a?(Hash),
525
+ "Expect the actual value to be a hash. #{error_message}"
526
+ if actual.key?('stringValue')
527
+ assert_equal expected, get_string(actual), error_message
528
+ elsif actual.key?('numberValue')
529
+ assert_equal expected, get_number(actual), error_message
530
+ elsif actual.key?('boolValue')
531
+ assert_equal expected, get_bool(actual), error_message
532
+ elsif actual.key?('structValue')
533
+ expected_copy = expected.dup
534
+ get_fields(get_struct(actual)).each do |field_name, nested_actual|
535
+ assert_hash_equal_json expected_copy[field_name], nested_actual
536
+ expected_copy.reject! { |k, _| k == field_name }
537
+ end
538
+ # Make sure all fields are matched.
539
+ assert_true expected_copy.empty?
540
+ else
541
+ assert_true false, "Unsupported proto format. #{error_message}"
542
+ end
543
+ end
473
544
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-google-cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stackdriver Agents Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-30 00:00:00.000000000 Z
11
+ date: 2018-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd