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
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../../spec_helper'
4
+ require_relative '../../../lib/wavefront-sdk/core/api'
5
+
6
+ #
7
+ # Test SDK core API class
8
+ #
9
+ class WavefrontCoreApiTest < MiniTest::Test
10
+ attr_reader :wf
11
+
12
+ def setup
13
+ @wf = Wavefront::CoreApi.new(CREDS)
14
+ end
15
+
16
+ def test_time_to_ms
17
+ now_ms = Time.now.to_i * 1000
18
+ assert_equal wf.time_to_ms(now_ms), now_ms
19
+ assert_equal wf.time_to_ms(1_469_711_187), 1_469_711_187_000
20
+ refute wf.time_to_ms([])
21
+ refute wf.time_to_ms('1469711187')
22
+ end
23
+
24
+ def test_hash_for_update
25
+ wf.instance_variable_set('@update_keys', %i[k1 k2])
26
+ body = { k1: 'ov1', k2: 'ov2', k3: 'ov3' }
27
+ upd = { k2: 'nv1' }
28
+
29
+ assert_equal(wf.hash_for_update(body, upd), k1: 'ov1', k2: 'nv1')
30
+ end
31
+ end
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'logger'
4
- require_relative '../spec_helper'
5
- require_relative '../../lib/wavefront-sdk/logger'
4
+ require_relative '../../spec_helper'
5
+ require_relative '../../../lib/wavefront-sdk/core/logger'
6
6
 
7
7
  # Test SDK logger class
8
8
  #
@@ -30,7 +30,7 @@ class WavefrontLoggerTest < MiniTest::Test
30
30
  def test_log_no_logger_no_debug
31
31
  l = Wavefront::Logger.new(debug: false, verbose: false)
32
32
  assert_silent { l.log('my message', :debug) }
33
- assert_output("SDK INFO: my message\n") { l.log('my message', :info) }
33
+ assert_output('') { l.log('my message', :info) }
34
34
  out, err = capture_io { l.log('my message', :error) }
35
35
  assert_equal("SDK ERROR: my message\n", err)
36
36
  assert_empty(out)
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+ require_relative '../../spec_helper'
5
+ require_relative '../../../lib/wavefront-sdk/core/exception'
6
+ require_relative '../../../lib/wavefront-sdk/core/response'
7
+
8
+ GOOD_RESP = '{"status":{"result":"OK","message":"","code":200},' \
9
+ '"response":{"items":[{"name":"test agent"}],"offset":0,' \
10
+ '"limit":100,"totalItems":3,"moreItems":false}}'.freeze
11
+
12
+ BAD_RESP = "error='not_found'
13
+ message='resource cannot be found'
14
+ trackingId=eca22ddc-848b-4e67-876a-366145c8a759".freeze
15
+
16
+ # Unit tests for Response class. Also inderectly tests the Status
17
+ # type.
18
+ #
19
+ class WavefrontResponseTest < MiniTest::Test
20
+ attr_reader :wfg, :wfb
21
+
22
+ def setup
23
+ @wfg = Wavefront::Response.new(GOOD_RESP, 200)
24
+ @wfb = Wavefront::Response.new(BAD_RESP, 404)
25
+ end
26
+
27
+ def test_initialize_good_data
28
+ assert_instance_of(Wavefront::Response, wfg)
29
+ assert_respond_to(wfg, :status)
30
+ assert_respond_to(wfg, :response)
31
+ refute_respond_to(wfg, :to_a)
32
+ assert_respond_to(wfg.response, :items)
33
+ assert_instance_of(Array, wfg.response.items)
34
+ assert_instance_of(Wavefront::Type::Status, wfg.status)
35
+ assert_equal(200, wfg.status.code)
36
+ assert_equal('OK', wfg.status.result)
37
+ assert_instance_of(String, wfg.status.message)
38
+ assert_empty(wfg.status.message)
39
+ assert wfg.ok?
40
+ refute wfg.more_items?
41
+ refute wfg.next_item
42
+ end
43
+
44
+ def test_initialize_bad_data
45
+ assert_instance_of(Wavefront::Response, wfb)
46
+ assert_respond_to(wfb, :status)
47
+ assert_respond_to(wfb, :response)
48
+ refute_respond_to(wfb, :to_a)
49
+ refute_respond_to(wfb.response, :items)
50
+ assert_instance_of(Wavefront::Type::Status, wfb.status)
51
+ assert_equal(404, wfb.status.code)
52
+ assert_equal('ERROR', wfb.status.result)
53
+ assert_instance_of(String, wfb.status.message)
54
+ assert_match(/error='not_found'/, wfb.status.message)
55
+ refute wfb.ok?
56
+ refute wfb.more_items?
57
+ refute wfb.next_item
58
+ end
59
+
60
+ # This is a private method, so we test its public interface
61
+ #
62
+ def test_build_response
63
+ assert_equal(Map.new, Wavefront::Response.new('', 200).response)
64
+ assert_equal(Map.new, Wavefront::Response.new({}, 200).response)
65
+ assert_equal(Map.new, Wavefront::Response.new([], 200).response)
66
+ assert_equal(Map.new(message: 'string', code: 200),
67
+ Wavefront::Response.new('string', 200).response)
68
+ assert_equal(123, Wavefront::Response.new({ response: 123 }.to_json,
69
+ 200).response)
70
+ end
71
+
72
+ def test_to_s
73
+ assert_instance_of(String, wfg.to_s)
74
+ assert_match(/:code=>200/, wfg.to_s)
75
+ assert_match(/"limit"=>100/, wfg.to_s)
76
+ end
77
+ end
@@ -4,8 +4,10 @@ require 'pathname'
4
4
  require_relative '../spec_helper'
