wavefront-sdk 1.6.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -0
  3. data/HISTORY.md +39 -13
  4. data/README.md +75 -28
  5. data/Rakefile +1 -1
  6. data/lib/wavefront-sdk/alert.rb +113 -17
  7. data/lib/wavefront-sdk/cloudintegration.rb +8 -8
  8. data/lib/wavefront-sdk/core/api.rb +99 -0
  9. data/lib/wavefront-sdk/core/api_caller.rb +211 -0
  10. data/lib/wavefront-sdk/{exception.rb → core/exception.rb} +11 -6
  11. data/lib/wavefront-sdk/{logger.rb → core/logger.rb} +2 -3
  12. data/lib/wavefront-sdk/{response.rb → core/response.rb} +69 -52
  13. data/lib/wavefront-sdk/credentials.rb +6 -3
  14. data/lib/wavefront-sdk/dashboard.rb +14 -14
  15. data/lib/wavefront-sdk/{constants.rb → defs/constants.rb} +1 -0
  16. data/lib/wavefront-sdk/defs/version.rb +1 -0
  17. data/lib/wavefront-sdk/derivedmetric.rb +14 -14
  18. data/lib/wavefront-sdk/distribution.rb +75 -0
  19. data/lib/wavefront-sdk/event.rb +13 -13
  20. data/lib/wavefront-sdk/externallink.rb +8 -8
  21. data/lib/wavefront-sdk/integration.rb +9 -9
  22. data/lib/wavefront-sdk/maintenancewindow.rb +54 -8
  23. data/lib/wavefront-sdk/message.rb +4 -4
  24. data/lib/wavefront-sdk/metric.rb +3 -3
  25. data/lib/wavefront-sdk/notificant.rb +9 -9
  26. data/lib/wavefront-sdk/paginator/base.rb +148 -0
  27. data/lib/wavefront-sdk/paginator/delete.rb +11 -0
  28. data/lib/wavefront-sdk/paginator/get.rb +11 -0
  29. data/lib/wavefront-sdk/paginator/post.rb +64 -0
  30. data/lib/wavefront-sdk/paginator/put.rb +11 -0
  31. data/lib/wavefront-sdk/proxy.rb +7 -7
  32. data/lib/wavefront-sdk/query.rb +4 -4
  33. data/lib/wavefront-sdk/report.rb +9 -25
  34. data/lib/wavefront-sdk/savedsearch.rb +8 -8
  35. data/lib/wavefront-sdk/search.rb +16 -13
  36. data/lib/wavefront-sdk/source.rb +14 -14
  37. data/lib/wavefront-sdk/{mixins.rb → support/mixins.rb} +8 -2
  38. data/lib/wavefront-sdk/{parse_time.rb → support/parse_time.rb} +2 -0
  39. data/lib/wavefront-sdk/types/status.rb +52 -0
  40. data/lib/wavefront-sdk/user.rb +8 -8
  41. data/lib/wavefront-sdk/validators.rb +52 -3
  42. data/lib/wavefront-sdk/webhook.rb +8 -8
  43. data/lib/wavefront-sdk/write.rb +153 -52
  44. data/lib/wavefront-sdk/writers/api.rb +38 -0
  45. data/lib/wavefront-sdk/writers/core.rb +146 -0
  46. data/lib/wavefront-sdk/writers/http.rb +42 -0
  47. data/lib/wavefront-sdk/writers/socket.rb +66 -0
  48. data/lib/wavefront-sdk/writers/summary.rb +39 -0
  49. data/lib/wavefront_sdk.rb +9 -0
  50. data/spec/spec_helper.rb +3 -0
  51. data/spec/wavefront-sdk/alert_spec.rb +6 -0
  52. data/spec/wavefront-sdk/{base_spec.rb → core/api_caller_spec.rb} +28 -41
  53. data/spec/wavefront-sdk/core/api_spec.rb +31 -0
  54. data/spec/wavefront-sdk/{logger_spec.rb → core/logger_spec.rb} +3 -3
  55. data/spec/wavefront-sdk/core/response_spec.rb +77 -0
  56. data/spec/wavefront-sdk/credentials_spec.rb +15 -10
  57. data/spec/wavefront-sdk/distribution_spec.rb +78 -0
  58. data/spec/wavefront-sdk/paginator/base_spec.rb +67 -0
  59. data/spec/wavefront-sdk/paginator/post_spec.rb +53 -0
  60. data/spec/wavefront-sdk/report_spec.rb +3 -1
  61. data/spec/wavefront-sdk/search_spec.rb +25 -0
  62. data/spec/wavefront-sdk/stdlib/array_spec.rb +2 -1
  63. data/spec/wavefront-sdk/stdlib/hash_spec.rb +6 -1
  64. data/spec/wavefront-sdk/stdlib/string_spec.rb +2 -0
  65. data/spec/wavefront-sdk/{mixins_spec.rb → support/mixins_spec.rb} +2 -2
  66. data/spec/wavefront-sdk/{parse_time_spec.rb → support/parse_time_spec.rb} +2 -2
  67. data/spec/wavefront-sdk/validators_spec.rb +64 -1
  68. data/spec/wavefront-sdk/write_spec.rb +55 -77
  69. data/spec/wavefront-sdk/writers/api_spec.rb +45 -0
  70. data/spec/wavefront-sdk/writers/core_spec.rb +49 -0
  71. data/spec/wavefront-sdk/writers/http_spec.rb +69 -0
  72. data/spec/wavefront-sdk/writers/socket_spec.rb +104 -0
  73. data/spec/wavefront-sdk/writers/summary_spec.rb +38 -0
  74. data/wavefront-sdk.gemspec +1 -1
  75. metadata +52 -24
  76. data/lib/wavefront-sdk/base.rb +0 -264
  77. data/lib/wavefront-sdk/base_write.rb +0 -185
  78. data/lib/wavefront-sdk/stdlib.rb +0 -5
  79. data/lib/wavefront-sdk/version.rb +0 -1
  80. data/spec/wavefront-sdk/base_write_spec.rb +0 -82
  81. data/spec/wavefront-sdk/response_spec.rb +0 -39
