beaker-puppet 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f99b5ea3158b18360735f58958b7994df0bc002e
4
- data.tar.gz: 74049c9e805053122780a57be393f51bf53e2fe5
3
+ metadata.gz: 58336da53f9d99a2cf8cfdc1953cf93fcc44caae
4
+ data.tar.gz: 3475c0bda9886d60d226935501df00a66b152860
5
5
  SHA512:
6
- metadata.gz: c065c58d81584d892e58fab12abc9fabd69d7487351417575d76e5e54230b1c4b4dd26ab01faa41c36ca4b99f41819b85dd27696d055de56db60ef5377817f1d
7
- data.tar.gz: 83c38cb1256117144fa55f972c35d4a757f06864bf408e7593bfa5ec0e87ba2e7e18bdae614a6aaa0f91d72aebdb30cb45ce9b9ca7197797b2af21d05cd6ad7c
6
+ metadata.gz: a5f343170c441d786f464f810b2f80c571a563de4e5e837a317afbae71fce33cb0196478b3735daa58d68341c2affb7f7f46d20788fccd15d8cfc2568e03ce12
7
+ data.tar.gz: 947b6b1cf35306b1ed9640ae3595713d2970ae1c25db77fe5aa6332b0a2e1e3d4321469c3cef3a7caac5e80944110d2bc51dc78a3ed3b7b3422b9263415ced64
@@ -0,0 +1,47 @@
1
+ test_name "dsl::helpers::host_helpers #create_tmpdir_on" do
2
+ step "#create_tmpdir_on returns a temporary directory on the remote system" do
3
+ tmpdir = create_tmpdir_on default
4
+ assert_match %r{/}, tmpdir
5
+ assert_equal 0, on(default, "touch #{tmpdir}/testfile").exit_code
6
+ end
7
+
8
+ step "#create_tmpdir_on uses the specified path prefix when provided" do
9
+ tmpdir = create_tmpdir_on(default, "mypathprefix")
10
+ assert_match %r{/mypathprefix}, tmpdir
11
+ assert_equal 0, on(default, "touch #{tmpdir}/testfile").exit_code
12
+ end
13
+
14
+ step "#create_tmpdir_on fails if a non-existent user is specified" do
15
+ assert_raises Beaker::Host::CommandFailure do
16
+ tmpdir = create_tmpdir_on default, '', 'fakeuser'
17
+ end
18
+ end
19
+
20
+ step "#create_tmpdir_on sets the user if specified" do
21
+ default.user_present('tmpdirtestuser')
22
+ tmpdir = create_tmpdir_on(default, nil, 'tmpdirtestuser', nil)
23
+ assert_match /tmpdirtestuser/, on(default, "ls -ld #{tmpdir}").output
24
+ default.user_absent('tmpdirtestuser')
25
+ end
26
+
27
+ step "#create_tmpdir_on fails if a non-existent group is specified" do
28
+ assert_raises Beaker::Host::CommandFailure do
29
+ tmpdir = create_tmpdir_on default, '', nil, 'fakegroup'
30
+ end
31
+ end
32
+
33
+ step "#create_tmpdir_on sets the group if specified" do
34
+ default.group_present('tmpdirtestgroup')
35
+ tmpdir = create_tmpdir_on(default, nil, nil, 'tmpdirtestgroup')
36
+ assert_match /testgroup/, on(default, "ls -ld #{tmpdir}").output
37
+ default.group_absent('tmpdirtestgroup')
38
+ end
39
+
40
+ step "#create_tmpdir_on operates on all hosts if given a hosts array" do
41
+ tmpdirs = create_tmpdir_on hosts
42
+ hosts.zip(tmpdirs).each do |(host, tmpdir)|
43
+ assert_match %r{/}, tmpdir
44
+ assert_equal 0, on(host, "touch #{tmpdir}/testfile").exit_code
45
+ end
46
+ end
47
+ end
@@ -865,6 +865,55 @@ module Beaker
865
865
  sign_certificate_for(default)
