wavefront-sdk 3.3.2 → 3.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +42 -35
  3. data/README.md +5 -5
  4. data/lib/wavefront-sdk/alert.rb +2 -0
  5. data/lib/wavefront-sdk/core/api_caller.rb +6 -3
  6. data/lib/wavefront-sdk/defs/version.rb +2 -2
  7. data/lib/wavefront-sdk/derivedmetric.rb +7 -0
  8. data/lib/wavefront-sdk/externallink.rb +2 -2
  9. data/lib/wavefront-sdk/maintenancewindow.rb +6 -2
  10. data/lib/wavefront-sdk/notificant.rb +7 -0
  11. data/lib/wavefront-sdk/paginator/base.rb +8 -0
  12. data/lib/wavefront-sdk/search.rb +11 -2
  13. data/lib/wavefront-sdk/user.rb +39 -8
  14. data/lib/wavefront-sdk/webhook.rb +1 -1
  15. data/spec/constants.rb +30 -0
  16. data/spec/spec_helper.rb +12 -237
  17. data/spec/support/bad_mocket.rb +15 -0
  18. data/spec/support/hash.rb +9 -0
  19. data/spec/support/minitest_assertions.rb +110 -0
  20. data/spec/support/mocket.rb +19 -0
  21. data/spec/test_mixins/acl.rb +78 -0
  22. data/spec/test_mixins/general.rb +120 -0
  23. data/spec/test_mixins/tag.rb +55 -0
  24. data/spec/test_mixins/update_keys.rb +11 -0
  25. data/spec/wavefront-sdk/alert_spec.rb +88 -136
  26. data/spec/wavefront-sdk/apitoken_spec.rb +26 -13
  27. data/spec/wavefront-sdk/cloudintegration_spec.rb +42 -44
  28. data/spec/wavefront-sdk/dashboard_spec.rb +53 -72
  29. data/spec/wavefront-sdk/derivedmetric_spec.rb +23 -49
  30. data/spec/wavefront-sdk/distribution_spec.rb +14 -14
  31. data/spec/wavefront-sdk/event_spec.rb +39 -48
  32. data/spec/wavefront-sdk/externallink_spec.rb +19 -50
  33. data/spec/wavefront-sdk/integration_spec.rb +33 -38
  34. data/spec/wavefront-sdk/maintenancewindow_spec.rb +18 -33
  35. data/spec/wavefront-sdk/message_spec.rb +19 -4
  36. data/spec/wavefront-sdk/metric_spec.rb +13 -9
  37. data/spec/wavefront-sdk/notificant_spec.rb +16 -15
  38. data/spec/wavefront-sdk/proxy_spec.rb +20 -25
  39. data/spec/wavefront-sdk/query_spec.rb +50 -24
  40. data/spec/wavefront-sdk/report_spec.rb +3 -6
  41. data/spec/wavefront-sdk/resources/user_responses/add_user_groups.json +1 -0
  42. data/spec/wavefront-sdk/resources/user_responses/create.json +28 -0
  43. data/spec/wavefront-sdk/resources/user_responses/delete_multiple.json +1 -0
  44. data/spec/wavefront-sdk/resources/user_responses/describe.json +1 -0
  45. data/spec/wavefront-sdk/resources/user_responses/grant.json +1 -0
  46. data/spec/wavefront-sdk/resources/user_responses/list.json +1 -0
  47. data/spec/wavefront-sdk/savedsearch_spec.rb +41 -35
  48. data/spec/wavefront-sdk/search_spec.rb +35 -29
  49. data/spec/wavefront-sdk/settings_spec.rb +18 -12
  50. data/spec/wavefront-sdk/source_spec.rb +29 -32
  51. data/spec/wavefront-sdk/user_spec.rb +101 -74
  52. data/spec/wavefront-sdk/usergroup_spec.rb +56 -67
  53. data/spec/wavefront-sdk/webhook_spec.rb +22 -34
  54. data/spec/wavefront-sdk/write_spec.rb +2 -0
  55. data/spec/wavefront-sdk/writers/core_spec.rb +2 -0
  56. data/spec/wavefront-sdk/writers/summary_spec.rb +2 -0
  57. data/wavefront-sdk.gemspec +5 -5
  58. metadata +44 -13