5
5
  require_relative '../../lib/wavefront-sdk/credentials'
6
6
 
7
- CONF = Pathname.new(__FILE__).dirname.realpath + 'resources' + 'test.conf'
8
- CONF2 = Pathname.new(__FILE__).dirname.realpath + 'resources' + 'test2.conf'
7
+ p RESOURCE_DIR
8
+
9
+ CONF1 = RESOURCE_DIR + 'test.conf'
10
+ CONF2 = RESOURCE_DIR + 'test2.conf'
9
11
 
10
12
  # Test SDK base class end-to-end
11
13
  #
@@ -15,11 +17,12 @@ class WavefrontCredentialsTest < MiniTest::Test
15
17
  def test_initialize_1
16
18
  ENV.delete('WAVEFRONT_ENDPOINT')
17
19
  ENV.delete('WAVEFRONT_TOKEN')
18
- c = Wavefront::Credentials.new(file: CONF)
20
+ c = Wavefront::Credentials.new(file: CONF1)
19
21
  assert_instance_of(Wavefront::Credentials, c)
20
22
  assert_instance_of(Map, c.creds)
21
23
  assert_instance_of(Map, c.proxy)
22
24
  assert_instance_of(Map, c.config)
25
+ assert_instance_of(Map, c.all)
23
26
 
24
27
  assert_equal(c.creds.keys, %w[token endpoint])
25
28
  assert_equal(c.creds[:token], '12345678-abcd-1234-abcd-123456789012')
@@ -29,11 +32,12 @@ class WavefrontCredentialsTest < MiniTest::Test
29
32
  def test_initialize_env_token
30
33
  ENV.delete('WAVEFRONT_ENDPOINT')
31
34
  ENV['WAVEFRONT_TOKEN'] = 'abcdefgh'
32
- c = Wavefront::Credentials.new(file: CONF)
35
+ c = Wavefront::Credentials.new(file: CONF1)
33
36
  assert_instance_of(Wavefront::Credentials, c)
34
37
  assert_instance_of(Map, c.creds)
35
38
  assert_instance_of(Map, c.proxy)
36
39
  assert_instance_of(Map, c.config)
40
+ assert_instance_of(Map, c.all)
37
41
 
38
42
  assert_equal(c.creds.keys, %w[token endpoint])
39
43
  assert_equal(c.creds[:token], 'abcdefgh')
@@ -43,11 +47,12 @@ class WavefrontCredentialsTest < MiniTest::Test
43
47
  def test_initialize_env_endpoint
44
48
  ENV.delete('WAVEFRONT_TOKEN')
45
49
  ENV['WAVEFRONT_ENDPOINT'] = 'endpoint.wavefront.com'
46
- c = Wavefront::Credentials.new(file: CONF)
50
+ c = Wavefront::Credentials.new(file: CONF1)
47
51
  assert_instance_of(Wavefront::Credentials, c)
48
52
  assert_instance_of(Map, c.creds)
