hawkular-client 0.2.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/.yardopts +1 -0
  4. data/CHANGES.rdoc +17 -4
  5. data/README.rdoc +15 -6
  6. data/api_breaking_changes.rdoc +79 -0
  7. data/hawkularclient.gemspec +6 -5
  8. data/lib/{alerts → hawkular/alerts}/alerts_api.rb +168 -7
  9. data/lib/{hawkular.rb → hawkular/base_client.rb} +7 -44
  10. data/lib/hawkular/hawkular_client.rb +60 -0
  11. data/lib/hawkular/hawkular_client_utils.rb +40 -0
  12. data/lib/{inventory → hawkular/inventory}/inventory_api.rb +167 -142
  13. data/lib/{metrics → hawkular/metrics}/metric_api.rb +1 -0
  14. data/lib/{metrics → hawkular/metrics}/metrics_client.rb +4 -4
  15. data/lib/{metrics → hawkular/metrics}/tenant_api.rb +0 -0
  16. data/lib/{metrics → hawkular/metrics}/types.rb +0 -0
  17. data/lib/{operations → hawkular/operations}/operations_api.rb +11 -8
  18. data/lib/{tokens → hawkular/tokens}/tokens_api.rb +1 -1
  19. data/lib/{version.rb → hawkular/version.rb} +1 -1
  20. data/spec/integration/alerts_spec.rb +200 -0
  21. data/spec/integration/hawkular_client_spec.rb +228 -0
  22. data/spec/integration/inventory_spec.rb +246 -160
  23. data/spec/integration/metric_spec.rb +52 -59
  24. data/spec/integration/operations_spec.rb +53 -29
  25. data/spec/spec_helper.rb +109 -8
  26. data/spec/unit/base_spec.rb +9 -0
  27. data/spec/unit/canonical_path_spec.rb +2 -2
  28. data/spec/vcr/vcr_setup.rb +6 -0
  29. data/spec/vcr_cassettes/Alert/Events/Should_create_an_event.yml +50 -0
  30. data/spec/vcr_cassettes/Alert/Groups/Should_operate_a_complex_group_trigger.yml +1726 -0
  31. data/spec/vcr_cassettes/Counter_metrics/Should_get_metrics_as_bucketed_results.yml +190 -0
  32. data/spec/vcr_cassettes/Counter_metrics/Should_get_metrics_with_limit_and_order.yml +30 -42
  33. data/spec/vcr_cassettes/HawkularClient/and_Inventory_client/Should_both_create_and_delete_feed.yml +287 -0
  34. data/spec/vcr_cassettes/{Inventory/Should_list_URLs.yml → HawkularClient/and_Inventory_client/Should_both_list_WildFlys.yml} +35 -33
  35. data/spec/vcr_cassettes/{Inventory/Should_list_types_with_bad_feed.yml → HawkularClient/and_Inventory_client/Should_both_list_types_with_bad_feed.yml} +16 -19
  36. data/spec/vcr_cassettes/HawkularClient/and_Inventory_client/Should_list_same_types_when_param_is_given.yml +245 -0
  37. data/spec/vcr_cassettes/{Inventory/Should_list_feeds.yml → HawkularClient/and_Inventory_client/Should_list_the_same_feeds.yml} +20 -20
  38. data/spec/vcr_cassettes/HawkularClient/and_Inventory_client/Should_list_the_same_resource_types.yml +249 -0
  39. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_create_and_retrieve_tags_for_Availability.yml +155 -0
  40. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_create_and_return_Availability_using_Hash_parameter.yml +155 -0
  41. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_return_the_version.yml +89 -0
  42. data/spec/vcr_cassettes/HawkularClient/and_Metrics_client/Should_both_work_the_same_way_when_pushing_metric_data_to_non-existing_counter.yml +114 -0
  43. data/spec/vcr_cassettes/{Inventory/Should_list_WildFlys_with_props.yml → HawkularClient/and_Operations_client/Should_both_work_the_same_way.yml} +28 -50
  44. data/spec/vcr_cassettes/HawkularClient/and_Operations_client_Should_both_work_the_same_way.json +44 -0
  45. data/spec/vcr_cassettes/Inventory/Helpers/create_url.yml +48 -0
  46. data/spec/vcr_cassettes/Inventory/Helpers/generate_some_events_for_websocket.yml +4446 -0
  47. data/spec/vcr_cassettes/Inventory/Helpers/get_feeds.yml +54 -0
  48. data/spec/vcr_cassettes/Inventory/Templates/Client_should_listen_on_various_inventory_events.json +47 -0
  49. data/spec/vcr_cassettes/Inventory/{Should_create_a_resourcetype.yml → Templates/Client_should_listen_on_various_inventory_events.yml} +47 -61
  50. data/spec/vcr_cassettes/Inventory/Templates/Helpers/generate_some_events_for_websocket.yml +542 -0
  51. data/spec/vcr_cassettes/Inventory/{Should_List_datasources_with_no_props.yml → Templates/Should_List_datasources_with_no_props.yml} +26 -85
  52. data/spec/vcr_cassettes/Inventory/Templates/Should_create_a_feed.yml +54 -0
  53. data/spec/vcr_cassettes/Inventory/Templates/Should_create_a_feed_again.yml +164 -0
  54. data/spec/vcr_cassettes/Inventory/{Should_create_a_nested_resource_and_metric_on_it.yml → Templates/Should_create_a_nested_resource_and_metric_on_it.yml} +93 -74
  55. data/spec/vcr_cassettes/Inventory/{Should_create_a_resource_.yml → Templates/Should_create_a_resource.yml} +103 -76
  56. data/spec/vcr_cassettes/Inventory/{Should_create_a_resource_with_metric.yml → Templates/Should_create_a_resource_with_metric.yml} +91 -197
  57. data/spec/vcr_cassettes/Inventory/Templates/Should_create_a_resourcetype.yml +154 -0
  58. data/spec/vcr_cassettes/Inventory/Templates/Should_create_and_delete_feed.yml +145 -0
  59. data/spec/vcr_cassettes/Inventory/{Should_create_and_get_a_resource.yml → Templates/Should_create_and_get_a_resource.yml} +35 -20
  60. data/spec/vcr_cassettes/Inventory/Templates/Should_list_URLs.yml +65 -0
  61. data/spec/vcr_cassettes/Inventory/Templates/Should_list_WildFlys.yml +61 -0
  62. data/spec/vcr_cassettes/Inventory/{Should_list_WildFlys.yml → Templates/Should_list_WildFlys_with_props.yml} +36 -33
  63. data/spec/vcr_cassettes/Inventory/Templates/Should_list_all_the_resource_types.yml +126 -0
  64. data/spec/vcr_cassettes/Inventory/{Should_list_children_of_WildFly.yml → Templates/Should_list_children_of_WildFly.yml} +66 -112
  65. data/spec/vcr_cassettes/Inventory/{Should_list_children_of_nested_resource.yml → Templates/Should_list_children_of_nested_resource.yml} +13 -13
  66. data/spec/vcr_cassettes/Inventory/Templates/Should_list_feeds.yml +54 -0
  67. data/spec/vcr_cassettes/Inventory/Templates/Should_list_heap_metrics_for_WildFlys.yml +712 -0
  68. data/spec/vcr_cassettes/Inventory/Templates/Should_list_metrics_for_WildFlys.yml +278 -0
  69. data/spec/vcr_cassettes/Inventory/Templates/Should_list_metrics_of_given_metric_type.yml +530 -0
  70. data/spec/vcr_cassettes/Inventory/Templates/Should_list_metrics_of_given_resource_type.yml +278 -0
  71. data/spec/vcr_cassettes/Inventory/Templates/Should_list_operation_definitions_of_given_resource.yml +185 -0
  72. data/spec/vcr_cassettes/Inventory/Templates/Should_list_operation_definitions_of_given_resource_type.yml +126 -0
  73. data/spec/vcr_cassettes/Inventory/Templates/Should_list_recursive_children_of_WildFly.yml +2369 -0
  74. data/spec/vcr_cassettes/Inventory/Templates/Should_list_relationships_of_WildFly.yml +415 -0
  75. data/spec/vcr_cassettes/Inventory/Templates/Should_list_types_with_bad_feed.yml +51 -0
  76. data/spec/vcr_cassettes/Inventory/Templates/Should_list_types_with_feed.yml +124 -0
  77. data/spec/vcr_cassettes/Inventory/{Should_not_find_an_unknown_resource.yml → Templates/Should_not_find_an_unknown_resource.yml} +14 -13
  78. data/spec/vcr_cassettes/Inventory/{Should_return_config_data_of_given_nested_resource.yml → Templates/Should_return_config_data_of_given_nested_resource.yml} +4 -4
  79. data/spec/vcr_cassettes/Inventory/{Should_return_config_data_of_given_resource.yml → Templates/Should_return_config_data_of_given_resource.yml} +4 -4
  80. data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Explicit_Credentials.yml +50 -0
  81. data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Implicit_Credentials.yml +50 -0
  82. data/spec/vcr_cassettes/Operation/Helpers/get_feed.yml +54 -0
  83. data/spec/vcr_cassettes/Operation/Helpers/get_tenant.yml +50 -0
  84. data/spec/vcr_cassettes/Operation/Operation/Add_JDBC_driver_should_add_the_driver.json +26 -0
  85. data/spec/vcr_cassettes/Operation/Operation/Add_datasource_should_be_doable.json +26 -0
  86. data/spec/vcr_cassettes/Operation/Operation/Add_deployment_should_be_doable.json +26 -0
  87. data/spec/vcr_cassettes/Operation/Operation/Redeploy_can_be_run_multiple_times_in_parallel.json +40 -0
  88. data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
  89. data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_not_be_performed_if_resource_path_is_wrong.json +26 -0
  90. data/spec/vcr_cassettes/Operation/Operation/Remove_JDBC_driver_should_be_performed_and_eventually_respond_with_success.json +26 -0
  91. data/spec/vcr_cassettes/Operation/Operation/Remove_datasource_should_be_performed_and_eventually_respond_with_success.json +26 -0
  92. data/spec/vcr_cassettes/Operation/Operation/Remove_deployment_should_be_performed_and_eventually_respond_with_success.json +26 -0
  93. data/spec/vcr_cassettes/Operation/Operation/Undeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
  94. data/spec/vcr_cassettes/Operation/Operation/should_not_be_possible_to_perform_on_closed_client.json +12 -0
  95. data/spec/vcr_cassettes/Operation/Websocket_connection/should_be_established.json +9 -0
  96. metadata +171 -72
  97. data/lib/hawkular_all.rb +0 -9
  98. data/spec/vcr_cassettes/Inventory/Should_create_a_feed.yml +0 -107
  99. data/spec/vcr_cassettes/Inventory/Should_create_a_feed_again.yml +0 -211
  100. data/spec/vcr_cassettes/Inventory/Should_create_and_delete_feed.yml +0 -201
  101. data/spec/vcr_cassettes/Inventory/Should_list_all_the_resource_types.yml +0 -177
  102. data/spec/vcr_cassettes/Inventory/Should_list_heap_metrics_for_WildFlys.yml +0 -775
  103. data/spec/vcr_cassettes/Inventory/Should_list_metrics_for_WildFlys.yml +0 -333
  104. data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_metric_type.yml +0 -613
  105. data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_resource_type.yml +0 -333
  106. data/spec/vcr_cassettes/Inventory/Should_list_recursive_children_of_WildFly.yml +0 -2064
  107. data/spec/vcr_cassettes/Inventory/Should_list_relationships_of_WildFly.yml +0 -460
  108. data/spec/vcr_cassettes/Inventory/Should_list_types_with_feed.yml +0 -175
