hawkular-client 0.2.0 → 0.2.1

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +2 -1
  4. data/.rubocop.yml +19 -6
  5. data/CHANGES.rdoc +13 -3
  6. data/README.rdoc +9 -3
  7. data/hawkularclient.gemspec +8 -4
  8. data/lib/alerts/alerts_api.rb +202 -32
  9. data/lib/hawkular.rb +35 -67
  10. data/lib/hawkular_all.rb +2 -0
  11. data/lib/inventory/inventory_api.rb +459 -130
  12. data/lib/metrics/metric_api.rb +14 -9
  13. data/lib/operations/operations_api.rb +247 -0
  14. data/lib/tokens/tokens_api.rb +33 -0
  15. data/lib/version.rb +1 -1
  16. data/spec/integration/alerts_spec.rb +272 -20
  17. data/spec/integration/hello-world-definitions.json +46 -0
  18. data/spec/integration/inventory_spec.rb +253 -89
  19. data/spec/integration/metric_spec.rb +36 -0
  20. data/spec/integration/operations_spec.rb +420 -0
  21. data/spec/integration/tokens_spec.rb +45 -0
  22. data/spec/resources/driver.jar +0 -0
  23. data/spec/resources/sample.war +0 -0
  24. data/spec/spec_helper.rb +30 -6
  25. data/spec/unit/base_spec.rb +22 -1
  26. data/spec/unit/canonical_path_spec.rb +92 -0
  27. data/spec/vcr/vcr_setup.rb +3 -4
  28. data/spec/vcr_cassettes/Alert/EndToEnd/Should_create_and_fire_a_trigger.yml +1187 -0
  29. data/spec/vcr_cassettes/Alert/Events/Should_list_events.yml +101 -0
  30. data/spec/vcr_cassettes/Alert/Events/Should_list_events_using_criteria.yml +79 -0
  31. data/spec/vcr_cassettes/Alert/Events/Should_not_list_events_using_criteria.yml +49 -0
  32. data/spec/vcr_cassettes/Alert/Triggers/Should_bulk_load_triggers.yml +225 -0
  33. data/spec/vcr_cassettes/Alert/Triggers/Should_create_a_basic_trigger_with_action.yml +355 -0
  34. data/spec/vcr_cassettes/Alert/Triggers/Should_create_an_action.yml +134 -0
  35. data/spec/vcr_cassettes/Alert/Triggers/Should_create_an_action_for_webhooks.yml +220 -0
  36. data/spec/vcr_cassettes/Alert/Triggers/Should_get_the_action_definitions.yml +218 -0
  37. data/spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_plugin.yml +46 -0
  38. data/spec/vcr_cassettes/Alert/Triggers/Should_not_create_an_action_for_unknown_properties.yml +134 -0
  39. data/spec/vcr_cassettes/Counter_metrics/Should_get_metrics_with_limit_and_order.yml +270 -0
  40. data/spec/vcr_cassettes/Inventory/Client_should_listen_on_various_inventory_events.json +47 -0
  41. data/spec/vcr_cassettes/Inventory/Client_should_listen_on_various_inventory_events.yml +191 -0
  42. data/spec/vcr_cassettes/Inventory/Helpers/generate_some_events_for_websocket.yml +507 -0
  43. data/spec/vcr_cassettes/Inventory/Should_List_datasources_with_no_props.yml +74 -69
  44. data/spec/vcr_cassettes/Inventory/{Should_list_types_without_feed.yml → Should_create_a_feed.yml} +29 -32
  45. data/spec/vcr_cassettes/Inventory/Should_create_a_feed_again.yml +211 -0
  46. data/spec/vcr_cassettes/Inventory/Should_create_a_resource_.yml +355 -0
  47. data/spec/vcr_cassettes/Inventory/Should_create_a_resource_with_metric.yml +786 -0
  48. data/spec/vcr_cassettes/Inventory/Should_create_a_resourcetype.yml +205 -0
  49. data/spec/vcr_cassettes/Inventory/Should_create_and_delete_feed.yml +201 -0
  50. data/spec/vcr_cassettes/Inventory/Should_create_and_get_a_resource.yml +419 -0
  51. data/spec/vcr_cassettes/Inventory/Should_list_URLs.yml +39 -27
  52. data/spec/vcr_cassettes/Inventory/Should_list_WildFlys.yml +37 -29
  53. data/spec/vcr_cassettes/Inventory/Should_list_WildFlys_with_props.yml +53 -45
  54. data/spec/vcr_cassettes/Inventory/Should_list_all_the_resource_types.yml +177 -0
  55. data/spec/vcr_cassettes/Inventory/Should_list_children_of_WildFly.yml +230 -56
  56. data/spec/vcr_cassettes/Inventory/Should_list_feeds.yml +27 -24
  57. data/spec/vcr_cassettes/Inventory/Should_list_heap_metrics_for_WildFlys.yml +586 -119
  58. data/spec/vcr_cassettes/Inventory/Should_list_metrics_for_WildFlys.yml +220 -59
  59. data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_metric_type.yml +613 -0
  60. data/spec/vcr_cassettes/Inventory/Should_list_metrics_of_given_resource_type.yml +333 -0
  61. data/spec/vcr_cassettes/Inventory/Should_list_recursive_children_of_WildFly.yml +2064 -0
  62. data/spec/vcr_cassettes/Inventory/Should_list_relationships_of_WildFly.yml +460 -0
  63. data/spec/vcr_cassettes/Inventory/Should_list_types_with_bad_feed.yml +26 -25
  64. data/spec/vcr_cassettes/Inventory/Should_list_types_with_feed.yml +102 -36
  65. data/spec/vcr_cassettes/Inventory/Should_not_find_an_unknown_resource.yml +54 -0
  66. data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Explicit_Credentials.yml +50 -0
  67. data/spec/vcr_cassettes/Inventory/Tenants/Should_Get_Tenant_For_Implicit_Credentials.yml +50 -0
  68. data/spec/vcr_cassettes/Operation/Helpers/get_tenant.yml +50 -0
  69. data/spec/vcr_cassettes/Operation/Operation/Add_JDBC_driver_should_add_the_driver.json +26 -0
  70. data/spec/vcr_cassettes/Operation/Operation/Add_datasource_should_be_doable.json +26 -0
  71. data/spec/vcr_cassettes/Operation/Operation/Add_deployment_should_be_doable.json +26 -0
  72. data/spec/vcr_cassettes/Operation/Operation/Redeploy_can_be_run_multiple_times_in_parallel.json +40 -0
  73. data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
  74. data/spec/vcr_cassettes/Operation/Operation/Redeploy_should_not_be_performed_if_resource_path_is_wrong.json +26 -0
  75. data/spec/vcr_cassettes/Operation/Operation/Remove_JDBC_driver_should_be_performed_and_eventually_respond_with_success.json +26 -0
  76. data/spec/vcr_cassettes/Operation/Operation/Remove_datasource_should_be_performed_and_eventually_respond_with_success.json +26 -0
  77. data/spec/vcr_cassettes/Operation/Operation/Remove_deployment_should_be_performed_and_eventually_respond_with_success.json +26 -0
  78. data/spec/vcr_cassettes/Operation/Operation/Undeploy_should_be_performed_and_eventually_respond_with_success.json +26 -0
  79. data/spec/vcr_cassettes/Operation/Operation/should_not_be_possible_to_perform_on_closed_client.json +12 -0
  80. data/spec/vcr_cassettes/Operation/Websocket_connection/should_be_established.json +9 -0
  81. data/spec/vcr_cassettes/Tokens/Should_be_able_to_create_a_new_token_for_an_actual_user.yml +57 -0
  82. data/spec/vcr_cassettes/Tokens/Should_be_able_to_list_the_available_tokens.yml +49 -0
  83. data/spec/vcr_cassettes/Tokens/Should_get_a_401_when_attempting_to_create_a_token_with_a_wrong_password.yml +56 -0
  84. data/spec/vcr_cassettes/Tokens/Should_get_a_401_when_attempting_to_create_a_token_without_a_password.yml +55 -0
  85. metadata +175 -11
  86. data/lib/metrics/version.rb +0 -7
