conjur-cli 2.6.0 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
File without changes
@@ -2,22 +2,144 @@ require 'spec_helper'
2
2
 
3
3
  describe Conjur::Command::Resources, logged_in: true do
4
4
 
5
- describe_command "resource:check food bacon fry" do
5
+ let (:full_resource_id) { [account, KIND, ID].join(":") }
6
+ let (:resource_instance) { double(attributes: resource_attributes) }
7
+ let (:resource_attributes) { { "some" => "attribute"} }
8
+
9
+ before :each do
10
+ api.stub(:resource).with(full_resource_id).and_return(resource_instance)
11
+ end
12
+
13
+ def invoke_silently
14
+ expect { invoke }.to write
15
+ end
16
+
17
+ shared_examples 'it displays resource attributes' do
18
+ it "as JSON to stdout" do
19
+ JSON::parse( expect { invoke }.to write ).should == resource_attributes
20
+ end
21
+ end
22
+
23
+ shared_examples "it obtains resource by id" do
24
+ it 'id is built from kind and id' do
25
+ api.should_receive(:resource).with(%r{^[^:]*:#{KIND}:#{ID}$})
26
+ invoke_silently
27
+ end
28
+ it 'uses default account as a prefix' do
29
+ api.should_receive(:resource).with(%r{^#{account}:})
30
+ invoke_silently
31
+ end
32
+ end
33
+
34
+ describe_command "resource:create #{KIND}:#{ID}" do
35
+ before :each do
36
+ resource_instance.stub(:create)
37
+ end
38
+ it "calls resource.create()" do
39
+ resource_instance.should_receive(:create)
40
+ invoke_silently
41
+ end
42
+ it_behaves_like "it obtains resource by id"
43
+ it_behaves_like "it displays resource attributes"
44
+ end
45
+
46
+ describe_command "resource:show #{KIND}:#{ID}" do
47
+ it_behaves_like "it obtains resource by id"
48
+ it_behaves_like "it displays resource attributes"
49
+ end
50
+
51
+ describe_command "resource:exists #{KIND}:#{ID}" do
52
+ before (:each) {
53
+ resource_instance.stub(:exists?).and_return("true")
54
+ }
55
+ it_behaves_like "it obtains resource by id"
56
+ it 'calls resource.exists?' do
57
+ resource_instance.should_receive(:exists?)
58
+ invoke_silently
59
+ end
60
+ context 'displays response of resource.exists? (true/false)' do
61
+ # NOTE: a bit redundant, but will be helpful in 'documentation' context
62
+ it 'true' do
63
+ resource_instance.stub(:exists?).and_return("true")
64
+ expect { invoke }.to write "true"
65
+ end
66
+ it 'false' do
67
+ resource_instance.stub(:exists?).and_return("false")
68
+ expect { invoke }.to write "false"
69
+ end
70
+ end
71
+ end
72
+
73
+ describe_command "resource:permit #{KIND}:#{ID} #{ROLE} #{PRIVILEGE}" do
74
+ before(:each) { resource_instance.stub(:permit).and_return(true) }
75
+ it_behaves_like "it obtains resource by id"
76
+ it "calls resource.permit(#{PRIVILEGE}, #{ROLE})" do
77
+ resource_instance.should_receive(:permit).with(PRIVILEGE, ROLE)
78
+ invoke_silently
79
+ end
80
+ it { expect { invoke }.to write "Permission granted" }
81
+ end
82
+
83
+ describe_command "resource:deny #{KIND}:#{ID} #{ROLE} #{PRIVILEGE}" do
84
+ before(:each) { resource_instance.stub(:deny).and_return(true) }
85
+ it_behaves_like "it obtains resource by id"
86
+ it "calls resource.deny(#{PRIVILEGE},#{ROLE})" do
87
+ resource_instance.should_receive(:deny).with(PRIVILEGE, ROLE)
88
+ invoke_silently
89
+ end
90
+ it { expect { invoke }.to write "Permission revoked" }
91
+ end
92
+
93
+ describe_command "resource:check #{KIND}:#{ID} #{PRIVILEGE}" do
6
94
  it "performs a permission check for the logged-in user" do
7
- api.should_receive(:resource).with("the-account:food:bacon").and_return bacon = double("the-account:food:bacon")
8
- bacon.should_receive(:permitted?).with("fry")
95
+ api.should_receive(:resource).with("the-account:#{KIND}:#{ID}").and_return bacon = double("the-account:#{KIND}:#{ID}")
96
+ bacon.should_receive(:permitted?).with(PRIVILEGE)
9
97
 
10
98
  invoke
11
99
  end
12
100
  end
13
-
14
- describe_command "resource:check -r test:the-role food bacon fry" do
15
- it "performs a permission check for a specified role" do
16
- api.should_receive(:role).with("test:the-role").and_return role = double("the-account:test:the-role")
17
101
 
18
- role.should_receive(:permitted?).with("food", "bacon", "fry")
19
-
20
- invoke
102
+ describe_command "resource:check -r #{ROLE} #{KIND}:#{ID} #{PRIVILEGE}" do
103
+ let (:role_instance) { double() }
104
+ let (:role_response) { "role response: true|false" }
105
+ let (:account) { ACCOUNT }
106
+ before(:each) {
107
+ api.stub(:role).and_return(role_instance)
108
+ role_instance.stub(:permitted?).and_return(role_response)
109
+ }
110
+ it 'obtains role object by id' do
111
+ api.should_receive(:role).with(ROLE)
112
+ invoke_silently
113
+ end
114
+ it "calls role.permitted?('#{ACCOUNT}:#{KIND}:#{ID}', #{PRIVILEGE})" do
115
+ role_instance.should_receive(:permitted?).with([ACCOUNT,KIND,ID].join(":"),PRIVILEGE)
116
+ invoke_silently
117
+ end
118
+ it { expect { invoke }.to write role_response }
119
+ end
120
+
121
+ describe_command "resource:give #{KIND}:#{ID} #{OWNER}" do
122
+ before(:each) { resource_instance.stub(:give_to).and_return(true) }
123
+ it_behaves_like "it obtains resource by id"
124
+ it "calls resource.give_to(#{OWNER})" do
125
+ resource_instance.should_receive(:give_to).with(OWNER)
126
+ invoke_silently
127
+ end
128
+ it { expect { invoke }.to write "Ownership granted" }
129
+ end
130
+
131
+ describe_command "resource:permitted_roles #{KIND}:#{ID} #{PRIVILEGE}" do
132
+ let(:roles_list) { %W[klaatu barada nikto] }
133
+ before(:each) {
134
+ resource_instance.stub(:permitted_roles).and_return(roles_list)
135
+ }
136
+ it_behaves_like "it obtains resource by id"
137
+ it "calls resource.permitted_roles(#{PRIVILEGE}" do
138
+ resource_instance.should_receive(:permitted_roles)
139
+ invoke_silently
140
+ end
141
+ it "displays JSONised list of roles" do
142
+ JSON.parse( expect { invoke }.to write ).should == roles_list
21
143
  end
22
144
  end
23
- end
145
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Conjur::Command::Users, logged_in: true do
4
+ let(:update_password_url) { "https://authn.example.com/users/password" }
5
+
6
+ context "updating password" do
7
+ before do
8
+ RestClient::Request.should_receive(:execute).with(
9
+ method: :put,
10
+ url: update_password_url,
11
+ user: username,
12
+ password: api_key,
13
+ headers: { },
14
+ payload: "new-password"
15
+ )
16
+ end
17
+
18
+ describe_command "user:update_password -p new-password" do
19
+ it "PUTs the new password" do
20
+ invoke
21
+ end
22
+ end
23
+
24
+ describe_command "user:update_password" do
25
+ it "PUTs the new password" do
26
+ Conjur::Command::Users.should_receive(:prompt_for_password).and_return "new-password"
27
+
28
+ invoke
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Conjur::Command do
4
+ describe "provides id conversion functions as a class methods" do
5
+ describe "#full_resource_id(id)" do
6
+ describe "injects account into brief ids" do
7
+ context "long id (3+ tokens)" do
8
+ it "returns id as is" do
9
+ described_class.full_resource_id("a:b:c").should == "a:b:c"
10
+ end
11
+ end
12
+ context "brief id(2 tokens)" do
13
+ before(:each) { described_class.stub(:conjur_account).and_return("current/acc") }
14
+ it "injects current account as a prefix" do
15
+ described_class.full_resource_id("a:b").should == "current/acc:a:b"
16
+ end
17
+ end
18
+ context "malformed id (no separators)" do
19
+ it "breaks" do
20
+ expect { described_class.full_resource_id("a") }.to raise_error
21
+ expect { described_class.full_resource_id("nil") }.to raise_error
22
+ end
23
+ end
24
+ end
25
+ end
26
+ describe "#get_kind_and_id_from_args(args, [argname])" do
27
+ describe "extracts (kind, subid) from id" do
28
+ def subject *args
29
+ described_class.get_kind_and_id_from_args(args)
30
+ end
31
+ context "for brief ids(2 tokens)" do
32
+ it "token#1=> kind (dashes replaced with undescrores), token#2=>id" do
33
+ subject("the-kind:the-id").should == ['the_kind','the-id']
34
+ end
35
+ end
36
+ context "for long ids(3+ tokens)" do
37
+ it "token #1=> ignored" do
38
+ subject("a:b:c:d").should_not include('a')
39
+ end
40
+ it "token #2=> kind (dashes replaced with underscores)" do
41
+ subject("a:the-kind:c:d")[0].should == "the_kind"
42
+ end
43
+ it "extracts remaining part (starting from 3rd token) as an id" do
44
+ subject("a:b:c-token:d-token")[1].should == "c-token:d-token"
45
+ end
46
+ end
47
+ context "for too short input" do
48
+ it "breaks" do
49
+ expect { subject("a") }.to raise_error
50
+ end
51
+ end
52
+ context "for empty parameters" do
53
+ it "breaks" do
54
+ expect { subject() }.to raise_error
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
data/spec/spec_helper.rb CHANGED
@@ -70,6 +70,16 @@ def post_response(id, attributes = {})
70
70
  })
71
71
  end
72
72
 
73
+ # stub parameters to be used in resource/asset tests
74
+ KIND="asset_kind"
75
+ ID="unique_id"
76
+ ROLE='<role>'
77
+ MEMBER='<member>'
78
+ PRIVILEGE='<privilege>'
79
+ OWNER='<owner/userid>'
80
+ ACCOUNT='<core_account>'
81
+
82
+
73
83
  require 'write_expectation'
74
84
 
75
85
  require 'conjur/cli'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conjur-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 4.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,24 +10,24 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-08-28 00:00:00.000000000 Z
13
+ date: 2013-10-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: conjur-api
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - ~>
20
+ - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
- version: '2.4'
22
+ version: '4.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
28
- - - ~>
28
+ - - ! '>='
29
29
  - !ruby/object:Gem::Version
30
- version: '2.4'
30
+ version: '4.0'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: gli
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -215,6 +215,7 @@ files:
215
215
  - lib/conjur/cli.rb
216
216
  - lib/conjur/command.rb
217
217
  - lib/conjur/command/assets.rb
218
+ - lib/conjur/command/audit.rb
218
219
  - lib/conjur/command/authn.rb
219
220
  - lib/conjur/command/field.rb
220
221
  - lib/conjur/command/groups.rb
@@ -227,12 +228,16 @@ files:
227
228
  - lib/conjur/command/variables.rb
228
229
  - lib/conjur/config.rb
229
230
  - lib/conjur/version.rb
231
+ - spec/command/assets_spec.rb
232
+ - spec/command/audit_spec.rb
230
233
  - spec/command/authn_spec.rb
231
234
  - spec/command/groups_spec.rb
232
235
  - spec/command/hosts_spec.rb
233
236
  - spec/command/resources_spec.rb
234
237
  - spec/command/roles_spec.rb
238
+ - spec/command/users_spec.rb
235
239
  - spec/command/variables_spec.rb
240
+ - spec/command_spec.rb
236
241
  - spec/spec_helper.rb
237
242
  - spec/write_expectation.rb
238
243
  homepage: https://github.com/inscitiv/cli-ruby
@@ -250,7 +255,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
250
255
  version: '0'
251
256
  segments:
252
257
  - 0
253
- hash: -4082547880357174583
258
+ hash: -1756527085096003511
254
259
  required_rubygems_version: !ruby/object:Gem::Requirement
255
260
  none: false
256
261
  requirements:
@@ -259,7 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
264
  version: '0'
260
265
  segments:
261
266
  - 0
262
- hash: -4082547880357174583
267
+ hash: -1756527085096003511
263
268
  requirements: []
264
269
  rubyforge_project:
265
270
  rubygems_version: 1.8.25
@@ -269,11 +274,15 @@ summary: Conjur command line interface
269
274
  test_files:
270
275
  - features/jsonfield.feature
271
276
  - features/support/env.rb
277
+ - spec/command/assets_spec.rb
278
+ - spec/command/audit_spec.rb
272
279
  - spec/command/authn_spec.rb
273
280
  - spec/command/groups_spec.rb
274
281
  - spec/command/hosts_spec.rb
275
282
  - spec/command/resources_spec.rb
276
283
  - spec/command/roles_spec.rb
284
+ - spec/command/users_spec.rb
277
285
  - spec/command/variables_spec.rb
286
+ - spec/command_spec.rb
278
287
  - spec/spec_helper.rb
279
288
  - spec/write_expectation.rb