@@ -7,57 +7,6 @@ require 'securerandom'
7
7
  # time constants
8
8
  t4h = 4 * 60 * 60 * 1000
9
9
 
10
- # more or less generic method common for all metric types (counters, gauges, availabilities)
11
- def create_metric_using_hash(endpoint, id)
12
- endpoint.create(id: id, dataRetention: 123, tags: { some: 'value' }, tenantId: @tenant)
13
- metric = endpoint.get(id)
14
-
15
- expect(metric).to be_a(Hawkular::Metrics::MetricDefinition)
16
- expect(metric.id).to eql(id)
17
- expect(metric.data_retention).to eql(123)
18
- expect(metric.tenant_id).to eql(@tenant)
19
- end
20
-
21
- def create_metric_using_md(endpoint, id)
22
- metric = Hawkular::Metrics::MetricDefinition.new
23
- metric.id = id
24
- metric.data_retention = 90
25
- metric.tags = { tag: 'value' }
26
- endpoint.create(metric)
27
-
28
- created = endpoint.get(metric.id)
29
- expect(created).to be_a(Hawkular::Metrics::MetricDefinition)
30
- expect(created.id).to eql(metric.id)
31
- expect(created.data_retention).to eql(metric.data_retention)
32
- end
33
-
34
- def push_data_to_non_existing_metric(endpoint, data, id)
35
- # push one value without timestamp (which means now)
36
- endpoint.push_data(id, data)
37
-
38
- data = endpoint.get_data(id)
39
- expect(data.size).to be 1
40
-
41
- # verify metric was auto-created
42
- counter = endpoint.get(id)
43
- expect(counter).to be_a(Hawkular::Metrics::MetricDefinition)
44
- expect(counter.id).to eql(id)
45
- end
46
-
47
- def update_metric_by_tags(endpoint, id)
48
- endpoint.create(id: id, tags: { myTag: id })
49
- metric = endpoint.get(id)
50
- metric.tags = { newTag: 'newValue' }
51
- endpoint.update_tags(metric)
52
-
53
- metric = endpoint.get(id)
54
- expect(metric.tags).to include('newTag' => 'newValue', 'myTag' => id)
55
-
56
- # query API for a metric with given tag
57
- data = endpoint.query(myTag: id)
58
- expect(data.size).to be 1
59
- end
60
-
61
10
  describe 'Simple', :vcr do