@@ -1,25 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../spec_helper'
4
-
5
- EVENT = '1481553823153:testev'.freeze
6
- EVENT_BODY = {
7
- name: 'test_event',
8
- annotations: {
9
- severity: 'info',
10
- type: 'SDK test event',
11
- details: 'an imaginary event to test the SDK'
12
- },
13
- hosts: %w[host1 host2],
14
- startTime: 1_493_385_089_000,
15
- endTime: 1_493_385_345_678,
16
- tags: %w[tag1 tag2],
17
- isEphemeral: false
18
- }.freeze
4
+ require_relative '../test_mixins/general'
5
+ require_relative '../test_mixins/tag'
19
6
 
20
7
  # Unit tests for event class
21
8
  #
22
9
  class WavefrontEventTest < WavefrontTestBase
10
+ include WavefrontTest::Tag
11
+ include WavefrontTest::Create
12
+ include WavefrontTest::Delete
13
+ include WavefrontTest::Describe
14
+ include WavefrontTest::Update
15
+
23
16
  def test_list
24
17
  t1 = Time.now - 600
25
18
  t2 = Time.now
@@ -28,54 +21,52 @@ class WavefrontEventTest < WavefrontTestBase
28
21
 
29
22
  assert_raises(ArgumentError) { wf.list }
30
23
 
31
- should_work(:list, [t1, t2],
32
- "?earliestStartTimeEpochMillis=#{tms1}" \
33
- "&latestStartTimeEpochMillis=#{tms2}" \
34
- '&limit=100')
24
+ time_qs = ["earliestStartTimeEpochMillis=#{tms1}",
25
+ "latestStartTimeEpochMillis=#{tms2}",
26
+ 'limit=100'].join('&')
35
27
 
36
- should_work(:list, [tms1, tms2],
37
- "?earliestStartTimeEpochMillis=#{tms1}" \
38
- "&latestStartTimeEpochMillis=#{tms2}" \
39
- '&limit=100')
28
+ assert_gets("/api/v2/event?#{time_qs}") { wf.list(t1, t2) }
29
+ assert_gets("/api/v2/event?#{time_qs}") { wf.list(tms1, tms2) }
40
30
 
41
31
  assert_raises(Wavefront::Exception::InvalidTimestamp) do
42
32
  wf.list(t1, 'abc')
43
33
  end
44
34
  end
45
35
 
46
- def test_create
47
- should_work(:create, EVENT_BODY, '', :post,
48
- JSON_POST_HEADERS, EVENT_BODY.to_json)
49
- assert_raises(ArgumentError) { wf.create }
50
- assert_raises(ArgumentError) { wf.create('test') }
51
- end
36
+ def test_close
37
+ assert_posts("/api/v2/event/#{id}/close") do
38
+ wf.close(id)
39
+ end
52
40
 
53
- def test_describe
54
- should_work(:describe, EVENT, EVENT)
55
- should_be_invalid(:describe, 'abcdefg')
56
- assert_raises(ArgumentError) { wf.describe }
41
+ assert_invalid_id { wf.close(invalid_id) }
42
+ assert_raises(ArgumentError) { wf.close }
57
43
  end
58
44
 
59
- def test_close
60
- should_work(:close, EVENT, "#{EVENT}/close", :post, POST_HEADERS)
61
- should_be_invalid(:close, 'abcdefg')
62
- assert_raises(ArgumentError) { wf.close }
45
+ private
46
+
47
+ def id
48
+ '1481553823153:testev'
63
49
  end
64
50
 