@@ -2,8 +2,9 @@
2
2
 
3
3
  require_relative '../../spec_helper'
4
4
  require_relative '../../../lib/wavefront-sdk/stdlib/array'
5
- require 'spy/integration'
6
5
 
6
+ # Test extensions to stdlib's Array class
7
+ #
7
8
  class ArrayTest < MiniTest::Test
8
9
  def test_uri_concat
9
10
  assert_equal %w[a b].uri_concat, 'a/b'
@@ -2,7 +2,6 @@
2
2
 
3
3
  require_relative '../../spec_helper'
4
4
  require_relative '../../../lib/wavefront-sdk/stdlib/hash'
5
- require 'spy/integration'
6
5
 
7
6
  # Test extensions to stdlib hash class
8
7
  #
@@ -17,4 +16,10 @@ class HashTest < MiniTest::Test
17
16
  assert_equal('tag1="say \"hi\"" tag2="some stuff!"',
18
17
  { tag1: 'say "hi"', tag2: 'some stuff!' }.to_wf_tag)
19
18
  end
19
+
20
+ def test_cleanse
21
+ assert_equal({ k1: 1, k3: 3 }, { k1: 1, k2: nil, k3: 3 }.cleanse)
22
+ assert_equal({ k1: 1, k2: 2, k3: 3 }, { k1: 1, k2: 2, k3: 3 }.cleanse)
23
+ assert_equal({}, { k1: nil, k2: false, k3: false }.cleanse)
24
+ end
20
25
  end
@@ -3,6 +3,8 @@
3
3
  require_relative '../../spec_helper'
4
4
  require_relative '../../../lib/wavefront-sdk/stdlib/string'
5
5
 
6
+ # Test extensions to stdlib's String class
7
+ #
6
8
  class StringTest < MiniTest::Test
7
9
  def test_tagescape
8
10
  assert_equal('value', 'value'.tagescape)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../spec_helper'
4
- require_relative '../../lib/wavefront-sdk/mixins'
3
+ require_relative '../../spec_helper'
4
+ require_relative '../../../lib/wavefront-sdk/support/mixins'
5
5
  require 'spy/integration'
6
6
 