62
11
  it 'Should be Cool' do
63
12
  Net::HTTP.get_response(URI('http://localhost:8080/'))
@@ -153,7 +102,7 @@ describe 'Counter metrics' do
153
102
  VCR.use_cassette('Counter_metrics/Should create and return counter using Hash parameter',
154
103
  erb: { id: id }, record: :none
155
104
  ) do
156
- create_metric_using_hash @client.counters, id
105
+ create_metric_using_hash @client.counters, id, @tenant
157
106
  end
158
107
  end
159
108
 
@@ -200,18 +149,19 @@ describe 'Counter metrics' do
200
149
 
201
150
  it 'Should get metrics with limit and order' do
202
151
  @client = setup_client(username: 'jdoe', password: 'password')
203
- id = '33c6a285-495a-4442-a818-974b03408a6f'
204
- now = 1_458_666_669_263
152
+ id = SecureRandom.uuid
153
+ now = 1_462_872_284_000
205
154
 
206
155
  VCR.use_cassette('Counter_metrics/Should get metrics with limit and order',
156
+ decode_compressed_response: true,
207
157
  erb: { id: id, ends: now - t4h, starts: now - (2 * t4h),
208
- minus20: now - 20, minus30: now - 30, minus10: now - 10,
158
+ minus10: now - 10, minus20: now - 20, minus30: now - 30,
209
159
  now: now }, record: :none
210
160
  ) do
