hawkular-client 2.8.0 → 2.9.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -4
  3. data/.travis/start_hawkular_services.sh +21 -0
  4. data/.travis/wait_for_services.rb +26 -10
  5. data/CHANGES.rdoc +26 -0
  6. data/README.rdoc +12 -1
  7. data/docker-compose.yml +4 -2
  8. data/hawkularclient.gemspec +2 -0
  9. data/lib/hawkular/alerts/alerts_api.rb +22 -1
  10. data/lib/hawkular/base_client.rb +29 -24
  11. data/lib/hawkular/client_utils.rb +42 -0
  12. data/lib/hawkular/env_config.rb +15 -0
  13. data/lib/hawkular/hawkular_client.rb +33 -25
  14. data/lib/hawkular/inventory/entities.rb +9 -0
  15. data/lib/hawkular/inventory/inventory_api.rb +13 -3
  16. data/lib/hawkular/logger.rb +14 -0
  17. data/lib/hawkular/metrics/metric_api.rb +24 -8
  18. data/lib/hawkular/operations/operations_api.rb +57 -25
  19. data/lib/hawkular/tokens/tokens_api.rb +4 -1
  20. data/lib/hawkular/version.rb +1 -1
  21. data/lib/hawkularclient.rb +8 -0
  22. data/spec/integration/alerts_spec.rb +50 -27
  23. data/spec/integration/env_config_spec.rb +39 -0
  24. data/spec/integration/hawkular_client_spec.rb +10 -7
  25. data/spec/integration/inventory_spec.rb +36 -3
  26. data/spec/integration/logger_spec.rb +36 -0
  27. data/spec/integration/metric_spec.rb +62 -3
  28. data/spec/integration/operations_spec.rb +112 -63
  29. data/spec/integration/tokens_spec.rb +6 -6
  30. data/spec/spec_helper.rb +20 -6
  31. data/spec/unit/base_spec.rb +25 -3
  32. data/spec/unit/canonical_path_spec.rb +2 -1
  33. data/spec/unit/client_spec.rb +2 -1
  34. data/spec/unit/deprecations_spec.rb +19 -0
  35. data/spec/vcr_cassettes/Alert/Alerts/Templates/Should_add_tags_to_existing_alert.yml +210 -0
  36. data/spec/vcr_cassettes/Alert/Alerts/Templates/Should_remove_tags_from_existing_alert.yml +257 -0
  37. data/spec/vcr_cassettes/Alert/Triggers/Templates/Should_get_the_action_definitions.yml +59 -22
  38. data/spec/vcr_cassettes/Inventory/NonSecure/inventory_0_17/Templates/Should_have_a_consistent_behaviour_when_creating_an_already_existing_resource.yml +714 -0
  39. data/spec/vcr_cassettes/Inventory/NonSecure/inventory_0_17/Templates/Should_return_data_from_get_entity.yml +230 -0
  40. data/spec/vcr_cassettes/Metrics/NonSecure/metrics_services/Templates/All_Tags_for_metrics/Should_fetch_all_metrics_with_some_tags.yml +1251 -0
  41. data/spec/vcr_cassettes/Metrics/NonSecure/metrics_services/Templates/Tags_Metrics/setup_client.yml +3 -3
  42. data/spec/vcr_cassettes/Operation/NonSecure/Helpers/Templates/agent_properties.yml +124 -0
  43. data/spec/vcr_cassettes/Operation/NonSecure/Helpers/Templates/get_feed.yml +7 -7
  44. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Add_JDBC_driver_should_add_the_driver.json +4 -4
  45. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Add_deployment_should_be_doable.json +4 -4
  46. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Disable_should_be_performed_and_eventually_respond_with_success.json +4 -4
  47. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Remove_JDBC_driver_should_be_performed_and_eventually_respond_with_success.json +3 -3
  48. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Restart_can_be_run_multiple_times_in_parallel.json +5 -5
  49. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Restart_should_be_performed_and_eventually_respond_with_success.json +4 -4
  50. data/spec/vcr_cassettes/Operation/NonSecure/Operation/Update_collection_intervals_should_be_performed_and_eventually_respond_with_success.json +23 -0
  51. metadata +57 -7
  52. data/lib/hawkular/hawkular_client_utils.rb +0 -41