49
53
  assert_instance_of(Map, c.proxy)
50
54
  assert_instance_of(Map, c.config)
55
+ assert_instance_of(Map, c.all)
51
56
 
52
57
  assert_equal(c.creds.keys, %w[token endpoint])
53
58
  assert_equal(c.creds[:token], '12345678-abcd-1234-abcd-123456789012')
@@ -148,10 +153,10 @@ class GibletsTest < MiniTest::Test
148
153
  [Pathname.new('/no/file/1'), Pathname.new('/no/file/2')]
149
154
  ), {})
150
155
 
151
- assert_equal(wf.load_from_file([CONF], 'noprofile'),
152
- file: CONF)
156
+ assert_equal(wf.load_from_file([CONF1], 'noprofile'),
157
+ file: CONF1)
153
158
 
154
- x = wf.load_from_file([CONF2, CONF], 'default')
159
+ x = wf.load_from_file([CONF2, CONF1], 'default')
155
160
  assert_instance_of(Hash, x)
156
161
  assert_equal(x.keys.size, 5)
157
162
  assert_equal(x[:proxy], 'wavefront.localnet')
@@ -160,13 +165,13 @@ class GibletsTest < MiniTest::Test
160
165
  assert_includes(x.keys, k)
161
166
  end
162
167
 
163
- y = wf.load_from_file([CONF2, CONF], 'other')
168
+ y = wf.load_from_file([CONF2, CONF1], 'other')
164
169
  assert_instance_of(Hash, y)
165
170
  %i[token endpoint proxy file].each { |k| assert_includes(y.keys, k) }
166
171
  assert_equal(y.keys.size, 4)
167
172
  assert_equal(y[:proxy], 'otherwf.localnet')
168
173
 
169
- z = wf.load_from_file([CONF, CONF2], 'default')
174
+ z = wf.load_from_file([CONF1, CONF2], 'default')
170
175
  assert_instance_of(Hash, z)
171
176
  %i[token endpoint proxy file].each { |k| assert_includes(z.keys, k) }