211
161
  # create counter
212
162
  @client.counters.create(id: id)
213
163
 
214
- # push 3 values with timestamps
164
+ # push 3 values with timestamps
215
165
  @client.counters.push_data(id, [{ value: 1, timestamp: now - 30 },
216
166
  { value: 2, timestamp: now - 20 },
217
167
  { value: 3, timestamp: now - 10 }])
@@ -225,8 +175,9 @@ describe 'Counter metrics' do
225
175
  expect(data.size).to be 4
226
176
 
227
177
  # retrieve values with limit
228
- data = @client.counters.get_data(id, limit: 1)
178
+ data = @client.counters.get_data(id, limit: 1, order: 'DESC')
229
179
  expect(data.size).to be 1
180
+ expect(data.first['value']).to be 4
230
181
 
231
182
  # retrieve values from past
232
183
  data = @client.counters.get_data(id, starts: now - (2 * t4h), ends: now - t4h)
@@ -234,6 +185,48 @@ describe 'Counter metrics' do
234
185
  end
235
186
  end
236
187
 
188
+ it 'Should get metrics as bucketed results' do
189
+ @client = setup_client(username: 'jdoe', password: 'password')
190
+ id = SecureRandom.uuid
191
+ now = @client.now
192
+
193
+ VCR.use_cassette('Counter_metrics/Should get metrics as bucketed results',
194
+ decode_compressed_response: true,
195
+ erb: { id: id, now: now }, record: :none
196
+ ) do
197
+ # create counter
198
+ @client.counters.create(id: id)
199
+
200
+ # push 10 values with timestamps
201
+ @client.counters.push_data(id, [{ value: 110, timestamp: now - 110 },
202
+ { value: 100, timestamp: now - 100 },
203
+ { value: 90, timestamp: now - 90 },
204
+ { value: 80, timestamp: now - 80 },
205
+ { value: 70, timestamp: now - 70 },
206
+ { value: 60, timestamp: now - 60 },
207
+ { value: 50, timestamp: now - 50 },
208
+ { value: 40, timestamp: now - 40 },
209
+ { value: 30, timestamp: now - 30 },
210
+ { value: 20, timestamp: now - 20 },
211
+ { value: 10, timestamp: now - 10 }])
212
+ ERR = 0.001
213
+ data = @client.counters.get_data(id, starts: now - 105, ends: now - 5, buckets: 5)
214
+ expect(data.size).to be 5
215
+ expect(data.first['avg']).to be_within(ERR).of(95.0)
216
+ expect(data.first['max']).to be_within(ERR).of(100.0)
217
+ expect(data.first['samples']).to be 2
218
+
219
+ data = @client.counters.get_data(id, starts: now - 105, ends: now - 5, buckets: 2)
220
+ expect(data.size).to be 2
221
+ expect(data.first['avg']).to be_within(ERR).of(80.0)
222
+ expect(data.first['samples']).to be 5
223
+
224
+ data = @client.counters.get_data(id, starts: now - 105, ends: now - 5, bucketDuration: '50ms')
225
+ expect(data.size).to be 2
226
+ expect(data.first['avg']).to be_within(ERR).of(80.0)
227
+ end
228
+ end
229
+
237
230
  it 'Should push metric data to non-existing counter' do