@@ -0,0 +1,39 @@
1
+ require_relative '../spec_helper'
2
+
3
+ require 'hawkular/env_config'
4
+
5
+ describe Hawkular::EnvConfig do
6
+ subject(:config) { Hawkular::EnvConfig }
7
+ describe '.log_response?' do
8
+ it 'is true if defined' do
9
+ swap_env('HAWKULARCLIENT_LOG_RESPONSE', 'true') do
10
+ expect(config.log_response?).to be_truthy
11
+ end
12
+ end
13
+
14
+ it 'is false if null' do
15
+ swap_env('HAWKULARCLIENT_LOG_RESPONSE', nil) do
16
+ expect(config.log_response?).to be_falsey
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '.rest_timeout' do
22
+ it 'returns the value for the environment' do
23
+ swap_env('HAWKULARCLIENT_REST_TIMEOUT', '20') do
24
+ expect(config.rest_timeout).to eq '20'
25
+ end
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def swap_env(name, value)
32
+ old_value = ENV[name]
33
+ ENV[name] = value
34
+
35
+ yield
36
+ ensure
37
+ ENV[name] = old_value
38
+ end
39
+ end
@@ -1,5 +1,6 @@
1
- require "#{File.dirname(__FILE__)}/../vcr/vcr_setup"
2
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require_relative '../vcr/vcr_setup'
2
+ require_relative '../spec_helper'
3
+
3
4
  require 'securerandom'
4
5
 
5
6
  # examples that tests the main client which delegates all the calls to Hawkular component clients
@@ -16,6 +17,8 @@ module Hawkular::Client::RSpec
16
17
  mock_inventory_client '0.17.2.Final'
17
18
  mock_metrics_version
18
19
  @hawkular_client = Hawkular::Client.new(entrypoint: HOST, credentials: @creds, options: { tenant: 'hawkular' })
20
+ @hawkular_client.inventory
21
+ @hawkular_client.metrics
19
22
  end
20
23
  @state = {
21
24
  hostname: 'localhost.localdomain',
@@ -30,7 +33,7 @@ module Hawkular::Client::RSpec
30
33
  password: 'password'
31
34
  }
32
35
  expect do
33
- Hawkular::Client.new(entrypoint: HOST, credentials: @creds)
36
+ Hawkular::Client.new(entrypoint: HOST, credentials: @creds).inventory_list_feeds
34
37
  end.to raise_error(Hawkular::BaseClient::HawkularException, 'Unauthorized')
35
38
  end
36
39
  end
@@ -83,9 +86,9 @@ module Hawkular::Client::RSpec
83
86
  before(:all) do
84
87
  ::RSpec::Mocks.with_temporary_scope do
85
88
  mock_inventory_client '0.17.2.Final'
86
- @client = Hawkular::Inventory::InventoryClient.create(entrypoint: HOST,
87
- credentials: @creds,
88
- options: { tenant: 'hawkular' })
89
+ @client = Hawkular::Inventory::Client.create(entrypoint: HOST,
90
+ credentials: @creds,
91
+ options: { tenant: 'hawkular' })
89
92
  end
90
93
  end
91
94
 
@@ -249,7 +252,7 @@ module Hawkular::Client::RSpec
249
252
  }
250
253
 
251
254
  actual_data = {}
252
- client = Hawkular::Operations::OperationsClient.new(entrypoint: HOST, credentials: @creds)
255
+ client = Hawkular::Operations::Client.new(entrypoint: HOST, credentials: @creds)
253
256
  client.invoke_generic_operation(redeploy) do |on|
254
257
  on.success do |data|
255
258
  actual_data[:data] = data
@@ -1,5 +1,6 @@
1
- require "#{File.dirname(__FILE__)}/../vcr/vcr_setup"
2
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require_relative '../vcr/vcr_setup'
2
+ require_relative '../spec_helper'
3
+
3
4
  require 'securerandom'
4
5
 
5
6
  module Hawkular::Inventory::RSpec
@@ -71,7 +72,7 @@ module Hawkular::Inventory::RSpec
71
72
  VCR.eject_cassette
72
73
  record("Inventory/#{security_context}/Connection", @creds, cassette_name) do
73
74
  expect do
