foreman_dlm 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/app/controllers/api/v2/dlmlocks_controller.rb +20 -12
- data/app/controllers/concerns/foreman_dlm/find_host_by_client_cert.rb +5 -5
- data/app/controllers/concerns/foreman_dlm/find_host_by_ip.rb +1 -1
- data/app/controllers/dlmlocks_controller.rb +1 -2
- data/app/models/concerns/foreman_dlm/host_extensions.rb +3 -2
- data/app/models/dlmlock.rb +4 -4
- data/app/models/dlmlock/update.rb +5 -3
- data/app/views/api/v2/dlmlocks/show.json.rabl +1 -1
- data/app/views/api/v2/errors/precondition_failed.json.rabl +1 -1
- data/config/routes.rb +10 -10
- data/db/migrate/20170824084100_add_dlmlock.foreman_dlm.rb +1 -1
- data/lib/foreman_dlm/engine.rb +8 -7
- data/lib/foreman_dlm/version.rb +1 -1
- data/lib/tasks/foreman_dlm_tasks.rake +2 -4
- data/test/controllers/api/v2/dlmlocks_controller_test.rb +35 -35
- data/test/controllers/dlmlocks_test.rb +3 -3
- data/test/controllers/find_host_by_client_cert_test.rb +2 -2
- data/test/models/dlmlock_test.rb +7 -7
- data/test/models/host_monitoring_test.rb +1 -1
- data/test/test_plugin_helper.rb +1 -3
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0b972d0b154b81592615546f153d32893af3647364ea66f1e0ab5826884f02e
|
4
|
+
data.tar.gz: 38ee0b23847863b293adaed2e15c9dcdb6883eec9b512d3c308ae0f7dee88615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15549c3c5366a7217fb5ed65f87528f711527698e2a6ecdcefe7330a9e3a02d34a2f4c04fb5400632ab4a79ffab503d75dfbdc9d364d351b8d68e1e443c6dc81
|
7
|
+
data.tar.gz: 5f5036aa09ed8ff7e72313352c1bc83a3e8eba76448524305cb4bfda5a49c05c119a080b0168a16a296bbe9ddc1d49b9397c08b0e124ca397ad3ecf4a79fe9b1
|
data/README.md
CHANGED
@@ -45,7 +45,7 @@ module Api
|
|
45
45
|
process_response @dlmlock.save
|
46
46
|
end
|
47
47
|
|
48
|
-
api :PUT,
|
48
|
+
api :PUT, '/dlmlocks/:id/', N_('Update a DLM lock')
|
49
49
|
param :id, String, :required => true, :desc => N_('Id or name of the DLM lock')
|
50
50
|
param_group :dlmlock
|
51
51
|
|
@@ -64,14 +64,14 @@ module Api
|
|
64
64
|
param :id, String, :required => true, :desc => N_('Id or name of the DLM lock')
|
65
65
|
error 200, 'Lock acquired successfully.'
|
66
66
|
error 412, 'Lock could not be acquired.'
|
67
|
-
description <<-
|
67
|
+
description <<-DOCS
|
68
68
|
== Acquire a lock
|
69
69
|
This action acquires a lock.
|
70
70
|
It fails, if the lock is currently taken by another host.
|
71
71
|
|
72
72
|
== Authentication & Host Identification
|
73
73
|
The host is authenticated via a client certificate and identified via the CN of that certificate.
|
74
|
-
|
74
|
+
DOCS
|
75
75
|
|
76
76
|
def acquire
|
77
77
|
process_lock_response @dlmlock.acquire!(@host)
|
@@ -82,14 +82,14 @@ module Api
|
|
82
82
|
error 200, 'Lock released successfully.'
|
83
83
|
error 412, 'Lock could not be released.'
|
84
84
|
|
85
|
-
description <<-
|
85
|
+
description <<-DOCS
|
86
86
|
== Release a lock
|
87
87
|
This action releases a lock.
|
88
88
|
It fails, if the lock is currently taken by another host.
|
89
89
|
|
90
90
|
== Authentication & Host Identification
|
91
91
|
The host is authenticated via a client certificate and identified via the CN of that certificate.
|
92
|
-
|
92
|
+
DOCS
|
93
93
|
|
94
94
|
def release
|
95
95
|
process_lock_response @dlmlock.release!(@host)
|
@@ -113,10 +113,10 @@ module Api
|
|
113
113
|
|
114
114
|
def action_permission
|
115
115
|
case params[:action]
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
116
|
+
when 'release', 'acquire'
|
117
|
+
:edit
|
118
|
+
else
|
119
|
+
super
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -125,9 +125,17 @@ module Api
|
|
125
125
|
unless @host
|
126
126
|
logger.info 'Denying access because no host could be detected.'
|
127
127
|
if User.current
|
128
|
-
render_error 'access_denied',
|
128
|
+
render_error 'access_denied',
|
129
|
+
:status => :forbidden,
|
130
|
+
:locals => {
|
131
|
+
:details => 'You need to authenticate with a valid client cert. The DN has to match a known host.'
|
132
|
+
}
|
129
133
|
else
|
130
|
-
render_error 'unauthorized',
|
134
|
+
render_error 'unauthorized',
|
135
|
+
:status => :unauthorized,
|
136
|
+
:locals => {
|
137
|
+
:user_login => get_client_cert_hostname
|
138
|
+
}
|
131
139
|
end
|
132
140
|
end
|
133
141
|
true
|
@@ -148,7 +156,7 @@ module Api
|
|
148
156
|
deny_access
|
149
157
|
else
|
150
158
|
render_error 'precondition_failed', :status => :precondition_failed, :locals => {
|
151
|
-
:message => 'Precondition failed. Lock is in invalid state for this operation.'
|
159
|
+
:message => 'Precondition failed. Lock is in invalid state for this operation.'
|
152
160
|
}
|
153
161
|
end
|
154
162
|
end
|
@@ -3,7 +3,7 @@ module ForemanDlm
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
module ClassMethods
|
6
|
-
def authorize_host_by_client_cert(actions,
|
6
|
+
def authorize_host_by_client_cert(actions, _options = {})
|
7
7
|
skip_before_action :require_login, :only => actions, :raise => false
|
8
8
|
skip_before_action :authorize, :only => actions
|
9
9
|
skip_before_action :verify_authenticity_token, :only => actions
|
@@ -39,8 +39,8 @@ module ForemanDlm
|
|
39
39
|
|
40
40
|
return unless hostname
|
41
41
|
|
42
|
-
host ||= Host::Base.
|
43
|
-
|
42
|
+
host ||= Host::Base.find_by(certname: hostname) ||
|
43
|
+
Host::Base.find_by(name: hostname)
|
44
44
|
logger.info { "Found Host #{host} by client cert #{hostname}" } if host
|
45
45
|
host
|
46
46
|
end
|
@@ -53,9 +53,9 @@ module ForemanDlm
|
|
53
53
|
end
|
54
54
|
|
55
55
|
dn = request.env[Setting[:ssl_client_dn_env]]
|
56
|
-
return unless
|
56
|
+
return unless dn && dn =~ /CN=([^\s\/,]+)/i
|
57
57
|
|
58
|
-
hostname =
|
58
|
+
hostname = Regexp.last_match(1).downcase
|
59
59
|
logger.debug "Extracted hostname '#{hostname}' from client certificate."
|
60
60
|
hostname
|
61
61
|
end
|
@@ -3,7 +3,7 @@ module ForemanDlm
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
module ClassMethods
|
6
|
-
def authorize_host_by_ip(actions,
|
6
|
+
def authorize_host_by_ip(actions, _options = {})
|
7
7
|
skip_before_action :require_login, :only => actions, :raise => false
|
8
8
|
skip_before_action :authorize, :only => actions
|
9
9
|
skip_before_action :verify_authenticity_token, :only => actions
|
@@ -4,8 +4,9 @@ module ForemanDlm
|
|
4
4
|
|
5
5
|
included do
|
6
6
|
has_many :dlmlocks,
|
7
|
-
|
8
|
-
|
7
|
+
foreign_key: 'host_id',
|
8
|
+
dependent: :nullify,
|
9
|
+
inverse_of: :host
|
9
10
|
|
10
11
|
define_model_callbacks :lock, :only => :after
|
11
12
|
define_model_callbacks :unlock, :only => :after
|
data/app/models/dlmlock.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class Dlmlock <
|
1
|
+
class Dlmlock < ApplicationRecord
|
2
2
|
include Authorizable
|
3
3
|
|
4
4
|
def self.humanize_class_name
|
@@ -28,7 +28,7 @@ class Dlmlock < ActiveRecord::Base
|
|
28
28
|
def locked_by?(host)
|
29
29
|
self.host == host
|
30
30
|
end
|
31
|
-
|
31
|
+
alias acquired_by? locked_by?
|
32
32
|
|
33
33
|
def disabled?
|
34
34
|
!enabled?
|
@@ -37,7 +37,7 @@ class Dlmlock < ActiveRecord::Base
|
|
37
37
|
def locked?
|
38
38
|
host.present?
|
39
39
|
end
|
40
|
-
|
40
|
+
alias taken? locked?
|
41
41
|
|
42
42
|
def humanized_type
|
43
43
|
_('Generic Lock')
|
@@ -54,7 +54,7 @@ class Dlmlock < ActiveRecord::Base
|
|
54
54
|
id: id,
|
55
55
|
host_id: [new_host.try(:id), old_host.try(:id)],
|
56
56
|
enabled: true
|
57
|
-
).update_all(changes.merge(updated_at:
|
57
|
+
).update_all(changes.merge(updated_at: Time.now.utc))
|
58
58
|
if num_updated > 0
|
59
59
|
reload
|
60
60
|
process_host_change(old_host, new_host, changes)
|
data/config/routes.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
namespace :api, :defaults => { :format => 'json' } do
|
3
3
|
scope '(:apiv)', :module => :v2,
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
4
|
+
:defaults => { :apiv => 'v2' },
|
5
|
+
:apiv => /v1|v2/,
|
6
|
+
:constraints => ApiConstraints.new(:version => 2, :default => true) do
|
7
|
+
constraints(id: /[^\/]+/) do
|
8
|
+
resources :dlmlocks, only: [:index, :show, :update, :destroy] do
|
9
|
+
get :lock, on: :member, action: :show, controller: 'dlmlocks'
|
10
|
+
put :lock, on: :member, action: :acquire, controller: 'dlmlocks'
|
11
|
+
delete :lock, on: :member, action: :release, controller: 'dlmlocks'
|
13
12
|
end
|
14
|
-
resources :dlmlocks, only: [:create]
|
15
13
|
end
|
14
|
+
resources :dlmlocks, only: [:create]
|
15
|
+
end
|
16
16
|
end
|
17
17
|
|
18
18
|
scope '/foreman_dlm' do
|
data/lib/foreman_dlm/engine.rb
CHANGED
@@ -14,7 +14,7 @@ module ForemanDlm
|
|
14
14
|
|
15
15
|
initializer 'foreman_dlm.register_plugin', :before => :finisher_hook do |_app|
|
16
16
|
Foreman::Plugin.register :foreman_dlm do
|
17
|
-
requires_foreman '>= 1.
|
17
|
+
requires_foreman '>= 1.17'
|
18
18
|
|
19
19
|
apipie_documented_controllers ["#{ForemanDlm::Engine.root}/app/controllers/api/v2/*.rb"]
|
20
20
|
|
@@ -43,7 +43,7 @@ module ForemanDlm
|
|
43
43
|
|
44
44
|
# add menu entry
|
45
45
|
menu :top_menu, :distributed_locks,
|
46
|
-
url_hash: { controller: :
|
46
|
+
url_hash: { controller: :dlmlocks, action: :index },
|
47
47
|
caption: N_('Distributed Locks'),
|
48
48
|
parent: :monitor_menu,
|
49
49
|
after: :audits
|
@@ -55,10 +55,8 @@ module ForemanDlm
|
|
55
55
|
begin
|
56
56
|
Host::Managed.send(:include, ForemanDlm::HostExtensions)
|
57
57
|
|
58
|
-
if ForemanDlm.with_monitoring?
|
59
|
-
|
60
|
-
end
|
61
|
-
rescue => e
|
58
|
+
Host::Managed.send(:include, ForemanDlm::HostMonitoringExtensions) if ForemanDlm.with_monitoring?
|
59
|
+
rescue StandardError => e
|
62
60
|
Rails.logger.warn "ForemanDlm: skipping engine hook (#{e})"
|
63
61
|
end
|
64
62
|
end
|
@@ -71,6 +69,9 @@ module ForemanDlm
|
|
71
69
|
end
|
72
70
|
|
73
71
|
def self.with_monitoring?
|
74
|
-
|
72
|
+
ForemanMonitoring # rubocop:disable Lint/Void
|
73
|
+
true
|
74
|
+
rescue StandardError
|
75
|
+
false
|
75
76
|
end
|
76
77
|
end
|
data/lib/foreman_dlm/version.rb
CHANGED
@@ -21,7 +21,7 @@ namespace :foreman_dlm do
|
|
21
21
|
"#{ForemanDlm::Engine.root}/lib/**/*.rb",
|
22
22
|
"#{ForemanDlm::Engine.root}/test/**/*.rb"]
|
23
23
|
end
|
24
|
-
rescue
|
24
|
+
rescue StandardError
|
25
25
|
puts 'Rubocop not loaded.'
|
26
26
|
end
|
27
27
|
|
@@ -32,6 +32,4 @@ end
|
|
32
32
|
Rake::Task[:test].enhance ['test:foreman_dlm']
|
33
33
|
|
34
34
|
load 'tasks/jenkins.rake'
|
35
|
-
if Rake::Task.task_defined?(:'jenkins:unit')
|
36
|
-
Rake::Task['jenkins:unit'].enhance ['test:foreman_dlm', 'foreman_dlm:rubocop']
|
37
|
-
end
|
35
|
+
Rake::Task['jenkins:unit'].enhance ['test:foreman_dlm', 'foreman_dlm:rubocop'] if Rake::Task.task_defined?(:'jenkins:unit')
|
@@ -13,7 +13,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
13
13
|
body = ActiveSupport::JSON.decode(@response.body)
|
14
14
|
results = body['results']
|
15
15
|
assert results
|
16
|
-
entry = results.detect { |
|
16
|
+
entry = results.detect { |e| e['id'] == dlmlock.id }
|
17
17
|
assert entry
|
18
18
|
assert_equal dlmlock.name, entry['name']
|
19
19
|
assert_equal dlmlock.type, entry['type']
|
@@ -25,7 +25,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
25
25
|
context '#create' do
|
26
26
|
test 'should create dlmlock' do
|
27
27
|
assert_difference('Dlmlock.unscoped.count') do
|
28
|
-
post :create, valid_attrs_with_root
|
28
|
+
post :create, params: valid_attrs_with_root
|
29
29
|
end
|
30
30
|
assert_response :success
|
31
31
|
body = ActiveSupport::JSON.decode(@response.body)
|
@@ -41,7 +41,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
41
41
|
context '#show' do
|
42
42
|
test 'should show individual record with host' do
|
43
43
|
dlmlock = FactoryBot.create(:dlmlock, :host => host1)
|
44
|
-
get :show, { :id => dlmlock.to_param }
|
44
|
+
get :show, params: { :id => dlmlock.to_param }
|
45
45
|
assert_response :success
|
46
46
|
body = ActiveSupport::JSON.decode(@response.body)
|
47
47
|
refute_empty body
|
@@ -53,7 +53,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
53
53
|
|
54
54
|
test 'should show individual record that is disabled' do
|
55
55
|
dlmlock = FactoryBot.create(:dlmlock, :enabled => false)
|
56
|
-
get :show, { :id => dlmlock.to_param }
|
56
|
+
get :show, params: { :id => dlmlock.to_param }
|
57
57
|
assert_response :success
|
58
58
|
body = ActiveSupport::JSON.decode(@response.body)
|
59
59
|
refute_empty body
|
@@ -65,7 +65,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
65
65
|
|
66
66
|
test 'should show individual record by name' do
|
67
67
|
dlmlock = FactoryBot.create(:dlmlock, :host => host1)
|
68
|
-
get :show, { :id => dlmlock.name }
|
68
|
+
get :show, params: { :id => dlmlock.name }
|
69
69
|
assert_response :success
|
70
70
|
body = ActiveSupport::JSON.decode(@response.body)
|
71
71
|
refute_empty body
|
@@ -74,11 +74,11 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
74
74
|
host = body['host']
|
75
75
|
assert host
|
76
76
|
assert_equal host1.name, host['name']
|
77
|
-
refute host.
|
77
|
+
refute host.key?('self')
|
78
78
|
end
|
79
79
|
|
80
80
|
test 'should not find dlmlock with invalid id' do
|
81
|
-
get :show, { :id =>
|
81
|
+
get :show, params: { :id => 9_999_999 }
|
82
82
|
assert_response :not_found
|
83
83
|
end
|
84
84
|
end
|
@@ -86,7 +86,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
86
86
|
context '#update' do
|
87
87
|
test 'should update dlmlock' do
|
88
88
|
dlmlock = FactoryBot.create(:dlmlock)
|
89
|
-
put :update, { :id => dlmlock.to_param, :dlmlock => valid_attrs.merge(:host_id => host1.id, :enabled => false) }
|
89
|
+
put :update, params: { :id => dlmlock.to_param, :dlmlock => valid_attrs.merge(:host_id => host1.id, :enabled => false) }
|
90
90
|
assert_response :success
|
91
91
|
dlmlock.reload
|
92
92
|
assert_equal valid_attrs['name'], dlmlock.name
|
@@ -100,7 +100,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
100
100
|
test 'should destroy dlmlock' do
|
101
101
|
dlmlock = FactoryBot.create(:dlmlock)
|
102
102
|
assert_difference('Dlmlock.unscoped.count', -1) do
|
103
|
-
delete :destroy, { :id => dlmlock.to_param }
|
103
|
+
delete :destroy, params: { :id => dlmlock.to_param }
|
104
104
|
end
|
105
105
|
assert_response :success
|
106
106
|
assert_equal 0, Dlmlock.where(:id => dlmlock.id).count
|
@@ -110,7 +110,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
110
110
|
context '#acquire' do
|
111
111
|
test 'should deny access' do
|
112
112
|
dlmlock = FactoryBot.create(:dlmlock)
|
113
|
-
put :acquire, { :id => dlmlock.to_param }
|
113
|
+
put :acquire, params: { :id => dlmlock.to_param }
|
114
114
|
assert_response :forbidden
|
115
115
|
assert_nil dlmlock.reload.host
|
116
116
|
end
|
@@ -119,7 +119,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
119
119
|
context '#release' do
|
120
120
|
test 'should deny access' do
|
121
121
|
dlmlock = FactoryBot.create(:dlmlock, :host => host2)
|
122
|
-
delete :release, { :id => dlmlock.to_param }
|
122
|
+
delete :release, params: { :id => dlmlock.to_param }
|
123
123
|
assert_response :forbidden
|
124
124
|
assert_equal host2, dlmlock.reload.host
|
125
125
|
end
|
@@ -142,15 +142,15 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
142
142
|
context '#index' do
|
143
143
|
test 'should deny access' do
|
144
144
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
145
|
-
get :index, { :id => dlmlock.to_param }
|
145
|
+
get :index, params: { :id => dlmlock.to_param }
|
146
146
|
assert_response :unauthorized
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
150
|
context '#create' do
|
151
151
|
test 'should deny access' do
|
152
|
-
|
153
|
-
post :create, valid_attrs_with_root
|
152
|
+
as_admin { FactoryBot.create(:dlmlock) }
|
153
|
+
post :create, params: valid_attrs_with_root
|
154
154
|
assert_response :unauthorized
|
155
155
|
end
|
156
156
|
end
|
@@ -158,7 +158,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
158
158
|
context '#update' do
|
159
159
|
test 'should deny access' do
|
160
160
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
161
|
-
put :update, { :id => dlmlock.to_param, :dlmlock => valid_attrs }
|
161
|
+
put :update, params: { :id => dlmlock.to_param, :dlmlock => valid_attrs }
|
162
162
|
assert_response :unauthorized
|
163
163
|
end
|
164
164
|
end
|
@@ -166,7 +166,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
166
166
|
context '#destroy' do
|
167
167
|
test 'should deny access' do
|
168
168
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
169
|
-
delete :destroy, { :id => dlmlock.to_param }
|
169
|
+
delete :destroy, params: { :id => dlmlock.to_param }
|
170
170
|
assert_response :unauthorized
|
171
171
|
assert_equal 1, as_admin { Dlmlock.where(:id => dlmlock.id).count }
|
172
172
|
end
|
@@ -175,7 +175,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
175
175
|
context '#show' do
|
176
176
|
test 'should show individual free lock' do
|
177
177
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
178
|
-
get :show, { :id => dlmlock.to_param }
|
178
|
+
get :show, params: { :id => dlmlock.to_param }
|
179
179
|
assert_response :success
|
180
180
|
body = ActiveSupport::JSON.decode(@response.body)
|
181
181
|
refute_empty body
|
@@ -188,7 +188,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
188
188
|
|
189
189
|
test 'should show individual acquired lock by me' do
|
190
190
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host1) }
|
191
|
-
get :show, { :id => dlmlock.to_param }
|
191
|
+
get :show, params: { :id => dlmlock.to_param }
|
192
192
|
assert_response :success
|
193
193
|
body = ActiveSupport::JSON.decode(@response.body)
|
194
194
|
refute_empty body
|
@@ -204,7 +204,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
204
204
|
|
205
205
|
test 'should show individual acquired lock by other' do
|
206
206
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host2) }
|
207
|
-
get :show, { :id => dlmlock.to_param }
|
207
|
+
get :show, params: { :id => dlmlock.to_param }
|
208
208
|
assert_response :success
|
209
209
|
body = ActiveSupport::JSON.decode(@response.body)
|
210
210
|
refute_empty body
|
@@ -222,21 +222,21 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
222
222
|
context '#acquire' do
|
223
223
|
test 'should acquire empty dlmlock' do
|
224
224
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
225
|
-
put :acquire, { :id => dlmlock.to_param }
|
225
|
+
put :acquire, params: { :id => dlmlock.to_param }
|
226
226
|
assert_response :success
|
227
227
|
assert_equal host1, as_admin { dlmlock.reload.host }
|
228
228
|
end
|
229
229
|
|
230
230
|
test 'should acquire own dlmlock' do
|
231
231
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host1) }
|
232
|
-
put :acquire, { :id => dlmlock.to_param }
|
232
|
+
put :acquire, params: { :id => dlmlock.to_param }
|
233
233
|
assert_response :success
|
234
234
|
assert_equal host1, as_admin { dlmlock.reload.host }
|
235
235
|
end
|
236
236
|
|
237
237
|
test 'should not acquire foreign dlmlock' do
|
238
238
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host2) }
|
239
|
-
put :acquire, { :id => dlmlock.to_param }
|
239
|
+
put :acquire, params: { :id => dlmlock.to_param }
|
240
240
|
assert_response :precondition_failed
|
241
241
|
assert_equal host2, as_admin { dlmlock.reload.host }
|
242
242
|
end
|
@@ -244,7 +244,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
244
244
|
test 'should transparently create non-existing dlmlock' do
|
245
245
|
lockname = 'Test Lock'
|
246
246
|
assert_equal 0, as_admin { Dlmlock.where(:name => lockname).count }
|
247
|
-
put :acquire, { :id => lockname }
|
247
|
+
put :acquire, params: { :id => lockname }
|
248
248
|
assert_response :success
|
249
249
|
dlmlock = as_admin { Dlmlock.find_by(:name => lockname) }
|
250
250
|
assert_equal lockname, dlmlock.name
|
@@ -255,21 +255,21 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
255
255
|
context '#release' do
|
256
256
|
test 'should release empty dlmlock' do
|
257
257
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
258
|
-
delete :release, { :id => dlmlock.to_param }
|
258
|
+
delete :release, params: { :id => dlmlock.to_param }
|
259
259
|
assert_response :success
|
260
260
|
assert_nil as_admin { dlmlock.reload.host }
|
261
261
|
end
|
262
262
|
|
263
263
|
test 'should release own dlmlock' do
|
264
264
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host1) }
|
265
|
-
delete :release, { :id => dlmlock.to_param }
|
265
|
+
delete :release, params: { :id => dlmlock.to_param }
|
266
266
|
assert_response :success
|
267
267
|
assert_nil as_admin { dlmlock.reload.host }
|
268
268
|
end
|
269
269
|
|
270
270
|
test 'should not acquire foreign dlmlock' do
|
271
271
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host2) }
|
272
|
-
delete :release, { :id => dlmlock.to_param }
|
272
|
+
delete :release, params: { :id => dlmlock.to_param }
|
273
273
|
assert_response :precondition_failed
|
274
274
|
assert_equal host2, as_admin { dlmlock.reload.host }
|
275
275
|
end
|
@@ -277,7 +277,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
277
277
|
test 'should transparently create non-existing dlmlock' do
|
278
278
|
lockname = 'Test Lock'
|
279
279
|
assert_equal 0, as_admin { Dlmlock.where(:name => lockname).count }
|
280
|
-
delete :release, { :id => lockname }
|
280
|
+
delete :release, params: { :id => lockname }
|
281
281
|
assert_response :success
|
282
282
|
dlmlock = as_admin { Dlmlock.find_by(:name => lockname) }
|
283
283
|
assert_equal lockname, dlmlock.name
|
@@ -295,7 +295,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
295
295
|
context '#index' do
|
296
296
|
test 'should deny access' do
|
297
297
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
298
|
-
get :index, { :id => dlmlock.to_param }
|
298
|
+
get :index, params: { :id => dlmlock.to_param }
|
299
299
|
assert_response :unauthorized
|
300
300
|
end
|
301
301
|
end
|
@@ -303,15 +303,15 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
303
303
|
context '#show' do
|
304
304
|
test 'should deny access' do
|
305
305
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
306
|
-
get :show, { :id => dlmlock.to_param }
|
306
|
+
get :show, params: { :id => dlmlock.to_param }
|
307
307
|
assert_response :unauthorized
|
308
308
|
end
|
309
309
|
end
|
310
310
|
|
311
311
|
context '#create' do
|
312
312
|
test 'should deny access' do
|
313
|
-
|
314
|
-
post :create, valid_attrs_with_root
|
313
|
+
as_admin { FactoryBot.create(:dlmlock) }
|
314
|
+
post :create, params: valid_attrs_with_root
|
315
315
|
assert_response :unauthorized
|
316
316
|
end
|
317
317
|
end
|
@@ -319,7 +319,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
319
319
|
context '#update' do
|
320
320
|
test 'should deny access' do
|
321
321
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
322
|
-
put :update, { :id => dlmlock.to_param, :dlmlock => valid_attrs }
|
322
|
+
put :update, params: { :id => dlmlock.to_param, :dlmlock => valid_attrs }
|
323
323
|
assert_response :unauthorized
|
324
324
|
end
|
325
325
|
end
|
@@ -327,7 +327,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
327
327
|
context '#destroy' do
|
328
328
|
test 'should deny access' do
|
329
329
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
330
|
-
delete :destroy, { :id => dlmlock.to_param }
|
330
|
+
delete :destroy, params: { :id => dlmlock.to_param }
|
331
331
|
assert_response :unauthorized
|
332
332
|
assert_equal 1, as_admin { Dlmlock.where(:id => dlmlock.id).count }
|
333
333
|
end
|
@@ -336,7 +336,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
336
336
|
context '#acquire' do
|
337
337
|
test 'should deny access' do
|
338
338
|
dlmlock = as_admin { FactoryBot.create(:dlmlock) }
|
339
|
-
put :acquire, { :id => dlmlock.to_param }
|
339
|
+
put :acquire, params: { :id => dlmlock.to_param }
|
340
340
|
assert_response :unauthorized
|
341
341
|
assert_nil as_admin { dlmlock.reload.host }
|
342
342
|
end
|
@@ -345,7 +345,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
|
|
345
345
|
context '#release' do
|
346
346
|
test 'should deny access' do
|
347
347
|
dlmlock = as_admin { FactoryBot.create(:dlmlock, :host => host2) }
|
348
|
-
delete :release, { :id => dlmlock.to_param }
|
348
|
+
delete :release, params: { :id => dlmlock.to_param }
|
349
349
|
assert_response :unauthorized
|
350
350
|
assert_equal host2, as_admin { dlmlock.reload.host }
|
351
351
|
end
|
@@ -3,21 +3,21 @@ require 'test_plugin_helper'
|
|
3
3
|
class DlmlocksControllerTest < ActionController::TestCase
|
4
4
|
test '#index' do
|
5
5
|
FactoryBot.create(:dlmlock)
|
6
|
-
get :index,
|
6
|
+
get :index, session: set_session_user
|
7
7
|
assert_response :success
|
8
8
|
assert_not_nil assigns('dlmlocks')
|
9
9
|
assert_template 'index'
|
10
10
|
end
|
11
11
|
|
12
12
|
test '#index with no lock shows welcome page' do
|
13
|
-
get :index,
|
13
|
+
get :index, session: set_session_user
|
14
14
|
assert_response :success
|
15
15
|
assert_template 'welcome'
|
16
16
|
end
|
17
17
|
|
18
18
|
test '#show' do
|
19
19
|
dlmlock = FactoryBot.create(:dlmlock)
|
20
|
-
get :show, { :id => dlmlock.id }, set_session_user
|
20
|
+
get :show, params: { :id => dlmlock.id }, session: set_session_user
|
21
21
|
assert_response :success
|
22
22
|
assert_template 'show'
|
23
23
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_plugin_helper'
|
2
2
|
|
3
3
|
class FindHostByClientCertTest < ActionController::TestCase
|
4
|
-
tests
|
4
|
+
tests 'api/v2/dlmlocks'
|
5
5
|
|
6
6
|
def described_class
|
7
7
|
Api::V2::DlmlocksController
|
@@ -57,7 +57,7 @@ class FindHostByClientCertTest < ActionController::TestCase
|
|
57
57
|
|
58
58
|
test 'certificate with unknown dn denies access' do
|
59
59
|
@request.env['HTTPS'] = 'on'
|
60
|
-
@request.env['SSL_CLIENT_S_DN'] =
|
60
|
+
@request.env['SSL_CLIENT_S_DN'] = 'CN=doesnotexist.example.com,DN=example,DN=com'
|
61
61
|
@request.env['SSL_CLIENT_VERIFY'] = 'SUCCESS'
|
62
62
|
|
63
63
|
get :index
|
data/test/models/dlmlock_test.rb
CHANGED
@@ -60,16 +60,16 @@ class DlmlockTest < ActiveSupport::TestCase
|
|
60
60
|
end
|
61
61
|
|
62
62
|
test 'records audit change on acquisition by owner' do
|
63
|
-
assert_difference "Audit.where(auditable_type: 'Dlmlock').count" do
|
63
|
+
assert_difference "Audit.where(auditable_type: 'Dlmlock', action: 'update').count" do
|
64
64
|
assert dlmlock.acquire!(host1)
|
65
65
|
end
|
66
66
|
audit_record = dlmlock.audits.last
|
67
67
|
assert_equal 'update', audit_record.action
|
68
|
-
assert_equal({:host_id => host1.id}, audit_record.audited_changes)
|
68
|
+
assert_equal({ :host_id => host1.id }, audit_record.audited_changes)
|
69
69
|
end
|
70
70
|
|
71
71
|
test 'records no audit change on release' do
|
72
|
-
assert_no_difference "Audit.where(auditable_type: 'Dlmlock').count" do
|
72
|
+
assert_no_difference "Audit.where(auditable_type: 'Dlmlock', action: 'update').count" do
|
73
73
|
assert dlmlock.release!(host1)
|
74
74
|
end
|
75
75
|
end
|
@@ -115,7 +115,7 @@ class DlmlockTest < ActiveSupport::TestCase
|
|
115
115
|
end
|
116
116
|
|
117
117
|
context 'an acquired DLM lock' do
|
118
|
-
|
118
|
+
let(:dlmlock) { FactoryBot.create(:dlmlock, :host => host1) }
|
119
119
|
|
120
120
|
test 'should be enabled and locked' do
|
121
121
|
assert_equal true, dlmlock.enabled?
|
@@ -151,16 +151,16 @@ class DlmlockTest < ActiveSupport::TestCase
|
|
151
151
|
end
|
152
152
|
|
153
153
|
test 'records audit change on release by owner' do
|
154
|
-
assert_difference "Audit.where(auditable_type: 'Dlmlock').count" do
|
154
|
+
assert_difference "Audit.where(auditable_type: 'Dlmlock', action: 'update').count" do
|
155
155
|
assert dlmlock.release!(host1)
|
156
156
|
end
|
157
157
|
audit_record = dlmlock.audits.last
|
158
158
|
assert_equal 'update', audit_record.action
|
159
|
-
assert_equal({:host_id => nil}, audit_record.audited_changes)
|
159
|
+
assert_equal({ :host_id => nil }, audit_record.audited_changes)
|
160
160
|
end
|
161
161
|
|
162
162
|
test 'records no audit change on acquisition by owner' do
|
163
|
-
assert_no_difference "Audit.where(auditable_type: 'Dlmlock').count" do
|
163
|
+
assert_no_difference "Audit.where(auditable_type: 'Dlmlock', action: 'update').count" do
|
164
164
|
assert dlmlock.acquire!(host1)
|
165
165
|
end
|
166
166
|
end
|
@@ -27,7 +27,7 @@ class HostMonitoringTest < ActiveSupport::TestCase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'an acquired DLM lock' do
|
30
|
-
|
30
|
+
let(:dlmlock) { FactoryBot.create(:dlmlock, :host => host) }
|
31
31
|
|
32
32
|
test 'removes monitoring dowmtine' do
|
33
33
|
monitoring_mock.expects(:del_downtime_host).once
|
data/test/test_plugin_helper.rb
CHANGED
@@ -3,7 +3,5 @@ require 'test_helper'
|
|
3
3
|
|
4
4
|
# Add plugin to FactoryBot's paths
|
5
5
|
FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
|
6
|
-
if ForemanDlm.with_monitoring?
|
7
|
-
FactoryBot.definition_file_paths << "#{ForemanMonitoring::Engine.root}/test/factories"
|
8
|
-
end
|
6
|
+
FactoryBot.definition_file_paths << "#{ForemanMonitoring::Engine.root}/test/factories" if ForemanDlm.with_monitoring?
|
9
7
|
FactoryBot.reload
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_dlm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Timo Goebel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rdoc
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rubocop
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.52.1
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.52.1
|
41
41
|
description: Adds a Distributed Lock Manager to Foreman. This enables painless system
|
42
42
|
updates for clusters.
|
43
43
|
email:
|