238
231
  id = SecureRandom.uuid
239
232
 
@@ -256,7 +249,7 @@ describe 'Availability metrics' do
256
249
  'Availability_metrics/Should create and return Availability using Hash parameter',
257
250
  erb: { id: id }, record: :none
258
251
  ) do
259
- create_metric_using_hash @client.avail, id
252
+ create_metric_using_hash @client.avail, id, @tenant
260
253
  end
261
254
  end
262
255
 
@@ -312,7 +305,7 @@ describe 'Gauge metrics' do
312
305
  VCR.use_cassette('Gauge_metrics/Should create gauge definition using Hash',
313
306
  erb: { id: id }, record: :none
314
307
  ) do
315
- create_metric_using_hash @client.gauges, id
308
+ create_metric_using_hash @client.gauges, id, @tenant
316
309
  end
317
310
  end
318
311
 
@@ -5,40 +5,71 @@ require 'securerandom'
5
5
  include Hawkular::Inventory
6
6
  include Hawkular::Operations
7
7
 
8
- # WebSocket communication cannot be faked via VCR cassettes
8
+ # examples for operations, it uses the websocket communication
9
9
  module Hawkular::Operations::RSpec
10
10
  HOST = 'localhost:8080'
11
- describe 'Websocket connection' do
12
- it 'should be established', :websocket do
13
- client = OperationsClient.new(host: HOST,
14
- credentials: {
15
- username: 'jdoe',
16
- password: 'password'
17
- })
18
- ws = client.ws
19
- expect(ws).not_to be nil
20
- expect(ws.open?).to be true
11
+ describe 'Operation/Websocket connection', vcr: { decode_compressed_response: true } do
12
+ let(:example) do |e|
13
+ e
14
+ end
15
+
16
+ it 'should be established' do
17
+ WebSocketVCR.configure do |c|
18
+ c.hook_uris = [HOST]
19
+ end
20
+
21
+ WebSocketVCR.record(example, self) do
22
+ client = OperationsClient.new(host: HOST,
23
+ wait_time: WebSocketVCR.live? ? 1.5 : 0,
24
+ credentials: {
25
+ username: 'jdoe',
26
+ password: 'password'
27
+ })
28
+ ws = client.ws
29
+ expect(ws).not_to be nil
30
+ expect(ws.open?).to be true
31
+ end
21
32
  end
