conjur-cli 4.14.0 → 4.15.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 +5 -13
- data/CHANGELOG.md +5 -0
- data/bin/_conjur_completions.yaml +2 -0
- data/conjur.gemspec +4 -2
- data/features/step_definitions/dsl_steps.rb +1 -1
- data/lib/conjur/command.rb +17 -0
- data/lib/conjur/command/groups.rb +18 -0
- data/lib/conjur/command/hosts.rb +27 -1
- data/lib/conjur/command/init.rb +1 -1
- data/lib/conjur/command/rspec/describe_command.rb +1 -1
- data/lib/conjur/command/rspec/mock_services.rb +7 -7
- data/lib/conjur/command/rspec/output_matchers.rb +16 -38
- data/lib/conjur/command/users.rb +18 -0
- data/lib/conjur/command/variables.rb +17 -0
- data/lib/conjur/version.rb +1 -1
- data/spec/authn_spec.rb +9 -9
- data/spec/command/assets_spec.rb +20 -20
- data/spec/command/audit_spec.rb +9 -9
- data/spec/command/authn_spec.rb +8 -8
- data/spec/command/env_spec.rb +26 -26
- data/spec/command/groups_spec.rb +4 -4
- data/spec/command/hosts_spec.rb +2 -2
- data/spec/command/init_spec.rb +19 -10
- data/spec/command/layers_spec.rb +6 -6
- data/spec/command/policy_spec.rb +16 -16
- data/spec/command/pubkeys_spec.rb +9 -9
- data/spec/command/resources_spec.rb +26 -26
- data/spec/command/roles_spec.rb +14 -14
- data/spec/command/users_spec.rb +10 -10
- data/spec/command/variables_spec.rb +3 -3
- data/spec/command_spec.rb +7 -7
- data/spec/config_spec.rb +21 -21
- data/spec/dsl/runner_spec.rb +8 -8
- data/spec/env_spec.rb +45 -45
- metadata +59 -36
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
data.tar.gz: !binary |-
|
|
6
|
-
ODE1ODg4ZGMyZGYzYTBiYTNmNzMzMWZlNjUwYjdjZjc4NDZjYWJkOA==
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 9a7286b596f4e9bfdcac76be7e5d79b813aa2a52
|
|
4
|
+
data.tar.gz: 6e4d13583b0c704139bcfcea5cc4e6fa1a8a3335
|
|
7
5
|
SHA512:
|
|
8
|
-
metadata.gz:
|
|
9
|
-
|
|
10
|
-
MmM2ZjkzMjRmMTZkN2UxZjc3MmM5NTAxNjg4ZjE4YjE5Y2NiMTA4ZDI2OGQy
|
|
11
|
-
YTgxZWJiZjZjZjBlMDVhZjM2OWZiOTMyYTYzMzY4MTA2YjhmYWM=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
NjlhMjllYzZjNDMwOTdmYjg0Nzc4MGU1ZWY0ZTg3Y2JiN2EyMmJkNWMzYmIx
|
|
14
|
-
YWY5Y2U0NmE3NmJmNGYyYTRhMzdlODk1ODZkN2YzYjJiZTBmMWU5Zjg2MWFh
|
|
15
|
-
NGI3NGQ2NjU3NDBmY2NiYWY0NTAzMWU0ZDM3MjZiZDY5NGI3YTk=
|
|
6
|
+
metadata.gz: 88490f66539ca80f3456abd2331763ff23b01ba62c35b389a446ab0d92d0a2a193478342d1dd27a7ea95af36a1777bb70d39c299d9bb30212ca4b56d180c8194
|
|
7
|
+
data.tar.gz: 9aa6c11cda54ecb915470c0c9a8915f84ad8bcc9c8664e25364dfa90da8dd2cf7a44b10862b222a986f8b8584c4526a49bf38f5162aa581ed3198104ca55963b
|
data/CHANGELOG.md
ADDED
data/conjur.gemspec
CHANGED
|
@@ -26,9 +26,11 @@ Gem::Specification.new do |gem|
|
|
|
26
26
|
|
|
27
27
|
gem.add_runtime_dependency 'cas_rest_client'
|
|
28
28
|
|
|
29
|
-
gem.add_development_dependency 'rspec', '
|
|
29
|
+
gem.add_development_dependency 'rspec', '~> 3.0'
|
|
30
30
|
gem.add_development_dependency 'simplecov'
|
|
31
31
|
gem.add_development_dependency 'aruba'
|
|
32
|
-
gem.add_development_dependency '
|
|
32
|
+
gem.add_development_dependency 'ci_reporter_rspec', '~> 1.0'
|
|
33
|
+
gem.add_development_dependency 'ci_reporter_cucumber'
|
|
33
34
|
gem.add_development_dependency 'rake', '~> 10.0'
|
|
35
|
+
gem.add_development_dependency 'io-grab', '~> 0.0.1'
|
|
34
36
|
end
|
|
@@ -41,6 +41,6 @@ end
|
|
|
41
41
|
|
|
42
42
|
Then(/^the context "(.*?)" should contain "(.*?)" item$/) do |key, key_count|
|
|
43
43
|
step "the context should contain \"#{key}\""
|
|
44
|
-
@runner.context[key].
|
|
44
|
+
expect(@runner.context[key].length).to eq key_count.to_i
|
|
45
45
|
end
|
|
46
46
|
|
data/lib/conjur/command.rb
CHANGED
|
@@ -99,7 +99,24 @@ module Conjur
|
|
|
99
99
|
puts JSON.pretty_generate resources
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
|
+
|
|
103
|
+
def retire_resource obj
|
|
104
|
+
obj.resource.attributes['permissions'].each do |p|
|
|
105
|
+
role = api.role(p['role'])
|
|
106
|
+
privilege = p['privilege']
|
|
107
|
+
next if role.roleid == obj.roleid && privilege == 'read'
|
|
108
|
+
puts "Denying #{privilege} privilege to #{role.roleid}"
|
|
109
|
+
obj.resource.deny(privilege, role)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
102
112
|
|
|
113
|
+
def retire_role obj
|
|
114
|
+
obj.role.members.each do |r|
|
|
115
|
+
member = api.role(r.member)
|
|
116
|
+
puts "Revoking from role #{member.roleid}"
|
|
117
|
+
obj.role.revoke_from member
|
|
118
|
+
end
|
|
119
|
+
end
|
|
103
120
|
|
|
104
121
|
def display_members(members, options)
|
|
105
122
|
result = if options[:V]
|
|
@@ -59,6 +59,24 @@ class Conjur::Command::Groups < Conjur::Command
|
|
|
59
59
|
display(api.group(id), options)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
|
+
|
|
63
|
+
group.desc "Decommission a group"
|
|
64
|
+
group.arg_name "id"
|
|
65
|
+
group.command :retire do |c|
|
|
66
|
+
c.action do |global_options,options,args|
|
|
67
|
+
id = require_arg(args, 'id')
|
|
68
|
+
|
|
69
|
+
group = api.group(id)
|
|
70
|
+
|
|
71
|
+
retire_resource group
|
|
72
|
+
retire_role group
|
|
73
|
+
|
|
74
|
+
puts "Giving ownership to 'attic'"
|
|
75
|
+
group.resource.give_to api.user('attic')
|
|
76
|
+
|
|
77
|
+
puts "Group retired"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
62
80
|
|
|
63
81
|
group.desc "Show and manage group members"
|
|
64
82
|
group.command :members do |members|
|
data/lib/conjur/command/hosts.rb
CHANGED
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
#
|
|
21
21
|
|
|
22
22
|
class Conjur::Command::Hosts < Conjur::Command
|
|
23
|
+
def self.host_layer_roles host
|
|
24
|
+
host.role.all.select{|r| r.kind == "layer"}
|
|
25
|
+
end
|
|
26
|
+
|
|
23
27
|
desc "Manage hosts"
|
|
24
28
|
command :host do |hosts|
|
|
25
29
|
hosts.desc "Create a new host"
|
|
@@ -51,7 +55,28 @@ class Conjur::Command::Hosts < Conjur::Command
|
|
|
51
55
|
end
|
|
52
56
|
end
|
|
53
57
|
|
|
58
|
+
hosts.desc "Decommission a host"
|
|
59
|
+
hosts.arg_name "id"
|
|
60
|
+
hosts.command :retire do |c|
|
|
61
|
+
c.action do |global_options,options,args|
|
|
62
|
+
id = require_arg(args, 'id')
|
|
63
|
+
|
|
64
|
+
host = api.host(id)
|
|
65
|
+
|
|
66
|
+
host_layer_roles(host).each do |layer|
|
|
67
|
+
puts "Removing from layer #{layer.id}"
|
|
68
|
+
api.layer(layer.id).remove_host host
|
|
69
|
+
end
|
|
54
70
|
|
|
71
|
+
retire_resource host
|
|
72
|
+
retire_role host
|
|
73
|
+
|
|
74
|
+
puts "Giving ownership to 'attic'"
|
|
75
|
+
host.resource.give_to api.user('attic')
|
|
76
|
+
|
|
77
|
+
puts "Host retired"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
55
80
|
|
|
56
81
|
hosts.desc "List hosts"
|
|
57
82
|
hosts.command :list do |c|
|
|
@@ -78,7 +103,8 @@ class Conjur::Command::Hosts < Conjur::Command
|
|
|
78
103
|
hosts.command :layers do |c|
|
|
79
104
|
c.action do |global_options, options, args|
|
|
80
105
|
id = require_arg(args, 'id')
|
|
81
|
-
|
|
106
|
+
host = api.host(id)
|
|
107
|
+
display host_layer_roles(host).map(&:identifier), options
|
|
82
108
|
end
|
|
83
109
|
end
|
|
84
110
|
end
|
data/lib/conjur/command/init.rb
CHANGED
|
@@ -3,9 +3,9 @@ shared_context "with fake endpoints and test config" do
|
|
|
3
3
|
let(:authz_host) { 'https://authz.example.com' }
|
|
4
4
|
let(:core_host) { 'https://core.example.com' }
|
|
5
5
|
before do
|
|
6
|
-
Conjur::Authn::API.
|
|
7
|
-
Conjur::Authz::API.
|
|
8
|
-
Conjur::Core::API.
|
|
6
|
+
allow(Conjur::Authn::API).to receive(:host) { authn_host }
|
|
7
|
+
allow(Conjur::Authz::API).to receive(:host) { authz_host }
|
|
8
|
+
allow(Conjur::Core::API).to receive(:host) { core_host }
|
|
9
9
|
|
|
10
10
|
ENV['GLI_DEBUG'] = 'true'
|
|
11
11
|
end
|
|
@@ -17,8 +17,8 @@ shared_context "with mock authn" do
|
|
|
17
17
|
let(:netrc) { Netrc.read(netrcfile.path) }
|
|
18
18
|
let(:account) { 'the-account' }
|
|
19
19
|
before do
|
|
20
|
-
Conjur::Core::API.
|
|
21
|
-
Conjur::Authn.
|
|
20
|
+
allow(Conjur::Core::API).to receive(:conjur_account) { account }
|
|
21
|
+
allow(Conjur::Authn).to receive_messages(netrc: netrc, host: authn_host)
|
|
22
22
|
Conjur::Config.merge 'account' => account
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -29,9 +29,9 @@ shared_context "when logged in", logged_in: true do
|
|
|
29
29
|
let(:api_key) { 'sekrit' }
|
|
30
30
|
let(:api) { Conjur::API.new_from_key(username, api_key) }
|
|
31
31
|
before do
|
|
32
|
-
api.
|
|
32
|
+
allow(api).to receive(:credentials) { {} }
|
|
33
33
|
netrc[authn_host] = [username, api_key]
|
|
34
|
-
Conjur::Command.
|
|
34
|
+
allow(Conjur::Command).to receive_messages api: api
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
require 'rspec'
|
|
3
|
-
require 'stringio'
|
|
1
|
+
require 'io/grab'
|
|
4
2
|
|
|
5
3
|
# Custom matcher to test text written to standard output and standard error
|
|
6
4
|
#
|
|
@@ -12,17 +10,23 @@ require 'stringio'
|
|
|
12
10
|
#
|
|
13
11
|
# @note http://greyblake.com/blog/2012/12/14/custom-expectations-with-rspec/
|
|
14
12
|
RSpec::Matchers.define :write do |message|
|
|
13
|
+
supports_block_expectations
|
|
14
|
+
|
|
15
15
|
chain(:to) do |io|
|
|
16
16
|
@io = io
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
match do |block|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
stream = case io
|
|
21
|
+
when :stdout
|
|
22
|
+
$stdout
|
|
23
|
+
when :stderr
|
|
24
|
+
$stderr
|
|
25
|
+
else
|
|
26
|
+
io
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
@actual = output = stream.grab &block
|
|
26
30
|
|
|
27
31
|
case message
|
|
28
32
|
when Hash then output.include?(JSON.pretty_generate message)
|
|
@@ -37,36 +41,10 @@ RSpec::Matchers.define :write do |message|
|
|
|
37
41
|
%Q[write #{message.inspect} to #{@io}]
|
|
38
42
|
end
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
%Q[expected #{to} #{description} but got #{@buffer.inspect}]
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
failure_message_for_should do
|
|
45
|
-
failure_message 'to'
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
failure_message_for_should_not do
|
|
49
|
-
failure_message 'not to'
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Fake STDERR and return a string written to it.
|
|
53
|
-
def fake_stderr
|
|
54
|
-
original_stderr = $stderr
|
|
55
|
-
$stderr = StringIO.new
|
|
56
|
-
yield
|
|
57
|
-
@buffer = $stderr.string
|
|
58
|
-
ensure
|
|
59
|
-
$stderr = original_stderr
|
|
60
|
-
end
|
|
44
|
+
diffable
|
|
61
45
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
original_stdout = $stdout
|
|
65
|
-
$stdout = StringIO.new
|
|
66
|
-
yield
|
|
67
|
-
@buffer = $stdout.string
|
|
68
|
-
ensure
|
|
69
|
-
$stdout = original_stdout
|
|
46
|
+
failure_message do
|
|
47
|
+
%Q[expected to #{description} but got #{@actual.inspect}]
|
|
70
48
|
end
|
|
71
49
|
|
|
72
50
|
# default IO is standard output
|
data/lib/conjur/command/users.rb
CHANGED
|
@@ -74,6 +74,24 @@ class Conjur::Command::Users < Conjur::Command
|
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
+
user.desc "Decommission a user"
|
|
78
|
+
user.arg_name "id"
|
|
79
|
+
user.command :retire do |c|
|
|
80
|
+
c.action do |global_options,options,args|
|
|
81
|
+
id = require_arg(args, 'id')
|
|
82
|
+
|
|
83
|
+
user = api.user(id)
|
|
84
|
+
|
|
85
|
+
retire_resource user
|
|
86
|
+
retire_role user
|
|
87
|
+
|
|
88
|
+
puts "Giving ownership to 'attic'"
|
|
89
|
+
user.resource.give_to api.user('attic')
|
|
90
|
+
|
|
91
|
+
puts "User retired"
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
77
95
|
user.desc "List users"
|
|
78
96
|
user.command :list do |c|
|
|
79
97
|
command_options_for_list c
|
|
@@ -65,6 +65,23 @@ class Conjur::Command::Variables < Conjur::Command
|
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
var.desc "Decommission a variable"
|
|
69
|
+
var.arg_name "id"
|
|
70
|
+
var.command :retire do |c|
|
|
71
|
+
c.action do |global_options,options,args|
|
|
72
|
+
id = require_arg(args, 'id')
|
|
73
|
+
|
|
74
|
+
variable = api.variable(id)
|
|
75
|
+
|
|
76
|
+
retire_resource variable
|
|
77
|
+
|
|
78
|
+
puts "Giving ownership to 'attic'"
|
|
79
|
+
variable.resource.give_to api.user('attic')
|
|
80
|
+
|
|
81
|
+
puts "Variable retired"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
68
85
|
var.desc "List variables"
|
|
69
86
|
var.command :list do |c|
|
|
70
87
|
command_options_for_list c
|
data/lib/conjur/version.rb
CHANGED
data/spec/authn_spec.rb
CHANGED
|
@@ -5,24 +5,24 @@ describe Conjur::Authn do
|
|
|
5
5
|
describe "credentials from environment" do
|
|
6
6
|
before {
|
|
7
7
|
Conjur::Authn.instance_variable_set("@credentials", nil)
|
|
8
|
-
ENV.
|
|
9
|
-
ENV.
|
|
8
|
+
expect(ENV).to receive(:[]).with("CONJUR_AUTHN_LOGIN").and_return "the-login"
|
|
9
|
+
expect(ENV).to receive(:[]).with("CONJUR_AUTHN_API_KEY").and_return "the-api-key"
|
|
10
10
|
}
|
|
11
11
|
after {
|
|
12
12
|
Conjur::Authn.instance_variable_set("@credentials", nil)
|
|
13
13
|
}
|
|
14
14
|
it "are used to authn" do
|
|
15
|
-
Conjur::Authn.get_credentials.
|
|
15
|
+
expect(Conjur::Authn.get_credentials).to eq([ "the-login", "the-api-key" ])
|
|
16
16
|
end
|
|
17
17
|
it "are not written to netrc" do
|
|
18
|
-
Conjur::Authn.
|
|
18
|
+
allow(Conjur::Authn).to receive(:write_credentials).and_raise "should not write credentials"
|
|
19
19
|
Conjur::Authn.get_credentials
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
describe "netrc" do
|
|
23
23
|
before {
|
|
24
24
|
Conjur::Authn.instance_variable_set("@netrc", nil)
|
|
25
|
-
Conjur::Config.
|
|
25
|
+
expect(Conjur::Config).to receive(:[]).with(:netrc_path).and_return path
|
|
26
26
|
}
|
|
27
27
|
after {
|
|
28
28
|
Conjur::Authn.instance_variable_set("@netrc", nil)
|
|
@@ -30,15 +30,15 @@ describe Conjur::Authn do
|
|
|
30
30
|
context "with specified netrc_path" do
|
|
31
31
|
let(:path) { double("path") }
|
|
32
32
|
it "consults Conjur::Config for netrc_path" do
|
|
33
|
-
Netrc.
|
|
34
|
-
Conjur::Authn.netrc.
|
|
33
|
+
expect(Netrc).to receive(:read).with(path).and_return netrc = double("netrc")
|
|
34
|
+
expect(Conjur::Authn.netrc).to eq(netrc)
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
context "without specified netrc_path" do
|
|
38
38
|
let(:path) { nil }
|
|
39
39
|
it "uses default netrc path" do
|
|
40
|
-
Netrc.
|
|
41
|
-
Conjur::Authn.netrc.
|
|
40
|
+
expect(Netrc).to receive(:read).with(no_args).and_return netrc = double("netrc")
|
|
41
|
+
expect(Conjur::Authn.netrc).to eq(netrc)
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
end
|
data/spec/command/assets_spec.rb
CHANGED
|
@@ -4,55 +4,55 @@ describe Conjur::Command::Assets, logged_in: true do
|
|
|
4
4
|
|
|
5
5
|
let(:asset) { double(attributes: asset_attributes ) }
|
|
6
6
|
let(:asset_attributes) { {"some"=>"attributes" } }
|
|
7
|
-
before(:each) { api.
|
|
7
|
+
before(:each) { allow(api).to receive(KIND.to_sym).and_return(asset) }
|
|
8
8
|
def invoke_silently
|
|
9
9
|
expect { invoke }.to write
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
context "asset:create" do
|
|
13
13
|
before(:each) {
|
|
14
|
-
api.
|
|
15
|
-
api.
|
|
14
|
+
allow(api).to receive(:method).with("create_#{KIND}").and_return(double(arity:1))
|
|
15
|
+
allow(api).to receive("create_#{KIND}".to_sym).and_return(asset)
|
|
16
16
|
}
|
|
17
17
|
describe_command "asset:create #{KIND}:#{ID}" do
|
|
18
18
|
it "calls api.create_#{KIND}(id:#{ID})" do
|
|
19
|
-
api.
|
|
19
|
+
expect(api).to receive("create_#{KIND}".to_sym).with(id: ID)
|
|
20
20
|
invoke_silently
|
|
21
21
|
end
|
|
22
22
|
it "writes JSONised attributes to stdout" do
|
|
23
|
-
JSON.parse( expect { invoke }.to write ).
|
|
23
|
+
expect(JSON.parse( expect { invoke }.to write )).to eq(asset_attributes)
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
describe_command "asset:create #{KIND}" do
|
|
27
27
|
it "calls api.create_#{KIND}({})" do
|
|
28
|
-
api.
|
|
28
|
+
expect(api).to receive("create_#{KIND}".to_sym).with({})
|
|
29
29
|
invoke_silently
|
|
30
30
|
end
|
|
31
31
|
it "writes JSONised attributes to stdout" do
|
|
32
|
-
JSON.parse( expect { invoke }.to write ).
|
|
32
|
+
expect(JSON.parse( expect { invoke }.to write )).to eq(asset_attributes)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
describe_command "asset:show #{KIND}:#{ID}" do
|
|
38
38
|
it "obtains asset instance as api.#{KIND}(#{ID})" do
|
|
39
|
-
api.
|
|
39
|
+
expect(api).to receive(KIND.to_sym).with(ID)
|
|
40
40
|
invoke_silently
|
|
41
41
|
end
|
|
42
42
|
it "writes JSONised attributes to stdout" do
|
|
43
|
-
JSON.parse( expect { invoke }.to write ).
|
|
43
|
+
expect(JSON.parse( expect { invoke }.to write )).to eq(asset_attributes)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
describe_command "asset:exists #{KIND}:#{ID}" do
|
|
48
48
|
let(:exists_response) { "exists? response" }
|
|
49
|
-
before(:each) { asset.
|
|
49
|
+
before(:each) { allow(asset).to receive(:exists?).and_return(exists_response) }
|
|
50
50
|
it "obtains asset instance as api.#{KIND}(#{ID})" do
|
|
51
|
-
api.
|
|
51
|
+
expect(api).to receive(KIND.to_sym).with(ID)
|
|
52
52
|
invoke_silently
|
|
53
53
|
end
|
|
54
54
|
it "calls asset.exists?" do
|
|
55
|
-
asset.
|
|
55
|
+
expect(asset).to receive(:exists?)
|
|
56
56
|
invoke_silently
|
|
57
57
|
end
|
|
58
58
|
it "writes response to stdout" do
|
|
@@ -67,10 +67,10 @@ describe Conjur::Command::Assets, logged_in: true do
|
|
|
67
67
|
double(attributes: { "id" => x } )
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
before(:each) { api.
|
|
70
|
+
before(:each) { allow(api).to receive("#{KIND}s".to_sym).and_return(assets_list) }
|
|
71
71
|
|
|
72
72
|
it "calls api.#{KIND}s" do
|
|
73
|
-
api.
|
|
73
|
+
expect(api).to receive("#{KIND}s".to_sym)
|
|
74
74
|
invoke_silently
|
|
75
75
|
end
|
|
76
76
|
it "for each asset from response displays it's attributes" do
|
|
@@ -83,16 +83,16 @@ describe Conjur::Command::Assets, logged_in: true do
|
|
|
83
83
|
|
|
84
84
|
shared_examples 'it obtains asset by kind and id' do
|
|
85
85
|
it "obtains asset instance as api.#{KIND}(#{ID})" do
|
|
86
|
-
api.
|
|
86
|
+
expect(api).to receive(KIND.to_sym).with(ID)
|
|
87
87
|
invoke_silently
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
shared_context "asset instance" do
|
|
92
92
|
before(:each) {
|
|
93
|
-
api.
|
|
94
|
-
asset.
|
|
95
|
-
asset.
|
|
93
|
+
allow(api).to receive(KIND.to_sym).and_return(asset)
|
|
94
|
+
allow(asset).to receive(:add_member)
|
|
95
|
+
allow(asset).to receive(:remove_member)
|
|
96
96
|
}
|
|
97
97
|
end
|
|
98
98
|
|
|
@@ -100,7 +100,7 @@ describe Conjur::Command::Assets, logged_in: true do
|
|
|
100
100
|
include_context "asset instance"
|
|
101
101
|
it_behaves_like "it obtains asset by kind and id"
|
|
102
102
|
it 'calls role.grant_to(member,...)' do
|
|
103
|
-
asset.
|
|
103
|
+
expect(asset).to receive(:add_member).with(ROLE, MEMBER, anything)
|
|
104
104
|
invoke_silently
|
|
105
105
|
end
|
|
106
106
|
it { expect { invoke }.to write "Membership granted" }
|
|
@@ -110,7 +110,7 @@ describe Conjur::Command::Assets, logged_in: true do
|
|
|
110
110
|
include_context "asset instance"
|
|
111
111
|
it_behaves_like "it obtains asset by kind and id"
|
|
112
112
|
it 'calls role.revoke_from(member)' do
|
|
113
|
-
asset.
|
|
113
|
+
expect(asset).to receive(:remove_member).with(ROLE, MEMBER)
|
|
114
114
|
invoke_silently
|
|
115
115
|
end
|
|
116
116
|
it { expect { invoke }.to write "Membership revoked" }
|