65
- def test_update
66
- should_work(:update, [EVENT, EVENT_BODY, false], EVENT, :put,
67
- JSON_POST_HEADERS, EVENT_BODY.to_json)
68
- should_be_invalid(:update, ['abcde', EVENT_BODY])
69
- assert_raises(ArgumentError) { wf.update }
51
+ def invalid_id
52
+ 'nonsense'
70
53
  end
71
54
 
72
- def test_delete
73
- should_work(:delete, EVENT, EVENT, :delete)
74
- should_be_invalid(:delete, 'abcdefg')
75
- assert_raises(ArgumentError) { wf.delete }
55
+ def api_class
56
+ 'event'
76
57
  end
77
58
 
78
- def test_tags
79
- tag_tester(EVENT)
59
+ def payload
60
+ { name: 'test_event',
61
+ annotations: {
62
+ severity: 'info',
63
+ type: 'SDK test event',
64
+ details: 'an imaginary event to test the SDK'
65
+ },
66
+ hosts: %w[host1 host2],
67
+ startTime: 1_493_385_089_000,
68
+ endTime: 1_493_385_345_678,
69
+ tags: %w[tag1 tag2],
70
+ isEphemeral: false }
80
71
  end
81
72
  end
@@ -1,67 +1,36 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../spec_helper'
4
-
5
- EXTERNAL_LINK = 'lq6rPlSg2CFMSrg6'.freeze
6
- EXTERNAL_LINK_BODY = {
7
- name: 'test link',
8
- template: 'https://example.com/link/{{value}}',
9
- description: 'an imaginary link for unit testing purposes'
10
- }.freeze
11
-
12
- # rubocop:disable Style/MutableConstant
13
- EXTERNAL_LINK_BODY_2 = {
14
- name: 'test link',
15
- template: 'https://example.com/link/{{value}}'
16
- }
17
- # rubocop:enable Style/MutableConstant
4
+ require_relative '../test_mixins/general'
18
5
 
19
6
  # Unit tests for ExternalLink class
20
7
  #
21
8
  class WavefrontExternalLinkTest < WavefrontTestBase
22
- def api_base
23
- 'extlink'
24
- end
9
+ include WavefrontTest::List
10
+ include WavefrontTest::Create
11
+ include WavefrontTest::Delete
12
+ include WavefrontTest::Describe
13
+ include WavefrontTest::Update
25
14
 
26
- def test_list
27
- should_work(:list, 10, '?offset=10&limit=100')
28
- end
15
+ private
29
16
 
30
- def test_describe
31
- should_work(:describe, EXTERNAL_LINK, EXTERNAL_LINK)
32
- should_be_invalid(:describe, 'abcdefg')
33
- assert_raises(ArgumentError) { wf.describe }
17
+ def id
18
+ 'lq6rPlSg2CFMSrg6'
34
19
  end
35
20
 
36
- def test_create
37
- should_work(:create, EXTERNAL_LINK_BODY, '', :post,
38
- JSON_POST_HEADERS, EXTERNAL_LINK_BODY.to_json)
39
-
40
- should_work(:create, EXTERNAL_LINK_BODY_2, '', :post,
41
- JSON_POST_HEADERS, EXTERNAL_LINK_BODY_2
42
- .merge!(description: '').to_json)
43
-
44
- assert_raises(ArgumentError) { wf.create }
45
- assert_raises(ArgumentError) { wf.create('test') }
21
+ def invalid_id
22
+ '__rubbish_id__'
46
23
  end
47
24
 
48
- def test_delete
49
- should_work(:delete, EXTERNAL_LINK, EXTERNAL_LINK, :delete)
50
- should_be_invalid(:delete, 'abcdefg')
51
- assert_raises(ArgumentError) { wf.delete }
25
+ def payload
26
+ [{ name: 'test link',
27
+ template: 'https://example.com/link/{{value}}',
28
+ description: 'an imaginary link for unit testing purposes' },
29
+ { name: 'test link',
30
+ template: 'https://example.com/link/{{value}}' }]
52
31
  end
53
32
 