22
33
  end
23
34
 
24
- describe 'Operation', :websocket do
35
+ describe 'Operation/Operation', :websocket, vcr: { decode_compressed_response: true } do
36
+ let(:example) do |e|
37
+ e
38
+ end
39
+
25
40
  before(:all) do
26
- VCR.turn_off!(ignore_cassettes: true)
27
- WebMock.allow_net_connect!
28
- @creds = { username: 'jdoe', password: 'password' }
29
- inventory_client = InventoryClient.new(credentials: @creds)
30
- @tenant_id = inventory_client.get_tenant
31
- @feed_id = inventory_client.list_feeds[0]
32
- @random_uuid = SecureRandom.uuid
41
+ VCR.use_cassette('Operation/Helpers/get_tenant', decode_compressed_response: true) do
42
+ @creds = { username: 'jdoe', password: 'password' }
43
+ inventory_client = InventoryClient.create(credentials: @creds)
44
+ @tenant_id = inventory_client.get_tenant
45
+ VCR.use_cassette('Operation/Helpers/get_feed', decode_compressed_response: true) do
46
+ @feed_id = inventory_client.list_feeds[0]
47
+ end
48
+ @random_uuid = 'random'
49
+ end
33
50
  end
34
51
 
35
52
  before(:each) do |ex|
36
53
  unless ex.metadata[:skip_open]
37
- @client = OperationsClient.new(credentials: @creds)
54
+ @client = OperationsClient.new(credentials: @creds,
55
+ wait_time: WebSocketVCR.live? ? 1.5 : 0)
38
56
  @ws = @client.ws
39
57
  end
40
58
  end
41
59
 
60
+ around(:each) do |ex|
61
+ if ex.metadata[:websocket]
62
+ WebSocketVCR.configure do |c|
63
+ c.hook_uris = [HOST]
64
+ end
65
+ WebSocketVCR.record(ex, self) do
66
+ ex.run
67
+ end
68
+ else
69
+ ex.run
70
+ end
71
+ end
72
+
42
73
  after(:each) do |ex|
43
74
  unless ex.metadata[:skip_close]
44
75
  @client.close_connection!
@@ -47,13 +78,6 @@ module Hawkular::Operations::RSpec
47
78
  end
48
79
  end
49
80
 
50
- after(:all) do
51
- if ENV['VCR_OFF'] != '1'
52
- VCR.turn_on!
53
- WebMock.disable_net_connect!
54
- end
55
- end
56
-
57
81
  it 'Add JDBC driver should add the driver' do
58
82
  wf_server_resource_id = 'Local~~'
59
83
  driver_name = 'CreatedByRubyDriver' + @random_uuid
@@ -137,7 +161,7 @@ module Hawkular::Operations::RSpec
137
161
  expect(actual_data[:error]).to start_with('Could not perform [Redeploy] on')
138
162
  end
139
163
 
140
- it 'Disable/Undeploy should be performed and eventually respond with success' do
164
+ it 'Undeploy should be performed and eventually respond with success' do
141
165
  wf_server_resource_id = 'Local~~'
142
166
  alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