7
7
  # Test SDK mixins
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../spec_helper'
4
- require_relative '../../lib/wavefront-sdk/parse_time'
3
+ require_relative '../../spec_helper'
4
+ require_relative '../../../lib/wavefront-sdk/support/parse_time'
5
5
 
6
6
  # rubocop:disable Style/NumericLiterals
7
7
  TSS = 1517151869
@@ -3,7 +3,7 @@
3
3
  require 'date'
4
4
  require 'minitest/autorun'
5
5
  require_relative '../spec_helper'
6
- require_relative '../../lib/wavefront-sdk/constants'
6
+ require_relative '../../lib/wavefront-sdk/defs/constants'
7
7
  require_relative '../../lib/wavefront-sdk/validators'
8
8
 
9
9
  # Validator tests, obviously. Happy now Rubocop?
@@ -261,6 +261,62 @@ class WavefrontValidatorsTest < MiniTest::Test
261
261
  end
262
262
  end
263
263
 
264
+ def test_wf_disitribution?
265
+ value = [[4, 10], [6, 11], [15, 1e5]]
266
+ good = { path: 'test.metric', value: value, ts: Time.now.to_i,
267
+ source: 'testhost', tags: { t1: 'v 1', t2: 'v2' } }
268
+
269
+ assert(wf_distribution?(good))
270
+
271
+ %w[tags source ts].each do |t|
272
+ p = good.dup
273
+ p.delete(t)
274
+ assert(wf_distribution?(p))
275
+ end
276
+
277
+ bad = good.dup
278
+ bad[:path] = '!n\/@1!d_metric'
279
+
280
+ assert_raises(Wavefront::Exception::InvalidMetricName) do
281
+ wf_distribution?(bad)
282
+ end
283
+
284
+ bad = good.dup
285
+ bad[:value] = [[1.2, 5]]
286
+
287
+ assert_raises(Wavefront::Exception::InvalidDistributionCount) do
288
+ wf_distribution?(bad)
289
+ end
290
+
291
+ bad = good.dup
292
+ bad[:value] = [[2, 'abc']]
293
+
294
+ assert_raises(Wavefront::Exception::InvalidMetricValue) do
295
+ wf_distribution?(bad)
296
+ end
297
+
298
+ bad = good.dup
299
+ bad[:ts] = 'abc'
300
+
301
+ assert_raises(Wavefront::Exception::InvalidTimestamp) do
302
+ wf_distribution?(bad)
303
+ end
304
+
305
+ bad = good.dup
306
+ bad[:source] = '<------>'
307
+
308
+ assert_raises(Wavefront::Exception::InvalidSourceId) do
309
+ wf_distribution?(bad)
310
+ end
311
+
312
+ bad = good.dup
313
+ bad[:tags] = { '<------>': 45 }
314
+
315
+ assert_raises(Wavefront::Exception::InvalidTag) do
316
+ wf_distribution?(bad)
317
+ end
318
+ end
319
+
264
320
  def test_notificant_id
265
321
  good = %w[CHTo47HvsPzSaGhh]
266
322
  bad = ['CTo47HvsPzSaGhh', [], {}, nil, 'bad id']
@@ -272,4 +328,11 @@ class WavefrontValidatorsTest < MiniTest::Test
272
328
  bad = ['CTo47HvsPzSaGhh', [], {}, nil, 'bad id']
273
329
  good_and_bad('wf_integration_id?', 'InvalidIntegrationId', good, bad)
274
330
  end
331
+
332
+ def test_distribution_interval
333
+ good = %i[m h d]
334
+ bad = ['m', [], {}, nil, 'bad id', :x, 'p']
335
+ good_and_bad('wf_distribution_interval?',
336
+ 'InvalidDistributionInterval', good, bad)
337
+ end
275
338
  end
@@ -1,12 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require_relative '../spec_helper'
4
+ require 'minitest/autorun'
3
5
  require_relative '../../lib/wavefront-sdk/write.rb'
4
6
  require_relative 'resources/dummy_points'
5
- require 'minitest/autorun'
6
- require 'webmock/minitest'
7
- require 'spy'
8
- require 'spy/integration'
9
- require 'socket'
10
7
 
11
8
  W_CREDS = { proxy: 'wavefront', port: 2878 }.freeze