74
- Hawkular::Inventory::InventoryClient.create(entrypoint: entrypoint, credentials: @creds)
75
+ Hawkular::Inventory::Client.create(entrypoint: entrypoint, credentials: @creds)
75
76
  end.to raise_error(Hawkular::BaseClient::HawkularException, 'Unauthorized')
76
77
  end
77
78
  end
@@ -522,6 +523,34 @@ module Hawkular::Inventory::RSpec
522
523
  expect(r2.properties).not_to be_empty
523
524
  end
524
525
 
526
+ it 'Should have a consistent behaviour when creating an already existing resource' do
527
+ new_feed_id = "#{security_context}_feed_may_exist"
528
+ @client.create_feed new_feed_id
529
+ ret = @client.create_resource_type new_feed_id, 'rt-123', 'ResourceType'
530
+ type_path = ret.path
531
+
532
+ r1 = @client.create_resource type_path, 'r999', 'My Resource', 'version' => 1.0
533
+ r2 = @client.create_resource type_path, 'r999', 'My Resource', 'version' => 1.0
534
+
535
+ r3 = @client.create_resource_under_resource type_path, r1.path, 'r1000', 'My Resource', 'version' => 1.0
536
+ r4 = @client.create_resource_under_resource type_path, r1.path, 'r1000', 'My Resource', 'version' => 1.0
537
+
538
+ expect(r1).to eq(r2)
539
+ expect(r3).to eq(r4)
540
+ end
541
+
542
+ it 'Should return data from get_entity' do
543
+ new_feed_id = 'feed_may_exist'
544
+ @client.create_feed new_feed_id
545
+ ret = @client.create_resource_type new_feed_id, 'dummy-resource-type', 'ResourceType'
546
+ type_path = ret.path
547
+ entity = @client.get_entity(type_path)
548
+
549
+ expect(entity['path']).to eq(type_path)
550
+ expect(entity['name']).to eq('ResourceType')
551
+ expect(entity['id']).to eq('dummy-resource-type')
552
+ end
553
+
525
554
  it 'Should not find an unknown resource' do
526
555
  new_feed_id = 'feed_may_exist'