143
167
  path = CanonicalPath.new(tenant_id: @tenant_id,
@@ -267,7 +291,7 @@ module Hawkular::Operations::RSpec
267
291
  expect(actual_data['message']).to start_with('Performed [Redeploy] on')
268
292
  end
269
293
 
270
- it 'add deployment should be doable' do
294
+ it 'Add deployment should be doable' do
271
295
  wf_server_resource_id = 'Local~~'
272
296
  app_name = 'sample.war'
273
297
  war_file = IO.binread("#{File.dirname(__FILE__)}/../resources/#{app_name}")
data/spec/spec_helper.rb CHANGED
@@ -2,12 +2,14 @@
2
2
  require 'coveralls'
3
3
  Coveralls.wear!
4
4
  # Now the application requires.
5
- require 'hawkular_all'
5
+ require 'hawkular/hawkular_client'
6
+ require 'hawkular/hawkular_client_utils'
6
7
  require 'rspec/core'
7
8
  require 'rspec/mocks'
8
9
  require 'socket'
9
10
  require 'uri'
10
11
  require 'yaml'
12
+ require 'json'
11
13
 
12
14
  module Hawkular::Metrics::RSpec
13
15
  def setup_client(options = {})
@@ -31,14 +33,66 @@ module Hawkular::Metrics::RSpec
31
33
  File.read(File.expand_path('endpoint.yml', File.dirname(__FILE__)))
32
34
  )
33
35
  end
36
+
37
+ # more or less generic method common for all metric types (counters, gauges, availabilities)
38
+ def create_metric_using_hash(endpoint, id, tenant_id)
39
+ endpoint.create(id: id, dataRetention: 123, tags: { some: 'value' }, tenantId: tenant_id)
40
+ metric = endpoint.get(id)
41
+
42
+ expect(metric).to be_a(Hawkular::Metrics::MetricDefinition)
43
+ expect(metric.id).to eql(id)
44
+ expect(metric.data_retention).to eql(123)
45
+ expect(metric.tenant_id).to eql(tenant_id)
46
+ end
47
+
48
+ def create_metric_using_md(endpoint, id)
49
+ metric = Hawkular::Metrics::MetricDefinition.new
50
+ metric.id = id
51
+ metric.data_retention = 90
52
+ metric.tags = { tag: 'value' }
53
+ endpoint.create(metric)
54
+
55
+ created = endpoint.get(metric.id)
56
+ expect(created).to be_a(Hawkular::Metrics::MetricDefinition)
57
+ expect(created.id).to eql(metric.id)
58
+ expect(created.data_retention).to eql(metric.data_retention)
59
+ end
60
+
61
+ def push_data_to_non_existing_metric(endpoint, data, id)
62
+ # push one value without timestamp (which means now)
63
+ endpoint.push_data(id, data)
64
+
65
+ data = endpoint.get_data(id)
66
+ expect(data.size).to be 1
67
+
68
+ # verify metric was auto-created
69
+ counter = endpoint.get(id)
70
+ expect(counter).to be_a(Hawkular::Metrics::MetricDefinition)
71
+ expect(counter.id).to eql(id)
72
+ end
73
+
74
+ def update_metric_by_tags(endpoint, id)
75
+ endpoint.create(id: id, tags: { myTag: id })
76
+ metric = endpoint.get(id)
77
+ metric.tags = { newTag: 'newValue' }
78
+ endpoint.update_tags(metric)
79
+
80
+ metric = endpoint.get(id)
81
+ expect(metric.tags).to include('newTag' => 'newValue', 'myTag' => id)
82
+
83
+ # query API for a metric with given tag
84
+ data = endpoint.query(myTag: id)
85
+ expect(data.size).to be 1
86
+ end
34
87
  end
35
88
 
36
89
  module Hawkular::Operations::RSpec
37
- SLEEP_SECONDS = 0.05
38
- MAX_ATTEMPTS = 50
90
+ SLEEP_SECONDS = 0.04
91
+ MAX_ATTEMPTS = 60
39
92
 
40
93
  def wait_for(object)
41
- sleep_interval = SLEEP_SECONDS * (ENV['VCR_OFF'] == '1' ? 1 : 10)
94
+ fast = WebSocketVCR.cassette && !WebSocketVCR.cassette.recording?
95
+ sleep_interval = SLEEP_SECONDS * (fast ? 1 : 10)
42
96
  attempt = 0