866
866
  end
867
867
 
868
+ # Create a temp directory on remote host, optionally owned by specified user and group.
869
+ #
870
+ # @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon,
871
+ # or a role (String or Symbol) that identifies one or more hosts.
872
+ # @param [String] path_prefix A remote path prefix for the new temp directory.
873
+ # @param [String] user The name of user that should own the temp directory. If
874
+ # not specified, uses default permissions from tmpdir creation.
875
+ # @param [String] group The name of group that should own the temp directory.
876
+ # If not specified, uses default permissions from tmpdir creation.
877
+ #
878
+ # @return [String, Array<String>] Returns the name of the newly-created dir, or
879
+ # an array of names of newly-created dirs per-host
880
+ #
881
+ # @note While tempting, this method should not be "optimized" to coalesce calls to
882
+ # chown user:group when both options are passed, as doing so will muddy the spec.
883
+ def create_tmpdir_on(hosts, path_prefix = '', user = nil, group = nil)
884
+ block_on hosts do | host |
885
+ # create the directory
886
+ dir = host.tmpdir(path_prefix)
887
+ # only chown if explicitly passed; don't make assumptions about perms
888
+ # only `chown user` for cleaner codepaths
889
+ if user
890
+ # ensure user exists
891
+ if not host.user_get(user).success?
892
+ # clean up
893
+ host.rm_rf("#{dir}")
894
+ raise "User #{user} does not exist on #{host}."
895
+ end
896
+ # chown only user
897
+ host.chown(user, dir)
898
+ # on host, "chown #{user} #{dir}"
899
+ end
900
+ # only chgrp if explicitly passed; don't make assumptions about perms
901
+ if group
902
+ # ensure group exists
903
+ if not host.group_get(group).success?
904
+ # clean up
905
+ # on host, "rmdir #{dir}"
906
+ host.rm_rf(dir)
907
+ raise "Group #{group} does not exist on #{host}."
908
+ end
909
+ # chgrp
910
+ # on host, "chgrp #{group} #{dir}"
911
+ host.chgrp(group, dir)
912
+ end
913
+ dir
914
+ end
915
+ end
916
+
868
917
  # Create a temp directory on remote host with a user. Default user
869
918
  # is puppet master user.
870
919
  #
@@ -1,3 +1,3 @@
1
1
  module BeakerPuppet
2
- VERSION = '0.16.0'
2
+ VERSION = '0.17.0'
3
3
  end
@@ -29,6 +29,98 @@ describe ClassMixedWithDSLHelpers do
29
29
  let( :db ) { make_host( 'db', :roles => %w( database agent ) ) }
30
30
  let( :hosts ) { [ master, agent, dash, db, custom ] }
31
31
 