12
9
 
@@ -29,88 +26,69 @@ class WavefrontWriteTest < MiniTest::Test
29
26
  refute(wf.opts[:noop])
30
27
  assert(wf_noop.opts[:noop])
31
28
  assert_equal(wf_tags.opts[:tags], TAGS)
32
- assert_equal(wf.summary, sent: 0, rejected: 0, unsent: 0)
29
+ assert_instance_of(Wavefront::Writer::Socket, wf.writer)
33
30
  end
34
31
 
35
- def test_write_openclose
36
- mocket = Mocket.new
37
- Spy.on(TCPSocket, :new).and_return(mocket)
38
- mocket_spy = Spy.on(mocket, :puts)
39
- wf.write(POINT)
40
- assert mocket_spy.has_been_called?
41
- end
32
+ def test_paths_to_deltas
33
+ x = wf.paths_to_deltas(POINTS.dup)
34
+ assert_equal(x.size, 2)
42
35
 
43
- def test_write_noop
44
- mocket = Mocket.new
45
- Spy.on(TCPSocket, :new).and_return(mocket)
46
- mocket_spy = Spy.on(mocket, :puts)
47
- wf_noop.open
48
- wf_noop.write(POINT, false)
49
- refute mocket_spy.has_been_called?
36
+ x.each do |p|
37
+ assert_instance_of(Hash, p)
38
+ assert(p[:path].start_with?(DELTA))
39
+ end
50
40
  end
51
41
 
52
- def test_write_noop_openclose
53
- mocket = Mocket.new
54
- Spy.on(TCPSocket, :new).and_return(mocket)
55
- mocket_spy = Spy.on(mocket, :puts)
56
- wf_noop.write(POINT)
57
- refute mocket_spy.has_been_called?
58
- end
42
+ def test_point_array
43
+ p1 = POINT.dup
44
+ assert_equal(['test.metric', 123_456, 1_469_987_572, 'testhost',
45
+ 't1="v1" t2="v2"', nil], wf.point_array(p1))
59
46
 
60
- def test_write
61
- mocket = Mocket.new
62
- Spy.on(TCPSocket, :new).and_return(mocket)
63
- mocket_spy = Spy.on(mocket, :puts)
64
- wf.open
65
- wf.write(POINT, false)
66
- assert mocket_spy.has_been_called?
67
- end
47
+ p2 = POINT.dup.tap { |p| p.delete(:point) }
48
+ assert_raises(StandardError) { wf.point_arrayt(p2) }
68
49
 
69
- def test_write_array
70
- mocket = Mocket.new
71
- Spy.on(TCPSocket, :new).and_return(mocket)
72
- mocket_spy = Spy.on(mocket, :puts)
73
- wf.open
74
- wf.write(POINT_A, false)
75
- assert mocket_spy.has_been_called?
76
- end
50
+ p3 = POINT.dup.tap { |p| p.delete(:value) }
51
+ assert_raises(StandardError) { wf.point_arrayt(p3) }
77
52
 
78
- def test_really_send_point
79
- mocket = Mocket.new
80
- Spy.on(TCPSocket, :new).and_return(mocket)
81
- mocket_spy = Spy.on(mocket, :puts)
82
- wf.open
83
- wf.really_send_point(POINT_L)
84
- assert mocket_spy.has_been_called_with?(POINT_L)
85
- end
53
+ p4 = POINT.dup.tap { |p| p.delete(:ts) }
54
+ assert_equal(['test.metric', 123_456, nil, 'testhost',
55
+ 't1="v1" t2="v2"', nil], wf.point_array(p4))
86
56
 
87
- def test_noop_send_point
88
- mocket = Mocket.new
89
- Spy.on(TCPSocket, :new).and_return(mocket)
90
- mocket_spy = Spy.on(mocket, :puts)
91
- wf_noop.open
92
- wf_noop.send_point(POINT_L)
93
- refute mocket_spy.has_been_called?
57
+ p5 = POINT.dup.tap { |p| p.delete(:tags) }
58
+ assert_equal(['test.metric', 123_456, 1_469_987_572, 'testhost',
59
+ nil, nil], wf.point_array(p5))
94
60
  end