43
97
  sleep sleep_interval while object[:data].nil? && (attempt += 1) < MAX_ATTEMPTS
44
98
  if attempt == MAX_ATTEMPTS
@@ -50,14 +104,60 @@ module Hawkular::Operations::RSpec
50
104
  end
51
105
  end
52
106
 
107
+ # globally used helper functions
108
+ module Helpers
109
+ def make_template(base_directory, cassette_name, bindings)
110
+ cassette = cassette_name.gsub(/\s+/, '_')
111
+ input_file_path = "#{VCR.configuration.cassette_library_dir}/#{base_directory}/tmp/#{cassette}.yml"
112
+ return unless File.exist? input_file_path
113
+ output_file_path = "#{VCR.configuration.cassette_library_dir}/#{base_directory}/Templates/#{cassette}.yml"
114
+
115
+ dirname = File.dirname(output_file_path)
116
+ # make sure the directory structure is there
117
+ FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
118
+
119
+ text = File.read(input_file_path)
120
+ bindings.select { |_, v| v.size >= 3 }.each do |k, v|
121
+ text.gsub! v, "<%= #{k} %>"
122
+ end
123
+
124
+ File.open(output_file_path, 'w') { |file| file.write text }
125
+ File.delete(input_file_path)
126
+ end
127
+
128
+ def record(prefix, bindings, explicit_cassette_name, example: nil)
129
+ run = lambda do
130
+ example.run unless example.nil?
131
+ yield if block_given?
132
+ end
133
+
134
+ if (!example.nil? && example.metadata[:update_template]) || ENV['VCR_UPDATE'] == '1'
135
+ VCR.use_cassette(prefix + '/tmp/' + explicit_cassette_name,
136
+ decode_compressed_response: true,
137
+ record: :all) do
138
+ run.call
139
+ end
140
+ make_template prefix, explicit_cassette_name, bindings
141
+ else
142
+ VCR.use_cassette(prefix + '/Templates/' + explicit_cassette_name,
143
+ decode_compressed_response: true,
144
+ erb: bindings,
145
+ record: :none) do
146
+ run.call
147
+ end
148
+ end
149
+ end
150
+ end
151
+
53
152
  RSpec.configure do |config|
153
+ config.include Helpers
54
154
  config.include Hawkular::Metrics::RSpec
55
155
  config.include Hawkular::Operations::RSpec
156
+ config.include HawkularUtilsMixin
157
+ config.include Hawkular::Inventory
56
158
 
57
- # skip the tests that require websocket communication (cannot be recorded by VCR)
58
- if ENV['WEBSOCKET_ON'].nil? || ENV['WEBSOCKET_ON'] != '1'
59
- config.filter_run_excluding :websocket
60
- end
159
+ # skip the tests that have the :skip metadata on them
160
+ config.filter_run_excluding :skip
61
161
 
62
162
  # Sometimes one wants to check if the real api has
63
163
  # changed, so turn off VCR and use live connections
@@ -65,6 +165,7 @@ RSpec.configure do |config|
65
165
  if ENV['VCR_OFF'] == '1'
66
166
  VCR.eject_cassette
67
167
  VCR.turn_off!(ignore_cassettes: true)
168
+ WebSocketVCR.turn_off!
68
169
  WebMock.allow_net_connect!
69
170
  puts 'VCR is turned off!'
70
171
  end
@@ -75,4 +75,13 @@ describe 'Base Spec' do
75
75
 
76
76
  expect(ret).to eq('a1%252%203%7c45%2f')
77
77
  end
78
+
79
+ it 'should pass http_proxy_uri to rest_client' do
80
+ proxy_uri = 'http://myproxy.com'
81
+ c = Hawkular::BaseClient.new('not-needed-for-this-test', {},
82
+ http_proxy_uri: proxy_uri)
83
+ rc = c.rest_client('myurl')
84
+
85
+ expect(rc.options[:proxy]).to eq(proxy_uri)
86
+ end
78
87
  end