32
+ describe '#create_tmpdir_on' do
33
+ let(:host) { {'user' => 'puppet', 'group' => 'muppets'} }
34
+ let(:result_success) { double.as_null_object }
35
+ let(:result_failure) { double.as_null_object }
36
+ let(:tmpdir) { '/tmp/beaker.XXXXXX/' }
37
+
38
+ before :each do
39
+ allow( host ).to receive( :tmpdir ).and_return( tmpdir )
40
+ allow( host ).to receive( :result ).and_return( result_success )
41
+ allow( result_success ).to receive( :success? ).and_return( true )
42
+ allow( result_success ).to receive( :stdout ).and_return( 'puppet' )
43
+ allow( result_failure ).to receive( :success? ).and_return( false )
44
+ end
45
+
46
+ context 'with the path_prefix argument' do
47
+ it 'passes path_prefix to host.tmpdir' do
48
+ expect( host ).to receive( :tmpdir ).with( 'beaker' )
49
+ subject.create_tmpdir_on( host, 'beaker' )
50
+ end
51
+ end
52
+
53
+ context 'with the user argument' do
54
+ it 'calls chown when a user is specified' do
55
+ expect( host ).to receive( :user_get ).and_return( result_success )
56
+ expect( host ).to receive( :chown ).with( host['user'], tmpdir )
57
+
58
+ subject.create_tmpdir_on( host, 'beaker', host['user'] )
59
+ end
60
+
61
+ it 'does not call chown when a user is not specified' do
62
+ expect( host ).to_not receive( :chown )
63
+
64
+ subject.create_tmpdir_on( host, 'beaker' )
65
+ end
66
+
67
+ it 'does not call chown and cleans up when the user does not exist on the host' do
68
+ expect( host ).to receive( :user_get ).and_return( result_failure )
69
+ expect( host ).to receive( :rm_rf ).with( tmpdir )
70
+
71
+ expect{
72
+ subject.create_tmpdir_on( host, 'beaker', 'invalid.user' )
73
+ }.to raise_error( RuntimeError, /User invalid.user does not exist on / )
74
+ end
75
+ end
76
+
77
+ context 'with the group argument' do
78
+ it 'calls chgrp when a group is specified' do
79
+ expect( host ).to receive( :group_get ).and_return( result_success )
80
+ expect( host ).to receive( :chgrp ).with( host['group'], tmpdir )
81
+
82
+ subject.create_tmpdir_on( host, 'beaker', nil, host['group'] )
83
+ end
84
+
85
+ it 'does not call chgrp when a group is not specified' do
86
+ expect( subject ).to_not receive( :chgrp )
87
+
88
+ subject.create_tmpdir_on( host, 'beaker' )
89
+ end
90
+
91
+ it 'does not call chgrp and cleans up when the group does not exist on the host' do
92
+ expect( host ).to receive( :group_get ).and_return( result_failure )
93
+ expect( host ).to receive( :rm_rf ).with( tmpdir )
94
+
95
+ expect{
96
+ subject.create_tmpdir_on( host, 'beaker', nil, 'invalid.group' )
97
+ }.to raise_error( RuntimeError, /Group invalid.group does not exist on / )
98
+ end
99
+ end
100
+
101
+ context 'with user and group arguments' do
102
+ # don't coalesce the group into chown, i.e. `chown user:group`
103
+ # this keeps execution paths simple, clean, and discrete
104
+ it 'calls chown and chgrp separately' do
105
+ expect( host ).to receive( :user_get ).and_return( result_success )
106
+ expect( host ).to receive( :group_get ).and_return( result_success )
107
+ expect( host ).to receive( :chown ).with( host['user'], tmpdir )
108
+ expect( host ).to receive( :chgrp ).with( host['group'], tmpdir )
109
+
110
+ subject.create_tmpdir_on( host, 'beaker', host['user'], host['group'] )
111
+ end
112
+
113
+ it 'does not pass group to chown' do
114
+ allow( host ).to receive( :user_get ).and_return( result_success )
115
+ allow( host ).to receive( :chgrp ).with( host['group'], tmpdir )
116
+
117
+ expect( host ).to receive( :group_get ).and_return( result_success )
118
+ expect( host ).to receive( :chown ).with( host['user'], tmpdir )
119
+
120
+ subject.create_tmpdir_on( host, 'beaker', host['user'], host['group'] )
121
+ end
122
+ end
123
+ end
32
124
 
33
125
  describe '#create_tmpdir_for_user' do
34
126
  let(:host) { {} }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker-puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-05 00:00:00.000000000 Z
11
+ date: 2018-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -210,6 +210,7 @@ files:
210
210
  - acceptance/pre_suite/pkg/install.rb
211
211
  - acceptance/tests/README.md
212
212
  - acceptance/tests/backwards_compatible.rb
213
+ - acceptance/tests/create_tmpdir_on_test.rb
213
214
  - acceptance/tests/install_smoke_test.rb
214
215
  - acceptance/tests/stub_host.rb
215
216
  - acceptance/tests/web_helpers_test.rb