95
61
 
96
- def test_open
97
- tcp_spy = Spy.on(TCPSocket, :new)
98
- wf.open
99
- assert tcp_spy.has_been_called?
100
- assert_equal(tcp_spy.calls.first.args, ['wavefront', 2878])
62
+ def test_hash_to_wf
63
+ assert_equal(wf.hash_to_wf(POINT),
64
+ 'test.metric 123456 1469987572 ' \
65
+ 'source=testhost t1="v1" t2="v2"')
66
+ assert_equal(wf_tags.hash_to_wf(POINT),
67
+ 'test.metric 123456 1469987572 ' \
68
+ 'source=testhost t1="v1" t2="v2" ' \
69
+ 'gt1="gv1" gt2="gv2"')
70
+
71
+ p1 = POINT.dup
72
+ p1.delete(:ts)
73
+ assert_equal(wf.hash_to_wf(p1),
74
+ 'test.metric 123456 source=testhost t1="v1" t2="v2"')
75
+
76
+ p2 = POINT.dup
77
+ p2.delete(:tags)
78
+ assert_equal(wf.hash_to_wf(p2),
79
+ 'test.metric 123456 1469987572 source=testhost')
80
+
81
+ %i[value path].each do |k|
82
+ p3 = POINT.dup
83
+ p3.delete(k)
84
+
85
+ assert_raises(Wavefront::Exception::InvalidPoint) do
86
+ wf.hash_to_wf(p3)
87
+ end
88
+
89
+ assert_raises(Wavefront::Exception::InvalidPoint) do
90
+ wf_tags.hash_to_wf(p3)
91
+ end
92
+ end
101
93
  end