@@ -198,6 +198,42 @@ describe 'Counter metrics' do
198
198
  end
199
199
  end
200
200
 
201
+ it 'Should get metrics with limit and order' do
202
+ @client = setup_client(username: 'jdoe', password: 'password')
203
+ id = '33c6a285-495a-4442-a818-974b03408a6f'
204
+ now = 1_458_666_669_263
205
+
206
+ VCR.use_cassette('Counter_metrics/Should get metrics with limit and order',
207
+ erb: { id: id, ends: now - t4h, starts: now - (2 * t4h),
208
+ minus20: now - 20, minus30: now - 30, minus10: now - 10,
209
+ now: now }, record: :none
210
+ ) do
211
+ # create counter
212
+ @client.counters.create(id: id)
213
+
214
+ # push 3 values with timestamps
215
+ @client.counters.push_data(id, [{ value: 1, timestamp: now - 30 },
216
+ { value: 2, timestamp: now - 20 },
217
+ { value: 3, timestamp: now - 10 }])
218
+
219
+ data = @client.counters.get_data(id)
220
+ expect(data.size).to be 3
221
+
222
+ # push one value without timestamp (which means now)
223
+ @client.counters.push_data(id, value: 4)
224
+ data = @client.counters.get_data(id)
225
+ expect(data.size).to be 4
226
+
227
+ # retrieve values with limit
228
+ data = @client.counters.get_data(id, limit: 1)
229
+ expect(data.size).to be 1
230
+
231
+ # retrieve values from past
232
+ data = @client.counters.get_data(id, starts: now - (2 * t4h), ends: now - t4h)
233
+ expect(data.empty?).to be true
234
+ end
235
+ end
236
+
201
237
  it 'Should push metric data to non-existing counter' do