172
177
  assert_equal(z.keys.size, 4)
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+ require_relative '../../lib/wavefront-sdk/distribution'
5
+
6
+ W_CREDS = { proxy: 'wavefront', port: 2878 }.freeze
7
+
8
+ DIST = {
9
+ interval: :m,
10
+ path: 'test.distribution',
11
+ value: [[5, 11], [15, 2.533], [8, -15], [12, 1e6]],
12
+ ts: 1_538_865_613,
13
+ source: 'minitest',
14
+ tags: { tag1: 'val1', tag2: 'val2' }
15
+ }.freeze
16
+
17
+ # Most of the distribution methods are inherited from the Write
18
+ # class so they aren't tested again here.
19
+ #
20
+ class WavefrontDistributionTest < MiniTest::Test
21
+ attr_reader :wf, :wf_noop, :wf_tags
22
+
23
+ def setup
24
+ @wf = Wavefront::Distribution.new(W_CREDS)
25
+ end
26
+
27
+ def test_mk_distribution
28
+ assert_equal([[4, 1], [2, 3], [1, 2], [2, 6]].sort,
29
+ wf.mk_distribution([1, 6, 3, 1, 1, 3, 2, 6, 1]).sort)
30
+ end
31
+
32
+ def test_mk_wf_distribution
33
+ assert_equal('#4 1.0 #2 3.0 #1 2.0 #2 6.0',
34
+ wf.mk_wf_distribution([1, 1, 1, 1, 3, 3, 2, 6, 6]))
35
+ assert_equal('#4 1.0 #2 3.0 #1 2.0 #2 6.0',
36
+ wf.mk_wf_distribution('1 1 1 1 3 3 2 6 6'))
37
+ assert_equal('#4 1.0 #2 3.0 #1 2.0 #2 6.0',
38
+ wf.mk_wf_distribution(1, 1, 1, 1, 3, 3, 2, 6, 6))
39
+ assert_equal('#4 1.0 #2 3.0 #1 2.0 #2 6.0',
40
+ wf.mk_wf_distribution([1, 1, 1], [1, 3, 3, 2, 6, 6]))
41
+ end
42
+
43
+ def test_hash_to_wf
44
+ assert_equal(wf.hash_to_wf(DIST),
45
+ '!M 1538865613 #5 11 #15 2.533 #8 -15 #12 1000000.0 ' \
46
+ 'test.distribution source=minitest ' \
47
+ 'tag1="val1" tag2="val2"')
48
+
49
+ d2 = DIST.dup
50
+ d2[:tags] = {}
51
+
52
+ assert_equal(wf.hash_to_wf(d2),
53
+ '!M 1538865613 #5 11 #15 2.533 #8 -15 #12 1000000.0 ' \
54
+ 'test.distribution source=minitest')
55
+
56
+ d3 = DIST.dup
57
+ d3[:ts] = Time.at(1_538_865_613)
58
+ d3 = d3.tap { |d| d.delete(:source) }
59
+
60
+ assert_equal(wf.hash_to_wf(d3),
61
+ '!M 1538865613 #5 11 #15 2.533 #8 -15 #12 1000000.0 ' \
62
+ "test.distribution source=#{Socket.gethostname} " \
63
+ 'tag1="val1" tag2="val2"')
64
+ end
65
+
66
+ def test_array2dist
67
+ assert_equal(wf.array2dist([[1, 4], [6, 5]]), '#1 4 #6 5')
68
+ assert_equal(wf.array2dist([[12, 4.235]]), '#12 4.235')
69
+ end
70
+ end
71
+
72
+ # A mock socket
73
+ #
74
+ class Mocket
75
+ def puts(socket); end
76
+
77
+ def close; end
78
+ end
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../../spec_helper'
4
+ require_relative '../../../lib/wavefront-sdk/paginator/base'
5
+
6
+ # Stub for ApiCaller class
7
+ #
8
+ class FakeApiCaller
9
+ def respond(args); end
10
+ end
11
+
12
+ # Stub for connection object
13
+ #
14
+ class FakeConn
15
+ def get(*args); end
16
+ end
17
+
18
+ # Paginator tests
19
+ #
20
+ class WavefrontPaginatorBaseTest < MiniTest::Test
21
+ attr_reader :wf, :apicaller, :conn
22
+
23
+ def setup
24
+ @apicaller = FakeApiCaller.new
25
+ @conn = FakeConn.new
26
+ args = [nil, { offset: 3, limit: :lazy }]
27
+
28
+ @wf = Wavefront::Paginator::Base.new(apicaller, conn, :get, args)
29
+ end
30
+
31
+ def _test_limit_and_offset
32
+ assert_equal({ limit: nil, offset: nil }, wf.limit_and_offset([]))
33
+ assert_equal({ limit: nil, offset: 10 },
34
+ wf.limit_and_offset([nil, { offset: 10 }]))
35
+ assert_equal({ limit: 15, offset: nil },
36
+ wf.limit_and_offset([nil, { limit: 15 }]))
37
+ assert_equal({ limit: 95, offset: 0 },
38
+ wf.limit_and_offset([nil, { limit: 95, offset: 0 }]))
39
+ assert_equal({ limit: 95, offset: 0 },
40
+ wf.limit_and_offset([{ a: 1 }, { limit: 95, offset: 0 }]))
41
+ assert_equal({ limit: 33, offset: 6 },
42
+ wf.limit_and_offset([{ offset: 1 },
43
+ { limit: 33, offset: 6 }]))
44
+ end
45
+
46
+ def test_user_page_size
47
+ assert_equal(3, wf.user_page_size([offset: 3]))
48
+ assert_equal(15, wf.user_page_size([nil, { offset: 15, limit: :lazy }]))
49
+ assert_equal(25, wf.user_page_size([nil, { offset: 25 },
50
+ { limit: :lazy }]))
51
+ assert_equal(999, wf.user_page_size([a: 3, b: 2]))
52
+ end
53
+
54
+ def test_set_pagination
55
+ assert_equal([nil, { offset: 5, limit: 10 }],
56
+ wf.set_pagination(5, 10, [nil, { offset: 0, limit: 100 }]))
57
+ assert_equal([nil, { a: 1, b: 2 }],
58
+ wf.set_pagination(5, 10, [nil, { a: 1, b: 2 }]))
59
+ assert_equal([nil, { offset: 15 }, { a: 2 }, { limit: 20 }],
60
+ wf.set_pagination(15, 20, [nil, { offset: 0 }, { a: 2 },
61
+ { limit: 100 }]))
62
+ assert_equal(['str1', { offset: 5, limit: 10 }, [1, 2]],
63
+ wf.set_pagination(5, 10, ['str1',
64
+ { offset: 0, limit: 100 },
65
+ [1, 2]]))
66
+ end
67
+ end
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+ require_relative '../../spec_helper'
5
+ require_relative '../../../lib/wavefront-sdk/paginator/post'
6
+
7
+ # Stub for ApiCaller class
8
+ #
9
+ class FakeApiCaller
10
+ def respond(_args)
11
+ puts 'merp'
12
+ end
13
+ end
14
+
15
+ # Stub for connection object
16
+ #
17
+ class FakeConn
18
+ def get(*args)
19
+ puts args
20
+ end
21
+ end
22
+
23
+ # Test POST pagination
24
+ #
25
+ class WavefrontPaginatorPostTest < MiniTest::Test
26
+ attr_reader :wf, :apicaller, :conn
27
+
28
+ def setup
29
+ @apicaller = FakeApiCaller.new
30
+ @conn = FakeConn.new
31
+ args = [nil, { offset: 3, limit: :lazy }]
32
+ @wf = Wavefront::Paginator::Post.new(apicaller, conn, :post, args)
33
+ end
34
+
35
+ def test_body_as
36
+ bo1 = [nil, { offset: 3, limit: 'lazy' }]
37
+ bs1 = [nil, '{"offset":3,"limit":"lazy"}']
38
+
39
+ bo2 = ['thing', { offset: 3, limit: 'lazy', a: 2 }, { c: 3 }]
40
+ bs2 = ['thing', '{"offset":3,"limit":"lazy","a":2}', { c: 3 }]
41
+
42
+ assert_equal(bo1, wf.body_as(Hash, bo1))
43
+ assert_equal(bo1, wf.body_as(Hash, bs1))
44
+ assert_equal(bs1, wf.body_as(String, bs1))
45
+ assert_equal(bo1, wf.body_as(Hash, bs1))
46
+ assert_equal([], wf.body_as(Hash, 'plain string'))
47
+
48
+ assert_equal(bo2, wf.body_as(Hash, bo2))
49
+ assert_equal(bo2, wf.body_as(Hash, bs2))
50
+ assert_equal(bs2, wf.body_as(String, bs2))
51
+ assert_equal(bo2, wf.body_as(Hash, bs2))
52
+ end
53
+ end
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../spec_helper'
4
+ require_relative 'resources/dummy_points'
4
5
 