102
-
103
- def test_noop_open
104
- tcp_spy = Spy.on(TCPSocket, :new)
105
- wf_noop.open
106
- refute tcp_spy.has_been_called?
107
- end
108
- end
109
-
110
- # A mock socket
111
- #
112
- class Mocket
113
- def puts(socket); end
114
-
115
- def close; end
116
94
  end
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../../spec_helper'
4
+ require_relative '../resources/dummy_points'
5
+ require_relative '../../../lib/wavefront-sdk/write'
6
+
7
+ HEADERS = POST_HEADERS.merge('Content-Type': 'application/octet-stream')
8
+
9
+ # The report class test will test that an API call is made. Here all
10
+ # that's left to test is the #validate_credentials method.
11
+ #
12
+ class WavefrontWriterApiTest < MiniTest::Test
13
+ attr_reader :wf
14
+
15
+ def setup
16
+ @wf = Wavefront::Write.new(CREDS, writer: :api)
17
+ end
18
+
19
+ def test_writer_class
20
+ assert_instance_of(Wavefront::Writer::Api, wf.writer)
21
+ end
22
+
23
+ def test_validate_credentials
24
+ assert(Wavefront::Write.new(CREDS, writer: :api))
25
+
26
+ assert_instance_of(Wavefront::Write,
27
+ Wavefront::Write.new(CREDS, writer: :api))
28
+
29
+ assert_raises(Wavefront::Exception::CredentialError) do
30
+ Wavefront::Write.new({}, writer: :api)
31
+ end
32
+
33
+ assert_raises(Wavefront::Exception::CredentialError) do
34
+ Wavefront::Write.new({ proxy: 'wavefront' }, writer: :api)
35
+ end
36
+
37
+ assert_raises(Wavefront::Exception::CredentialError) do
38
+ Wavefront::Write.new({ endpoint: 'wavefront.com' }, writer: :api)
39
+ end
40
+
41
+ assert_raises(Wavefront::Exception::CredentialError) do
42
+ Wavefront::Write.new({ token: 'abcdef' }, writer: :api)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'logger'
4
+ require_relative '../../spec_helper'
5
+ require_relative '../../../lib/wavefront-sdk/writers/core'
6
+ require_relative '../resources/dummy_points'
7
+
8
+ # rubocop:disable Style/MutableConstant
9
+ WBWT_CREDS = { endpoint: 'stub.wavefront.com', token: 'tkn' }
10
+ # rubocop:enable Style/MutableConstant
11
+
12
+ class TestClassNoTags
13
+ def creds
14
+ WBWT_CREDS
15
+ end
16
+
17
+ def opts
18
+ {}
19
+ end
20
+
21
+ def logger
22
+ Logger.new(STDOUT)
23
+ end
24
+ end
25
+
26
+ # Test methods common to 'write' and 'report'
27
+ #
28
+ class WavefrontCoreWriteTest < MiniTest::Test
29
+ attr_reader :wf, :wf_tags
30
+
31
+ def setup
32
+ @wf = Wavefront::Writer::Core.new(TestClassNoTags.new)
33
+ end
34
+
35
+ def test_prefix_points
36
+ assert_equal(wf.prefix_points(%w[p1 p2 p3 p4]), %w[p1 p2 p3 p4])
37
+ assert_equal(wf.prefix_points([%w[p1 p2 p3 p4]]), %w[p1 p2 p3 p4])
38
+ assert_equal(wf.prefix_points('p1'), %w[p1])
39
+ assert_equal(wf.prefix_points([{ path: 'p1' },
40
+ { path: 'p2' },
41
+ { path: 'p3' }], 'prefix'),
42
+ [{ path: 'prefix.p1' },
43
+ { path: 'prefix.p2' },
44
+ { path: 'prefix.p3' }])
45
+
46
+ assert_equal(wf.prefix_points({ path: 'p1' }, 'prefix'),
47
+ [path: 'prefix.p1'])
48
+ end
49
+ end
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../../spec_helper'
4
+ require_relative '../resources/dummy_points'
5
+ require_relative '../../../lib/wavefront-sdk/write'
6
+
7
+ BODY = 'test.metric 123456 1469987572 source=testhost t1="v1" t2="v2"'.freeze
8
+
9
+ # Test HTTP transport
10
+ #
11
+ class WavefrontWriterSocketTest < MiniTest::Test
12
+ attr_reader :wf
13
+
14
+ def setup
15
+ @wf = Wavefront::Write.new({ proxy: 'wavefront' }, writer: :http)
16
+ end
17
+
18
+ def test_writer_class
19
+ assert_instance_of(Wavefront::Writer::Http, wf.writer)
20
+ end
21
+
22
+ def test_validate_credentials
23
+ assert Wavefront::Write.new({ proxy: 'wavefront' }, writer: :http)
24
+ assert_instance_of(Wavefront::Write, wf)
25
+
26
+ assert_raises(Wavefront::Exception::CredentialError) do
27
+ Wavefront::Write.new(CREDS, writer: :http)
28
+ end
29
+
30
+ assert_raises(Wavefront::Exception::CredentialError) do
31
+ Wavefront::Write.new({}, writer: :http)
32
+ end
33
+
34
+ assert_raises(Wavefront::Exception::CredentialError) do
35
+ Wavefront::Write.new({ endpoint: 'wavefront.com' }, writer: :http)
36
+ end
37
+
38
+ assert_raises(Wavefront::Exception::CredentialError) do
39
+ Wavefront::Write.new({ token: 'abcdef' }, writer: :http)
40
+ end
41
+ end
42
+
43
+ def test_write_2878
44
+ wf1 = Wavefront::Write.new({ proxy: 'wavefront' }, writer: :http)
45
+
46
+ stub_request(:post, 'http://wavefront:2878')
47
+ .with(body: BODY, headers: POST_HEADERS)
48
+ .to_return(body: DUMMY_RESPONSE, status: 200)
49
+
50
+ wf1.write(POINT)
51
+
52
+ assert_requested(:post, 'http://wavefront:2878', headers: POST_HEADERS)
53
+ WebMock.reset!
54
+ end
55
+
56
+ def test_write_1234
57
+ wf1 = Wavefront::Write.new({ proxy: 'wavefront', port: 1234 },
58
+ writer: :http)
59
+
60
+ stub_request(:post, 'http://wavefront:1234')
61
+ .with(body: BODY, headers: POST_HEADERS)
62
+ .to_return(body: DUMMY_RESPONSE, status: 200)
63
+
64
+ wf1.write(POINT)
65
+
66
+ assert_requested(:post, 'http://wavefront:1234', headers: POST_HEADERS)
67
+ WebMock.reset!
68
+ end
69
+ end