527
556
  path = Hawkular::Inventory::CanonicalPath.new(
@@ -591,6 +620,10 @@ module Hawkular::Inventory::RSpec
591
620
  # create 3 resources
592
621
  @client.create_resource type_path, id_1, 'My Resource 1', 'version' => 1.0
593
622
  @client.create_resource type_path, id_2, 'My Resource 2', 'version' => 1.1
623
+ # Wait for id_1 and id_2 before stop listening.
624
+ wait_while do
625
+ !hash_include_all(new_resource_events, [id_1, id_2])
626
+ end
594
627
  resources_closable.close
595
628
  @client.create_resource type_path, id_3, 'My Resource 3', 'version' => 1.2
596
629
 
@@ -0,0 +1,36 @@
1
+ require_relative '../spec_helper'
2
+ require 'hawkular/logger'
3
+
4
+ describe Hawkular::Logger do
5
+ let(:file) { Tempfile.new('hawkular_spec') }
6
+ subject(:logger) { described_class.new(file) }
7
+
8
+ describe '#log' do
9
+ before { allow(Hawkular::EnvConfig).to receive(:log_response?) { true } }
10
+
11
+ it 'logs the message to a file' do
12
+ logger.log('this is a message')
13
+ file.flush
14
+
15
+ expect(File.read(file)).to include 'this is a message'
16
+ end
17
+
18
+ it 'does not log anything if the config does not allow it' do
19
+ allow(Hawkular::EnvConfig).to receive(:log_response?) { false }
20
+
21
+ logger.log('this is a message')
22
+ file.flush
23
+
24
+ expect(File.read(file)).to be_empty
25
+ end
26
+
27
+ %w(debug info warn error fatal).each do |priority|
28
+ it "allows to log with #{priority} priority" do
29
+ logger.log('this is a message', priority)
30
+ file.flush
31
+
32
+ expect(File.read(file)).to include priority.upcase
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,6 @@
1
- require "#{File.dirname(__FILE__)}/../vcr/vcr_setup"
2
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require_relative '../vcr/vcr_setup'
2
+ require_relative '../spec_helper'
3
+
3
4
  require 'securerandom'
4
5
 
5
6
  SKIP_SECURE_CONTEXT = ENV['SKIP_SECURE_CONTEXT'] || '1'
@@ -751,7 +752,7 @@ security_contexts.each do |security_context|
751
752
 
752
753
  describe 'All Tags for metrics', run_for: [services_context] do
753
754
  before(:each) do
754
- @tenant = 'all_tags_tenant'
755
+ @tenant = SecureRandom.uuid
755
756
  options = setup_options.merge(tenant: @tenant)
756
757
  record("Metrics/#{security_context}/#{metrics_context}",
757
758
  options,
@@ -760,6 +761,64 @@ security_contexts.each do |security_context|
760
761
  end
761
762
  end
762
763
 
764
+ it 'Should fetch all metrics with some tags', :skip_auto_vcr do
765
+ id1 = SecureRandom.uuid
766
+ id2 = SecureRandom.uuid
767
+ id3 = SecureRandom.uuid
768
+ id4 = SecureRandom.uuid
769
+
770
+ bindings = { id1: id1, id2: id2, id3: id3, id4: id4 }
771
+ tag = { miq_metric: true }
772
+ example = proc do
773
+ create_metric_using_md @client.gauges, id1, tag
774
+ create_metric_using_md @client.gauges, id2, tag
775
+ create_metric_using_md @client.gauges, id3, tag
776
+ create_metric_using_md @client.gauges, id4, tag
777
+
778
+ create_metric_using_md @client.avail, id1, tag
779
+ create_metric_using_md @client.avail, id2, tag
780
+ create_metric_using_md @client.avail, id3, tag
781
+ create_metric_using_md @client.avail, id4, tag
782
+
783
+ create_metric_using_md @client.counters, id1, tag
784
+ create_metric_using_md @client.counters, id2, tag
785
+ create_metric_using_md @client.counters, id3, tag
786
+ create_metric_using_md @client.counters, id4, tag
787
+
788
+ @client.push_data(
789
+ counters: [
790
+ { id: id1, data: [{ value: 1 }] },
791
+ { id: id2, data: [{ value: 2 }] },
792
+ { id: id3, data: [{ value: 3 }] }
793
+ ],
794
+ availabilities: [
795
+ { id: id1, data: [{ value: 'up' }] },
796
+ { id: id2, data: [{ value: 'down' }] },
797
+ { id: id3, data: [{ value: 'up' }] },
798
+ { id: id4, data: [{ value: 'up', timestamp: 10_000 },
799
+ { value: 'down', timestamp: 100_000 },
800
+ { value: 'admin', timestamp: 1_000_000 }] }
801
+ ],
802
+ gauges: [
803
+ { id: id1, data: [{ value: 1.1 }] },
804
+ { id: id2, data: [{ value: 2.2 }] },
805
+ { id: id3, data: [{ value: 3.3 }] }
806
+ ]
807
+ )
808
+ data = @client.data_by_tags(tag, buckets: 1)
809
+
810
+ expect(data.size).to eql(3)
811
+ expect(data['gauge'].size).to eql(4)
812
+ expect(data['availability'].size).to eql(4)
813
+ expect(data['counter'].size).to eql(4)
814
+ end
815
+
816
+ record("Metrics/#{security_context}/#{metrics_context}",
817
+ vcr_bindings.merge(bindings),
818
+ cassette_name,
819
+ example: example)
820
+ end
821
+
763
822
  it 'Should fetch all metric tags for metrics definitions' do
764
823
  tags_m1 = {
765
824
  tag1: 'value1',
@@ -1,5 +1,6 @@
1
- require "#{File.dirname(__FILE__)}/../vcr/vcr_setup"
2
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require_relative '../vcr/vcr_setup'
2
+ require_relative '../spec_helper'
3
+
3
4
  require 'securerandom'
4
5
 
5
6
  include Hawkular::Inventory
@@ -11,6 +12,7 @@ SKIP_SECURE_CONTEXT = ENV['SKIP_SECURE_CONTEXT'] || '1'
11
12
  module Hawkular::Operations::RSpec
12
13
  NON_SECURE_CONTEXT = :NonSecure
13
14
  SECURE_CONTEXT = :Secure
15
+
14
16
  [NON_SECURE_CONTEXT, SECURE_CONTEXT].each do |security_context|
15
17
  next if security_context == SECURE_CONTEXT && SKIP_SECURE_CONTEXT == '1'
16
18
  if security_context == NON_SECURE_CONTEXT && ENV['SKIP_NON_SECURE_CONTEXT'] == '1'
@@ -47,7 +49,7 @@ module Hawkular::Operations::RSpec
47
49
  end
48
50
 
49
51
  let(:client) do
50
- OperationsClient.new(options)
52
+ Client.new(options)
51
53
  end
52
54
 
53
55
  before(:all) do
@@ -73,7 +75,7 @@ module Hawkular::Operations::RSpec
73
75
  it 'should be established via entrypoint' do
74
76
  ep = host_with_scheme(host, security_context == SECURE_CONTEXT)
75
77
 
76
- client = OperationsClient.new(options.merge entrypoint: ep, host: nil)
78
+ client = Client.new(options.merge entrypoint: ep, host: nil)
77
79
  ws = client.ws
78
80
  expect(ws).not_to be nil
79
81
  expect(ws.open?).to be true
@@ -126,7 +128,7 @@ module Hawkular::Operations::RSpec
126
128
 
127
129
  it 'should bail with no host' do
128
130
  expect do
129
- OperationsClient.new(options.merge host: nil)
131
+ Client.new(options.merge host: nil)
130
132
  end.to raise_error(StandardError, 'no parameter ":host" or ":entrypoint" given')
131
133
  end
132
134
  end
@@ -141,7 +143,7 @@ module Hawkular::Operations::RSpec
141
143
  record("Operation/#{security_context}/Helpers", nil, 'get_tenant') do
142
144
  ::RSpec::Mocks.with_temporary_scope do
143
145
  mock_inventory_client
144
- @inventory_client = InventoryClient.create(
146
+ @inventory_client = ::Hawkular::Inventory::Client.create(
145
147
  options.merge entrypoint: host_with_scheme(host, security_context == SECURE_CONTEXT))
146
148
  end
147
149
  inventory_client = @inventory_client
@@ -150,6 +152,15 @@ module Hawkular::Operations::RSpec
150
152
  record("Operation/#{security_context}/Helpers", { tenant_id: @tenant_id }, 'get_feed') do
151
153
  @feed_id = inventory_client.list_feeds[0]
152
154
  end
155
+ record("Operation/#{security_context}/Helpers", { tenant_id: @tenant_id, feed_id: @feed_id },
156
+ 'agent_properties') do
157
+ @wf_server_resource_id = 'Local~~'
158
+ wf_path = CanonicalPath.new(tenant_id: @tenant_id,
159
+ feed_id: @feed_id,
160
+ resource_ids: [@wf_server_resource_id])
161
+ wf_agent_path = path_for_installed_agent(wf_path)
162
+ @agent_immutable = immutable(inventory_client, wf_agent_path)
163
+ end
153
164
  end
154
165
  @bindings = { random_uuid: @random_uuid, tenant_id: @tenant_id, feed_id: @feed_id }
155
166
  record_websocket("Operation/#{security_context}/Operation",
@@ -158,13 +169,12 @@ module Hawkular::Operations::RSpec
158
169
  example)
159
170
  end
160
171
 
161
- it 'Add JDBC driver should add the driver' do
162
- wf_server_resource_id = 'Local~~'
172
+ it 'Add JDBC driver should add the driver' do # Unless it runs in a container
163
173
  driver_name = 'CreatedByRubyDriver' + @not_so_random_uuid
164
174
  driver_bits = IO.binread("#{File.dirname(__FILE__)}/../resources/driver.jar")
165
175
  wf_path = CanonicalPath.new(tenant_id: @tenant_id,
166
176
  feed_id: @feed_id,
167
- resource_ids: [wf_server_resource_id]).to_s
177
+ resource_ids: [@wf_server_resource_id]).to_s
168
178
 
169
179
  actual_data = {}
170
180
 
@@ -178,26 +188,27 @@ module Hawkular::Operations::RSpec
178
188
  actual_data[:data] = data
179
189
  end
180
190
  on.failure do |error|
181
- actual_data[:data] = {}
182
- puts 'error callback was called, reason: ' + error.to_s
191
+ actual_data[:data] = error
192
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
183
193
  end
184
194
  end
185
195
  actual_data = wait_for actual_data
186
- expect(actual_data['status']).to eq('OK')
187
- expect(actual_data['message']).to start_with('Added JDBC Driver')
188
- expect(actual_data['driverName']).to eq(driver_name)
196
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
197
+ expect(actual_data['message']).to start_with('Added JDBC Driver') unless @agent_immutable
198
+ expect(actual_data['driverName']).to eq(driver_name) unless @agent_immutable
199
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
189
200
  end
190
201
 
191
202
  it 'Restart should be performed and eventually respond with success' do
192
203
  wf_server_resource_id = 'Local~~'
193
- alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
204
+ status_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-status.war'
194
205
  path = CanonicalPath.new(tenant_id: @tenant_id,
195
206
  feed_id: @feed_id,
196
- resource_ids: [wf_server_resource_id, alerts_war_resource_id])
207
+ resource_ids: [wf_server_resource_id, status_war_resource_id])
197
208
 
198
209
  restart = {
199
210
  resource_path: path.to_s,
200
- deployment_name: 'hawkular-alerts-actions-email.war'
211
+ deployment_name: 'hawkular-status.war'
201
212
  }
202
213
 
203
214
  actual_data = {}
@@ -244,14 +255,14 @@ module Hawkular::Operations::RSpec
244
255
 
245
256
  it 'Disable should be performed and eventually respond with success' do
246
257
  wf_server_resource_id = 'Local~~'
247
- alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
258
+ status_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-status.war'
248
259
  path = CanonicalPath.new(tenant_id: @tenant_id,
249
260
  feed_id: @feed_id,
250
- resource_ids: [wf_server_resource_id, alerts_war_resource_id])
261
+ resource_ids: [wf_server_resource_id, status_war_resource_id])
251
262
 
252
263
  disable = {
253
264
  resource_path: path.to_s,
254
- deployment_name: 'hawkular-alerts-actions-email.war'
265
+ deployment_name: 'hawkular-status.war'
255
266
  }
256
267
  actual_data = {}
257
268
  client.disable_deployment(disable) do |on|
@@ -259,13 +270,14 @@ module Hawkular::Operations::RSpec
259
270
  actual_data[:data] = data
260
271
  end
261
272
  on.failure do |error|
262
- actual_data[:data] = {}
263
- puts 'error callback was called, reason: ' + error.to_s
273
+ actual_data[:data] = error
274
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
264
275
  end
265
276
  end
266
277
  actual_data = wait_for actual_data
267
- expect(actual_data['status']).to eq('OK')
268
- expect(actual_data['message']).to start_with('Performed [Disable Deployment] on')
278
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
279
+ expect(actual_data['message']).to start_with('Performed [Disable Deployment] on') unless @agent_immutable
280
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
269
281
  end
270
282
 
271
283
  it 'Add non-XA datasource should be doable' do
@@ -300,16 +312,17 @@ module Hawkular::Operations::RSpec
300
312
  actual_data[:data] = data
301
313
  end
302
314
  on.failure do |error|
303
- actual_data[:data] = { 'status' => 'ERROR' }
304
- puts 'error callback was called, reason: ' + error.to_s
315
+ actual_data[:data] = error
316
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
305
317
  end
306
318
  end
307
319
  actual_data = wait_for actual_data
308
- expect(actual_data['status']).to eq('OK')
309
- expect(actual_data['message']).to start_with('Added Datasource')
310
- expect(actual_data['xaDatasource']).to be_falsey
311
- expect(actual_data['datasourceName']).to eq(payload[:datasourceName])
312
- expect(actual_data['resourcePath']).to eq(payload[:resourcePath])
320
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
321
+ expect(actual_data['message']).to start_with('Added Datasource') unless @agent_immutable
322
+ expect(actual_data['xaDatasource']).to be_falsey unless @agent_immutable
323
+ expect(actual_data['datasourceName']).to eq(payload[:datasourceName]) unless @agent_immutable
324
+ expect(actual_data['resourcePath']).to eq(payload[:resourcePath]) unless @agent_immutable
325
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
313
326
  end
314
327
 
315
328
  it 'Add XA datasource should be doable' do
@@ -344,16 +357,17 @@ module Hawkular::Operations::RSpec
344
357
  actual_data[:data] = data
345
358
  end
346
359
  on.failure do |error|
347
- actual_data[:data] = { 'status' => 'ERROR' }
348
- puts 'error callback was called, reason: ' + error.to_s
360
+ actual_data[:data] = error
361
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
349
362
  end
350
363
  end
351
364
  actual_data = wait_for actual_data
352
- expect(actual_data['status']).to eq('OK')
353
- expect(actual_data['message']).to start_with('Added Datasource')
354
- expect(actual_data['xaDatasource']).to be_truthy
355
- expect(actual_data['datasourceName']).to eq(payload[:datasourceName])
356
- expect(actual_data['resourcePath']).to eq(payload[:resourcePath])
365
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
366
+ expect(actual_data['message']).to start_with('Added Datasource') unless @agent_immutable
367
+ expect(actual_data['xaDatasource']).to be_truthy unless @agent_immutable
368
+ expect(actual_data['datasourceName']).to eq(payload[:datasourceName]) unless @agent_immutable
369
+ expect(actual_data['resourcePath']).to eq(payload[:resourcePath]) unless @agent_immutable
370
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
357
371
  end
358
372
 
359
373
  it 'should not be possible to perform on closed client' do
@@ -371,18 +385,18 @@ module Hawkular::Operations::RSpec
371
385
 
372
386
  it 'Restart can be run multiple times in parallel' do
373
387
  wf_server_resource_id = 'Local~~'
374
- alerts_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-alerts-actions-email.war'
388
+ status_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-status.war'
375
389
  console_war_resource_id = 'Local~%2Fdeployment%3Dhawkular-wildfly-agent-download.war'
376
390
  path1 = CanonicalPath.new(tenant_id: @tenant_id,
377
391
  feed_id: @feed_id,
378
- resource_ids: [wf_server_resource_id, alerts_war_resource_id])
392
+ resource_ids: [wf_server_resource_id, status_war_resource_id])
379
393
  path2 = CanonicalPath.new(tenant_id: @tenant_id,
380
394
  feed_id: @feed_id,
381
395
  resource_ids: [wf_server_resource_id, console_war_resource_id])