5
6
  HEADERS = POST_HEADERS.merge('Content-Type': 'application/octet-stream')
7
+
6
8
  # Unit tests for Report class
7
9
  #
8
10
  class WavefrontReportTest < WavefrontTestBase
@@ -11,7 +13,7 @@ class WavefrontReportTest < WavefrontTestBase
11
13
  end
12
14
 
13
15
  def test_write
14
- should_work(:write, POINT, ['?f=graphite_v2', nil],
16
+ should_work(:write, POINT, ['?f=wavefront', nil],
15
17
  :post, HEADERS, POINT_L)
16
18
  end
17
19
  end
@@ -44,4 +44,29 @@ class WavefrontSearchTest < WavefrontTestBase
44
44
  assert_raises(ArgumentError) { wf.raw_facet_search }
45
45
  assert_raises(ArgumentError) { wf.raw_facet_search('ALERT', 'junk') }
46
46
  end
47
+
48
+ def test_body
49
+ q = [{ key: 'k1', value: 'v1', matchingMethod: 'EXACT' },
50
+ { key: 'k2', value: 'v2', matchingMethod: 'CONTAINS' }]
51
+
52
+ r1 = wf.body(q, {})
53
+
54
+ assert_equal({ limit: 10,
55
+ offset: 0,
56
+ query: [
57
+ { key: 'k1', value: 'v1', matchingMethod: 'EXACT' },
58
+ { key: 'k2', value: 'v2', matchingMethod: 'CONTAINS' }
59
+ ],
60
+ sort: { field: 'k1', ascending: true } },
61
+ r1)
62
+
63
+ r2 = wf.body(q, limit: 50)
64
+ assert_equal(50, r2[:limit])
65
+ assert_equal(0, r2[:offset])
66
+
67
+ r3 = wf.body([], {})
68
+
69
+ assert_equal({ limit: 10, offset: 0 }, r3)
70
+ assert_equal(0, r3[:offset])
71
+ end
47
72
  end