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.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/HISTORY.md +39 -13
- data/README.md +75 -28
- data/Rakefile +1 -1
- data/lib/wavefront-sdk/alert.rb +113 -17
- data/lib/wavefront-sdk/cloudintegration.rb +8 -8
- data/lib/wavefront-sdk/core/api.rb +99 -0
- data/lib/wavefront-sdk/core/api_caller.rb +211 -0
- data/lib/wavefront-sdk/{exception.rb → core/exception.rb} +11 -6
- data/lib/wavefront-sdk/{logger.rb → core/logger.rb} +2 -3
- data/lib/wavefront-sdk/{response.rb → core/response.rb} +69 -52
- data/lib/wavefront-sdk/credentials.rb +6 -3
- data/lib/wavefront-sdk/dashboard.rb +14 -14
- data/lib/wavefront-sdk/{constants.rb → defs/constants.rb} +1 -0
- data/lib/wavefront-sdk/defs/version.rb +1 -0
- data/lib/wavefront-sdk/derivedmetric.rb +14 -14
- data/lib/wavefront-sdk/distribution.rb +75 -0
- data/lib/wavefront-sdk/event.rb +13 -13
- data/lib/wavefront-sdk/externallink.rb +8 -8
- data/lib/wavefront-sdk/integration.rb +9 -9
- data/lib/wavefront-sdk/maintenancewindow.rb +54 -8
- data/lib/wavefront-sdk/message.rb +4 -4
- data/lib/wavefront-sdk/metric.rb +3 -3
- data/lib/wavefront-sdk/notificant.rb +9 -9
- data/lib/wavefront-sdk/paginator/base.rb +148 -0
- data/lib/wavefront-sdk/paginator/delete.rb +11 -0
- data/lib/wavefront-sdk/paginator/get.rb +11 -0
- data/lib/wavefront-sdk/paginator/post.rb +64 -0
- data/lib/wavefront-sdk/paginator/put.rb +11 -0
- data/lib/wavefront-sdk/proxy.rb +7 -7
- data/lib/wavefront-sdk/query.rb +4 -4
- data/lib/wavefront-sdk/report.rb +9 -25
- data/lib/wavefront-sdk/savedsearch.rb +8 -8
- data/lib/wavefront-sdk/search.rb +16 -13
- data/lib/wavefront-sdk/source.rb +14 -14
- data/lib/wavefront-sdk/{mixins.rb → support/mixins.rb} +8 -2
- data/lib/wavefront-sdk/{parse_time.rb → support/parse_time.rb} +2 -0
- data/lib/wavefront-sdk/types/status.rb +52 -0
- data/lib/wavefront-sdk/user.rb +8 -8
- data/lib/wavefront-sdk/validators.rb +52 -3
- data/lib/wavefront-sdk/webhook.rb +8 -8
- data/lib/wavefront-sdk/write.rb +153 -52
- data/lib/wavefront-sdk/writers/api.rb +38 -0
- data/lib/wavefront-sdk/writers/core.rb +146 -0
- data/lib/wavefront-sdk/writers/http.rb +42 -0
- data/lib/wavefront-sdk/writers/socket.rb +66 -0
- data/lib/wavefront-sdk/writers/summary.rb +39 -0
- data/lib/wavefront_sdk.rb +9 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/wavefront-sdk/alert_spec.rb +6 -0
- data/spec/wavefront-sdk/{base_spec.rb → core/api_caller_spec.rb} +28 -41
- data/spec/wavefront-sdk/core/api_spec.rb +31 -0
- data/spec/wavefront-sdk/{logger_spec.rb → core/logger_spec.rb} +3 -3
- data/spec/wavefront-sdk/core/response_spec.rb +77 -0
- data/spec/wavefront-sdk/credentials_spec.rb +15 -10
- data/spec/wavefront-sdk/distribution_spec.rb +78 -0
- data/spec/wavefront-sdk/paginator/base_spec.rb +67 -0
- data/spec/wavefront-sdk/paginator/post_spec.rb +53 -0
- data/spec/wavefront-sdk/report_spec.rb +3 -1
- data/spec/wavefront-sdk/search_spec.rb +25 -0
- data/spec/wavefront-sdk/stdlib/array_spec.rb +2 -1
- data/spec/wavefront-sdk/stdlib/hash_spec.rb +6 -1
- data/spec/wavefront-sdk/stdlib/string_spec.rb +2 -0
- data/spec/wavefront-sdk/{mixins_spec.rb → support/mixins_spec.rb} +2 -2
- data/spec/wavefront-sdk/{parse_time_spec.rb → support/parse_time_spec.rb} +2 -2
- data/spec/wavefront-sdk/validators_spec.rb +64 -1
- data/spec/wavefront-sdk/write_spec.rb +55 -77
- data/spec/wavefront-sdk/writers/api_spec.rb +45 -0
- data/spec/wavefront-sdk/writers/core_spec.rb +49 -0
- data/spec/wavefront-sdk/writers/http_spec.rb +69 -0
- data/spec/wavefront-sdk/writers/socket_spec.rb +104 -0
- data/spec/wavefront-sdk/writers/summary_spec.rb +38 -0
- data/wavefront-sdk.gemspec +1 -1
- metadata +52 -24
- data/lib/wavefront-sdk/base.rb +0 -264
- data/lib/wavefront-sdk/base_write.rb +0 -185
- data/lib/wavefront-sdk/stdlib.rb +0 -5
- data/lib/wavefront-sdk/version.rb +0 -1
- data/spec/wavefront-sdk/base_write_spec.rb +0 -82
- 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 '
|
5
|
-
require_relative '
|
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(
|
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
|
-
|
8
|
-
|
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:
|
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:
|
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:
|
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([
|
152
|
-
file:
|
156
|
+
assert_equal(wf.load_from_file([CONF1], 'noprofile'),
|
157
|
+
file: CONF1)
|
153
158
|
|
154
|
-
x = wf.load_from_file([CONF2,
|
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,
|
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([
|
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=
|
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
|