382
396
 
383
397
  restart1 = {
384
398
  resource_path: path1.to_s,
385
- deployment_name: 'hawkular-alerts-actions-email.war'
399
+ deployment_name: 'hawkular-status.war'
386
400
  }
387
401
 
388
402
  restart2 = {
@@ -427,15 +441,16 @@ module Hawkular::Operations::RSpec
427
441
  actual_data[:data] = data
428
442
  end
429
443
  on.failure do |error|
430
- actual_data[:data] = {}
431
- puts 'error callback was called, reason: ' + error.to_s
444
+ actual_data[:data] = error
445
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
432
446
  end
433
447
  end
434
448
  actual_data = wait_for actual_data
435
- expect(actual_data['status']).to eq('OK')
436
- expect(actual_data['message']).to start_with('Performed [Deploy] on')
437
- expect(actual_data['destinationFileName']).to eq(app_name)
438
- expect(actual_data['resourcePath']).to eq(wf_path)
449
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
450
+ expect(actual_data['message']).to start_with('Performed [Deploy] on') unless @agent_immutable
451
+ expect(actual_data['destinationFileName']).to eq(app_name) unless @agent_immutable
452
+ expect(actual_data['resourcePath']).to eq(wf_path) unless @agent_immutable
453
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
439
454
  end
440
455
 
441
456
  it 'Undeploy deployment should be performed and eventually respond with success' do
@@ -454,13 +469,14 @@ module Hawkular::Operations::RSpec
454
469
  actual_data[:data] = data
455
470
  end
456
471
  on.failure do |error|
457
- actual_data[:data] = { 'status' => 'ERROR' }
458
- puts 'error callback was called, reason: ' + error.to_s
472
+ actual_data[:data] = error
473
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
459
474
  end
460
475
  end
461
476
  actual_data = wait_for actual_data
462
- expect(actual_data['status']).to eq('OK')
463
- expect(actual_data['message']).to start_with('Performed [Undeploy] on')
477
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
478
+ expect(actual_data['message']).to start_with('Performed [Undeploy] on') unless @agent_immutable
479
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
464
480
  end
465
481
 
466
482
  it 'Remove datasource should be performed and eventually respond with success' do
@@ -480,23 +496,24 @@ module Hawkular::Operations::RSpec
480
496
  actual_data[:data] = data
481
497
  end
482
498
  on.failure do |error|
483
- actual_data[:data] = {}
484
- puts 'error callback was called, reason: ' + error.to_s
499
+ actual_data[:data] = error
500
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
485
501
  end
486
502
  end
487
503
  actual_data = wait_for actual_data
488
- expect(actual_data['status']).to eq('OK')
489
- expect(actual_data['message']).to start_with('Performed [Remove] on')
490
- expect(actual_data['serverRefreshIndicator']).to eq('RELOAD-REQUIRED')
504
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
505
+ expect(actual_data['message']).to start_with('Performed [Remove] on') unless @agent_immutable
506
+ expect(actual_data['serverRefreshIndicator']).to eq('RELOAD-REQUIRED') unless @agent_immutable
507
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
491
508
  end
492
509
 
493
510
  it 'Remove JDBC driver should be performed and eventually respond with success' do
494
- wf_server_resource_id = 'Local~~'
511
+ # Unless it runs in a container
495
512
  driver_resource_id = 'Local~%2Fsubsystem%3Ddatasources%2Fjdbc-driver%3DCreatedByRubyDriver'
496
513
  driver_resource_id << @not_so_random_uuid
497
514
  path = CanonicalPath.new(tenant_id: @tenant_id,
498
515
  feed_id: @feed_id,
499
- resource_ids: [wf_server_resource_id, driver_resource_id]).to_s
516
+ resource_ids: [@wf_server_resource_id, driver_resource_id]).to_s
500
517
 