54
- def test_update
55
- should_work(:update, [EXTERNAL_LINK, EXTERNAL_LINK_BODY, false],
56
- EXTERNAL_LINK, :put, JSON_POST_HEADERS,
57
- EXTERNAL_LINK_BODY.to_json)
58
-
59
- should_work(:update, [EXTERNAL_LINK, EXTERNAL_LINK_BODY_2, false],
60
- EXTERNAL_LINK, :put, JSON_POST_HEADERS,
61
- EXTERNAL_LINK_BODY_2.to_json)
62
-
63
- should_be_invalid(:update, ['abcde', EXTERNAL_LINK_BODY])
64
- assert_raises(ArgumentError) { wf.update }
65
- assert_raises(ArgumentError) { wf.update(EXTERNAL_LINK) }
33
+ def api_class
34
+ 'extlink'
66
35
  end
67
36
  end
@@ -1,67 +1,62 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../spec_helper'
4
-
5
- INTEGRATION = 'tester'.freeze
4
+ require_relative '../test_mixins/general'
6
5
 
7
6
  # Unit tests for Integration class
8
7
  #
9
8
  class WavefrontIntegrationTest < WavefrontTestBase
10
- def test_list
11
- should_work(:list, 10, '?offset=10&limit=100')
12
- end
13
-
14
- def test_install
15
- should_work(:install, INTEGRATION, ["#{INTEGRATION}/install", nil],
16
- :post, POST_HEADERS)
17
- should_be_invalid(:install)
18
- assert_raises(ArgumentError) { wf.install }
19
- end
9
+ include WavefrontTest::Describe
10
+ include WavefrontTest::InstallUninstall
11
+ include WavefrontTest::List
20
12
 
21
13
  def test_install_all_alerts
22
- should_work(:install_all_alerts, INTEGRATION,
23
- ["#{INTEGRATION}/install-all-alerts", nil],
24
- :post, POST_HEADERS)
25
- should_be_invalid(:install_all_alerts)
26
- assert_raises(ArgumentError) { wf.install_all_alerts }
27
- end
14
+ assert_posts("/api/v2/integration/#{id}/install-all-alerts") do
15
+ wf.install_all_alerts(id)
16
+ end
28
17
 
29
- def test_uninstall
30
- should_work(:uninstall, INTEGRATION, ["#{INTEGRATION}/uninstall", nil],
31
- :post, POST_HEADERS)
32
- should_be_invalid(:uninstall)
33
- assert_raises(ArgumentError) { wf.uninstall }
18
+ assert_invalid_id { wf.install_all_alerts(invalid_id) }
19
+ assert_raises(ArgumentError) { wf.install_all_alerts }
34
20
  end
35
21
 
36
22
  def test_uninstall_all_alerts
37
- should_work(:uninstall_all_alerts, INTEGRATION,
38
- ["#{INTEGRATION}/uninstall-all-alerts", nil],
39
- :post, POST_HEADERS)
40
- should_be_invalid(:uninstall_all_alerts)
41
- assert_raises(ArgumentError) { wf.uninstall_all_alerts }
42
- end
23
+ assert_posts("/api/v2/integration/#{id}/uninstall-all-alerts") do
24
+ wf.uninstall_all_alerts(id)
25
+ end
43
26
 
44
- def test_describe
45
- should_work(:describe, INTEGRATION, INTEGRATION)
46
- should_be_invalid(:describe)
47
- assert_raises(ArgumentError) { wf.describe }
27
+ assert_invalid_id { wf.uninstall_all_alerts(invalid_id) }
28
+ assert_raises(ArgumentError) { wf.uninstall_all_alerts }
48
29
  end
49
30
 
50
31
  def test_status
51
- should_work(:status, INTEGRATION, "#{INTEGRATION}/status")
52
- should_be_invalid(:status)
32
+ assert_gets("/api/v2/integration/#{id}/status") { wf.status(id) }
33
+ assert_invalid_id { wf.status(invalid_id) }
53
34
  assert_raises(ArgumentError) { wf.status }