202
238
  id = SecureRandom.uuid
203
239
 
@@ -0,0 +1,420 @@
1
+ require "#{File.dirname(__FILE__)}/../vcr/vcr_setup"
2
+ require "#{File.dirname(__FILE__)}/../spec_helper"
3
+ require 'securerandom'
4
+
5
+ include Hawkular::Inventory
6
+ include Hawkular::Operations
7
+
8
+ # examples for operations, it uses the websocket communication
9
+ module Hawkular::Operations::RSpec
10
+ HOST = 'localhost:8080'
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
+ VCR::WebSocket.configure do |c|
18
+ c.hook_uris = [HOST]
19
+ end
20
+
21
+ VCR::WebSocket.record(example, self) do
22
+ client = OperationsClient.new(host: HOST,
23
+ wait_time: 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
32
+ end
33
+ end
34
+
35
+ describe 'Operation/Operation', :websocket, vcr: { decode_compressed_response: true } do
36
+ let(:example) do |e|
37
+ e
38
+ end
39
+
40
+ before(:all) do
41
+ # TODO: erb substitution
42
+ VCR.use_cassette('Operation/Helpers/get_tenant', decode_compressed_response: true) do
43
+ @creds = { username: 'jdoe', password: 'password' }
44
+ inventory_client = InventoryClient.create(credentials: @creds)
45
+ @tenant_id = inventory_client.get_tenant
46
+ # @feed_id = inventory_client.list_feeds[0]
47
+ @feed_id = '41df9f9c-72a6-457b-a0ee-ee1740846254'
48
+ # @random_uuid = SecureRandom.uuid comment this out once the erb support is there
49
+ @random_uuid = 'random'
50
+ end
51
+ end
52
+
53
+ before(:each) do |ex|
54
+ unless ex.metadata[:skip_open]
55
+ @client = OperationsClient.new(credentials: @creds,
56
+ wait_time: 0)
57
+ @ws = @client.ws
58
+ end
59
+ end
60
+
61
+ around(:each) do |ex|
62
+ if ex.metadata[:websocket]
63
+ VCR::WebSocket.configure do |c|
64
+ c.hook_uris = [HOST]
65
+ end
66
+ VCR::WebSocket.record(ex, self) do
67
+ ex.run
68
+ end
69
+ else
70
+ ex.run
71
+ end
72
+ end
73
+
74
+ after(:each) do |ex|
75
+ unless ex.metadata[:skip_close]
76
+ @client.close_connection!
77
+ @client = nil
78
+ @ws = nil
79
+ end
80
+ end
81
+
82
+ it 'Add JDBC driver should add the driver' do
83
+ wf_server_resource_id = 'Local~~'
84
+ driver_name = 'CreatedByRubyDriver' + @random_uuid
85
+ driver_bits = IO.binread("#{File.dirname(__FILE__)}/../resources/driver.jar")
86
+ wf_path = CanonicalPath.new(tenant_id: @tenant_id,
87
+ feed_id: @feed_id,
88
+ resource_ids: [wf_server_resource_id]).to_s
89
+
90
+ actual_data = {}
91
+ @client.add_jdbc_driver(resource_path: wf_path,
92
+ driver_jar_name: 'driver.jar',
93
+ driver_name: driver_name,
94
+ module_name: 'foo.bar.' + @random_uuid, # jboss module
95
+ driver_class: 'com.mysql.jdbc.Driver',
96
+ binary_content: driver_bits) do |on|
97
+ on.success do |data|
98
+ actual_data[:data] = data
99
+ end
100
+ on.failure do |error|
101
+ actual_data[:data] = {}
102
+ puts 'error callback was called, reason: ' + error.to_s
103
+ end
104
+ end
105
+ actual_data = wait_for actual_data
106
+ expect(actual_data['status']).to eq('OK')
107
+ expect(actual_data['message']).to start_with('Added JDBC Driver')
108
+ expect(actual_data['driverName']).to eq(driver_name)
109
+ end
110
+
111
+ it 'Redeploy should be performed and eventually respond with success' do
112
+ wf_server_resource_id = 'Local~~'
113
+ alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
114
+ path = CanonicalPath.new(tenant_id: @tenant_id,
115
+ feed_id: @feed_id,
116
+ resource_ids: [wf_server_resource_id, alerts_war_resource_id])
117
+
118
+ redeploy = {
119
+ operationName: 'Redeploy',
120
+ resourcePath: path.to_s
121
+ }
122
+
123
+ actual_data = {}
124
+ @client.invoke_generic_operation(redeploy) do |on|
125
+ on.success do |data|
126
+ actual_data[:data] = data
127
+ end
128
+ on.failure do |error|
129
+ actual_data[:data] = {}
130
+ puts 'error callback was called, reason: ' + error.to_s
131
+ end
132
+ end
133
+
134
+ # expectations don't work from callbacks so waiting for the results via blocking helper `wait_for`
135
+ actual_data = wait_for actual_data
136
+ expect(actual_data['status']).to eq('OK')
137
+ expect(actual_data['resourcePath']).to eq(path.to_s)
138
+ expect(actual_data['message']).to start_with('Performed [Redeploy] on')
139
+ end
140
+
141
+ it 'Redeploy should not be performed if resource path is wrong' do
142
+ wf_server_resource_id = 'Local~~'
143
+ wrong_war_resource_id = 'Local~%2Fdeployment%3Dnon-existent.war'
144
+ path = CanonicalPath.new(tenant_id: @tenant_id,
145
+ feed_id: @feed_id,
146
+ resource_ids: [wf_server_resource_id, wrong_war_resource_id])
147
+
148
+ redeploy = {
149
+ operationName: 'Redeploy',
150
+ resourcePath: path.to_s
151
+ }
152
+ actual_data = {}
153
+ @client.invoke_generic_operation(redeploy) do |on|
154
+ on.success do |_|
155
+ actual_data[:data] = { error: 'the operation should have failed' }
156
+ end
157
+ on.failure do |error|
158
+ actual_data[:data] = { error: error }
159
+ end
160
+ end
161
+ actual_data = wait_for actual_data
162
+ expect(actual_data[:error]).to start_with('Could not perform [Redeploy] on')
163
+ end
164
+
165
+ it 'Undeploy should be performed and eventually respond with success' do
166
+ wf_server_resource_id = 'Local~~'
167
+ alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
168
+ path = CanonicalPath.new(tenant_id: @tenant_id,
169
+ feed_id: @feed_id,
170
+ resource_ids: [wf_server_resource_id, alerts_war_resource_id])
171
+
172
+ undeploy = {
173
+ operationName: 'Undeploy',
174
+ resourcePath: path.to_s
175
+ }
176
+ actual_data = {}
177
+ @client.invoke_generic_operation(undeploy) do |on|
178
+ on.success do |data|
179
+ actual_data[:data] = data
180
+ end
181
+ on.failure do |error|
182
+ actual_data[:data] = {}
183
+ puts 'error callback was called, reason: ' + error.to_s
184
+ end
185
+ end
186
+ actual_data = wait_for actual_data
187
+ expect(actual_data['status']).to eq('OK')
188
+ expect(actual_data['message']).to start_with('Performed [Undeploy] on')
189
+ end
190
+
191
+ it 'Add datasource should be doable' do
192
+ wf_server_resource_id = 'Local~~'
193
+ wf_path = CanonicalPath.new(tenant_id: @tenant_id,
194
+ feed_id: @feed_id,
195
+ resource_ids: [wf_server_resource_id]).to_s
196
+ payload = {
197
+ # compulsory fields
198
+ resourcePath: wf_path,
199
+ xaDatasource: false,
200
+ datasourceName: 'CreatedByRubyDS' + @random_uuid,
201
+ jndiName: 'java:jboss/datasources/CreatedByRubyDS' + @random_uuid,
202
+ driverName: 'h2',
203
+ # this is probably a bug (driver class should be already defined in driver)
204
+ driverClass: 'org.h2.Driver',
205
+ connectionUrl: 'dbc:h2:mem:ruby;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE',
206
+
207
+ # optional
208
+ datasourceProperties: {
209
+ someKey: 'someValue'
210
+ },
211
+ userName: 'sa',
212
+ password: 'sa',
213
+ securityDomain: 'other'
214
+ # xaDataSourceClass: 'clazz' for xa DS
215
+ }
216
+
217
+ actual_data = {}
218
+ @client.add_datasource(payload) do |on|
219
+ on.success do |data|
220
+ actual_data[:data] = data
221
+ end
222
+ on.failure do |error|
223
+ actual_data[:data] = { 'status' => 'ERROR' }
224
+ puts 'error callback was called, reason: ' + error.to_s
225
+ end
226
+ end
227
+ actual_data = wait_for actual_data
228
+ expect(actual_data['status']).to eq('OK')
229
+ expect(actual_data['message']).to start_with('Added Datasource')
230
+ expect(actual_data['xaDatasource']).to be_falsey
231
+ expect(actual_data['datasourceName']).to eq(payload[:datasourceName])
232
+ expect(actual_data['resourcePath']).to eq(payload[:resourcePath])
233
+ end
234
+
235
+ it 'should not be possible to perform on closed client', skip_open: true, skip_close: true do
236
+ @client.close_connection! unless @client.nil?
237
+
238
+ # open the connection
239
+ operations_client = OperationsClient.new(credentials: @creds)
240
+
241
+ redeploy = {
242
+ operationName: 'Redeploy',
243
+ resourcePath: '/t;t1/f;whatever/r;something'
244
+ }
245
+
246
+ # close the connection
247
+ operations_client.close_connection!
248
+ expect do
249
+ operations_client.invoke_generic_operation(redeploy)
250
+ end.to raise_error(RuntimeError, /Handshake with server has not been done./)
251
+ end
252
+
253
+ it 'Redeploy can be run multiple times in parallel' do
254
+ wf_server_resource_id = 'Local~~'
255
+ alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
256
+ console_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-console.war'
257
+ path1 = CanonicalPath.new(tenant_id: @tenant_id,
258
+ feed_id: @feed_id,
259
+ resource_ids: [wf_server_resource_id, alerts_war_resource_id])
260
+ path2 = CanonicalPath.new(tenant_id: @tenant_id,
261
+ feed_id: @feed_id,
262
+ resource_ids: [wf_server_resource_id, console_war_resource_id])
263
+
264
+ redeploy1 = {
265
+ operationName: 'Redeploy',
266
+ resourcePath: path1.to_s
267
+ }
268
+
269
+ redeploy2 = {
270
+ operationName: 'Redeploy',
271
+ resourcePath: path2.to_s
272
+ }
273
+
274
+ # run the first operation w/o registering the callback
275
+ @client.invoke_generic_operation(redeploy1)
276
+
277
+ actual_data = {}
278
+ # run the 2nd operation with 2 callback blocks (the happy path and the less happy path)
279
+ @client.invoke_generic_operation(redeploy2) do |on|
280
+ on.success do |data|
281
+ actual_data[:data] = data
282
+ end
283
+ on.failure do |error|
284
+ actual_data[:data] = {}
285
+ puts 'error callback was called, reason: ' + error.to_s
286
+ end
287
+ end
288
+
289
+ actual_data = wait_for actual_data
290
+ expect(actual_data['status']).to eq('OK')
291
+ expect(actual_data['resourcePath']).to eq(path2.to_s)
292
+ expect(actual_data['message']).to start_with('Performed [Redeploy] on')
293
+ end
294
+
295
+ it 'Add deployment should be doable' do
296
+ wf_server_resource_id = 'Local~~'
297
+ app_name = 'sample.war'
298
+ war_file = IO.binread("#{File.dirname(__FILE__)}/../resources/#{app_name}")
299
+ wf_path = CanonicalPath.new(tenant_id: @tenant_id,
300
+ feed_id: @feed_id,
301
+ resource_ids: [wf_server_resource_id]).to_s
302
+
303
+ actual_data = {}
304
+ @client.add_deployment(resource_path: wf_path,
305
+ destination_file_name: app_name,
306
+ binary_content: war_file) do |on|
307
+ on.success do |data|
308
+ actual_data[:data] = data
309
+ end
310
+ on.failure do |error|
311
+ actual_data[:data] = {}
312
+ puts 'error callback was called, reason: ' + error.to_s
313
+ end
314
+ end
315
+ actual_data = wait_for actual_data
316
+ expect(actual_data['status']).to eq('OK')
317
+ expect(actual_data['message']).to start_with('Performed [Deploy] on')
318
+ expect(actual_data['destinationFileName']).to eq(app_name)
319
+ expect(actual_data['resourcePath']).to eq(wf_path)
320
+ end
321
+
322
+ it 'Remove deployment should be performed and eventually respond with success' do
323
+ wf_server_resource_id = 'Local~~'
324
+ sample_app_resource_id = 'Local~%2Fdeployment=sample.war'
325
+ path = CanonicalPath.new(tenant_id: @tenant_id,
326
+ feed_id: @feed_id,
327
+ resource_ids: [wf_server_resource_id, sample_app_resource_id])
328
+ remove_deployment = {
329
+ operationName: 'Remove',
330
+ resourcePath: path.to_s
331
+ }
332
+ actual_data = {}
333
+ @client.invoke_generic_operation(remove_deployment) do |on|
334
+ on.success do |data|
335
+ actual_data[:data] = data
336
+ end
337
+ on.failure do |error|
338
+ actual_data[:data] = { 'status' => 'ERROR' }
339
+ puts 'error callback was called, reason: ' + error.to_s
340
+ end
341
+ end
342
+ actual_data = wait_for actual_data
343
+ expect(actual_data['status']).to eq('OK')
344
+ expect(actual_data['message']).to start_with('Performed [Remove] on')
345
+ end
346
+
347
+ it 'Remove datasource should be performed and eventually respond with success' do
348
+ wf_server_resource_id = 'Local~~'
349
+ datasource_resource_id = 'Local~%2Fsubsystem%3Ddatasources%2Fdata-source%3DCreatedByRubyDS' + @random_uuid
350
+ path = CanonicalPath.new(tenant_id: @tenant_id,
351
+ feed_id: @feed_id,
352
+ resource_ids: [wf_server_resource_id, datasource_resource_id])
353
+
354
+ operation = {
355
+ resourcePath: path.to_s
356
+ }
357
+
358
+ actual_data = {}
359
+ @client.invoke_specific_operation(operation, 'RemoveDatasource') do |on|
360
+ on.success do |data|
361
+ actual_data[:data] = data
362
+ end
363
+ on.failure do |error|
364
+ actual_data[:data] = {}
365
+ puts 'error callback was called, reason: ' + error.to_s
366
+ end
367
+ end
368
+ actual_data = wait_for actual_data
369
+ expect(actual_data['status']).to eq('OK')
370
+ expect(actual_data['message']).to start_with('Performed [Remove] on')
371
+ expect(actual_data['serverRefreshIndicator']).to eq('RELOAD-REQUIRED')
372
+ end
373
+
374
+ it 'Remove JDBC driver should be performed and eventually respond with success' do
375
+ wf_server_resource_id = 'Local~~'
376
+ driver_resource_id = 'Local~%2Fsubsystem%3Ddatasources%2Fjdbc-driver%3DCreatedByRubyDriver' + @random_uuid
377
+ path = CanonicalPath.new(tenant_id: @tenant_id,
378
+ feed_id: @feed_id,
379
+ resource_ids: [wf_server_resource_id, driver_resource_id]).to_s
380
+
381
+ actual_data = {}
382
+ @client.invoke_specific_operation({ resourcePath: path }, 'RemoveJdbcDriver') do |on|
383
+ on.success do |data|
384
+ actual_data[:data] = data
385
+ end
386
+ on.failure do |error|
387
+ actual_data[:data] = {}
388
+ puts 'error callback was called, reason: ' + error.to_s
389
+ end
390
+ end
391
+ actual_data = wait_for actual_data
392
+ expect(actual_data['status']).to eq('OK')
393
+ expect(actual_data['resourcePath']).to eq(path)
394
+ expect(actual_data['message']).to start_with('Performed [Remove] on a [JDBC Driver]')
395
+ end
396
+
397
+ xit 'Export JDR should retrieve the zip file with the report' do
398
+ wf_server_resource_id = 'Local~~'
399
+ path = CanonicalPath.new(tenant_id: @tenant_id,
400
+ feed_id: @feed_id,
401
+ resource_ids: [wf_server_resource_id]).to_s
402
+
403
+ actual_data = {}
404
+ @client.export_jdr(path) do |on|
405
+ on.success do |data|
406
+ actual_data[:data] = data
407
+ end
408
+ on.failure do |error|
409
+ actual_data[:data] = {}
410
+ puts 'error callback was called, reason: ' + error.to_s
411
+ end
412
+ end
413
+ actual_data = wait_for actual_data
414
+ expect(actual_data['status']).to eq('OK')
415
+ expect(actual_data['resourcePath']).to eq(path)
416
+ expect(actual_data['message']).to start_with('Performed [Export JDR] on')
417
+ expect(actual_data['fileName']).to start_with('jdr_')
418
+ end
419
+ end
420
+ end