501
518
  actual_data = {}
502
519
  client.invoke_specific_operation({ resourcePath: path }, 'RemoveJdbcDriver') do |on|
@@ -504,14 +521,16 @@ module Hawkular::Operations::RSpec
504
521
  actual_data[:data] = data
505
522
  end
506
523
  on.failure do |error|
507
- actual_data[:data] = {}
508
- puts 'error callback was called, reason: ' + error.to_s
524
+ actual_data[:data] = error
525
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
509
526
  end
510
527
  end
511
528
  actual_data = wait_for actual_data
512
- expect(actual_data['status']).to eq('OK')
513
- expect(actual_data['resourcePath']).to eq(path)
514
- expect(actual_data['message']).to start_with('Performed [Remove] on a [JDBC Driver]')
529
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
530
+ expect(actual_data['resourcePath']).to eq(path) unless @agent_immutable
531
+ expect(actual_data['message']).to start_with(
532
+ 'Performed [Remove] on a [JDBC Driver]') unless @agent_immutable
533
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
515
534
  end
516
535
 
517
536
  xit 'Export JDR should retrieve the zip file with the report' do
@@ -536,6 +555,36 @@ module Hawkular::Operations::RSpec
536
555
  expect(actual_data['message']).to start_with('Performed [Export JDR] on')