54
35
  end
55
36
 
56
37
  def test_installed
57
- should_work(:installed, nil, 'installed')
38
+ assert_gets('/api/v2/integration/installed') { wf.installed }
58
39
  end
59
40
 
60
41
  def test_manifests
61
- should_work(:manifests, nil, 'manifests')
42
+ assert_gets('/api/v2/integration/manifests') { wf.manifests }
62
43
  end
63
44
 
64
45
  def test_statuses
65
- should_work(:statuses, nil, 'status')
46
+ assert_gets('/api/v2/integration/status') { wf.statuses }
47
+ end
48
+
49
+ private
50
+
51
+ def api_class
52
+ 'integration'
53
+ end
54
+
55
+ def id
56
+ 'tester'
57
+ end
58
+
59
+ def invalid_id
60
+ 'very bad id'
66
61
  end
67
62
  end
@@ -1,48 +1,33 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../spec_helper'
4
-
5
- WINDOW = '1493324005091'.freeze
6
- WINDOW_BODY = {
7
- reason: 'testing SDK',
8
- title: 'test window',
9
- start: Time.now.to_i,
10
- end: Time.now.to_i + 600,
11
- tags: %w[testtag1 testtag2],
12
- hostTags: %w[hosttag1 hosttag2]
13
- }.freeze
4
+ require_relative '../test_mixins/general'
14
5
 
15
6
  # Unit tests for MaintenanceWindow class
16
7
  #
17
8
  class WavefrontMaintenanceWindowTest < WavefrontTestBase
18
- def test_list
19
- should_work(:list, 10, '?offset=10&limit=100')
20
- should_work(:list, [20, 30], '?offset=20&limit=30')
21
- end
9
+ include WavefrontTest::Create
10
+ include WavefrontTest::Delete
11
+ include WavefrontTest::Describe
12
+ include WavefrontTest::List
13
+ include WavefrontTest::Update
22
14
 
23
- def test_describe
24
- should_work(:describe, WINDOW, WINDOW)
25
- should_be_invalid(:describe, 'abcdefg')
26
- assert_raises(ArgumentError) { wf.describe }
27
- end
15
+ private
28
16
 
29
- def test_create
30
- should_work(:create, WINDOW_BODY, '', :post,
31
- JSON_POST_HEADERS, WINDOW_BODY.to_json)
32
- assert_raises(ArgumentError) { wf.create }
33
- assert_raises(ArgumentError) { wf.create('test') }
17
+ def api_class
18
+ 'maintenancewindow'
34
19
  end
35
20
 
36
- def test_delete
37
- should_work(:delete, WINDOW, WINDOW, :delete)
38
- should_be_invalid(:delete, 'abcdefg')
39
- assert_raises(ArgumentError) { wf.delete }
21
+ def id
22
+ '1493324005091'
40
23
  end
41
24
 
42
- def test_update
43
- should_work(:update, [WINDOW, WINDOW_BODY, false], WINDOW, :put,
44
- JSON_POST_HEADERS, WINDOW_BODY.to_json)
45
- should_be_invalid(:update, ['abcde', WINDOW_BODY])
46
- assert_raises(ArgumentError) { wf.update }
25
+ def payload
26
+ { reason: 'testing SDK',
27
+ title: 'test window',
28
+ start: Time.now.to_i,
29
+ end: Time.now.to_i + 600,
30
+ tags: %w[testtag1 testtag2],
31
+ hostTags: %w[hosttag1 hosttag2] }
47
32
  end
48
33
  end
@@ -8,12 +8,27 @@ MESSAGE = 'CLUSTER::IHjNaHM9'.freeze
8
8
  #
9
9
  class WavefrontMessageTest < WavefrontTestBase
10
10
  def test_list