537
556
  expect(actual_data['fileName']).to start_with('jdr_')
538
557
  end
558
+
559
+ it 'Update collection intervals should be performed and eventually respond with success' do
560
+ wf_server_resource_id = 'Local~~'
561
+ wf_agent_id = 'Local~%2Fsubsystem%3Dhawkular-wildfly-agent'
562
+ path = CanonicalPath.new(tenant_id: @tenant_id,
563
+ feed_id: @feed_id,
564
+ resource_ids: [wf_server_resource_id, wf_agent_id])
565
+
566
+ hash = {
567
+ resourcePath: path.to_s,
568
+ metricTypes: { 'WildFly Memory Metrics~Heap Max' => 77, 'Unknown~Metric' => 666 },
569
+ availTypes: { 'Server Availability~Server Availability' => 77, 'Unknown~Avail' => 666 }
570
+ }
571
+
572
+ actual_data = {}
573
+ client.update_collection_intervals(hash) do |on|
574
+ on.success do |data|
575
+ actual_data[:data] = data
576
+ end
577
+ on.failure do |error|
578
+ actual_data[:data] = error
579
+ puts 'error callback was called, reason: ' + error.to_s unless @agent_immutable
580
+ end
581
+ end
582
+ actual_data = wait_for actual_data
583
+ expect(actual_data['status']).to eq('OK') unless @agent_immutable
584
+ expect(
585
+ actual_data['message']).to start_with('Performed [Update Collection Intervals] on') unless @agent_immutable
586
+ expect(actual_data).to include('Command not allowed because the agent is immutable') if @agent_immutable
587
+ end
539
588
  end
540
589
  end
541
590
  end