11
- should_work(:list, 10, '?offset=10&limit=100&unreadOnly=true')
12
- should_work(:list, [12, 34, false], '?offset=12&limit=34&unreadOnly=false')
11
+ assert_gets('/api/v2/message?offset=10&limit=100&unreadOnly=true') do
12
+ wf.list(10)
13
+ end
14
+
15
+ assert_gets('/api/v2/message?offset=12&limit=34&unreadOnly=false') do
16
+ wf.list(12, 34, false)
17
+ end
13
18
  end
14
19
 
15
20
  def test_read
16
- should_work(:read, MESSAGE, "#{MESSAGE}/read", :post, POST_HEADERS)
17
- should_be_invalid(:read, 'bad id')
21
+ assert_posts("/api/v2/message/#{id}/read") { wf.read(id) }
22
+ assert_invalid_id { wf.read(invalid_id) }
23
+ end
24
+
25
+ private
26
+
27
+ def id
28
+ 'CLUSTER::IHjNaHM9'
29
+ end
30
+
31
+ def invalid_id
32
+ '__!!__'
18
33
  end
19
34
  end
@@ -5,16 +5,20 @@ require_relative '../spec_helper'
5
5
  # Unit tests for Metric class
6
6
  #
7
7
  class WavefrontMetricTest < WavefrontTestBase
8
- def api_base
9
- 'chart/metric'
10
- end
11
-
12
8
  def test_detail
13
- should_work(:detail, 'metric.1', 'detail?m=metric.1')
14
- should_work(:detail, ['metric.1', %w[host1 host2]],
15
- 'detail?m=metric.1&h=host1&h=host2')
16
- should_work(:detail, ['metric.1', %w[host1 host2], 'abc'],
17
- 'detail?m=metric.1&h=host1&h=host2&c=abc')
9
+ assert_gets('/api/v2/chart/metric/detail?m=test.metric') do
10
+ wf.detail('test.metric')
11
+ end
12
+
13
+ assert_gets('/api/v2/chart/metric/detail?m=path&h=host1&h=host2') do
14
+ wf.detail('path', %w[host1 host2])
15
+ end
16
+
17
+ assert_gets('/api/v2/chart/metric/detail?m=test.metric&' \
18
+ 'h=host1&h=host2&c=abc') do
19
+ wf.detail('test.metric', %w[host1 host2], 'abc')
20
+ end
21
+
18
22
  assert_raises(ArgumentError) { wf.detail }
19
23
  assert_raises(ArgumentError) { wf.detail('m1', 'm2') }
20
24
  end
@@ -1,30 +1,31 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../spec_helper'
4
-
5
- NOTIFICANT = '8Bl5l7wxtdGindxk'.freeze
4
+ require_relative '../test_mixins/general'
6
5
 
7
6
  # Unit tests for notificant class
8
7
  #
9
8
  class WavefrontNotificantTest < WavefrontTestBase
10
- def test_list
11
- should_work(:list, 10, '?offset=10&limit=100')
9
+ include WavefrontTest::List
10
+ include WavefrontTest::Delete
11
+ include WavefrontTest::Describe
12
+
13
+ def test_test
14
+ assert_posts("/api/v2/notificant/test/#{id}") { wf.test(id) }
15
+ assert_invalid_id { wf.test(invalid_id) }
12
16
  end
13
17
 
14
- def test_describe
15
- should_work(:describe, NOTIFICANT, NOTIFICANT)
16
- should_be_invalid(:describe)
17
- assert_raises(ArgumentError) { wf.describe }
18
+ private
19
+
20
+ def api_class
21
+ 'notificant'
18
22
  end
19
23
 
20
- def test_delete
21
- should_work(:delete, NOTIFICANT, NOTIFICANT, :delete)
22
- should_be_invalid('delete')
24
+ def id
25
+ '8Bl5l7wxtdGindxk'
23
26
  end
24
27
 
25
- def test_test
26
- should_work(:test, NOTIFICANT, ["test/#{NOTIFICANT}", nil],
27
- :post, POST_HEADERS)
28
- should_be_invalid('test')
28
+ def invalid_id
29
+ '---rubbish---'
29
30
  end
30
31
  end