mcollective-client 2.2.4 → 2.4.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.

Potentially problematic release.


This version of mcollective-client might be problematic. Click here for more details.

Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mcollective/application.rb +25 -34
  3. data/lib/mcollective/client.rb +91 -33
  4. data/lib/mcollective/config.rb +42 -43
  5. data/lib/mcollective/data/base.rb +1 -1
  6. data/lib/mcollective/data/result.rb +6 -2
  7. data/lib/mcollective/ddl/agentddl.rb +28 -1
  8. data/lib/mcollective/ddl/base.rb +8 -6
  9. data/lib/mcollective/log.rb +11 -3
  10. data/lib/mcollective/logger/file_logger.rb +4 -4
  11. data/lib/mcollective/matcher.rb +9 -1
  12. data/lib/mcollective/message.rb +14 -23
  13. data/lib/mcollective/optionparser.rb +9 -1
  14. data/lib/mcollective/pluginpackager.rb +24 -3
  15. data/lib/mcollective/pluginpackager/agent_definition.rb +12 -12
  16. data/lib/mcollective/pluginpackager/standard_definition.rb +12 -12
  17. data/lib/mcollective/rpc/agent.rb +15 -12
  18. data/lib/mcollective/rpc/client.rb +67 -31
  19. data/lib/mcollective/rpc/helpers.rb +7 -1
  20. data/lib/mcollective/rpc/reply.rb +3 -1
  21. data/lib/mcollective/shell.rb +45 -8
  22. data/lib/mcollective/util.rb +37 -1
  23. data/lib/mcollective/windows_daemon.rb +14 -3
  24. data/spec/spec_helper.rb +2 -0
  25. data/spec/unit/application_spec.rb +45 -26
  26. data/spec/unit/cache_spec.rb +3 -3
  27. data/spec/unit/client_spec.rb +269 -24
  28. data/spec/unit/config_spec.rb +89 -26
  29. data/spec/unit/data/base_spec.rb +1 -0
  30. data/spec/unit/data/result_spec.rb +19 -1
  31. data/spec/unit/data_spec.rb +3 -0
  32. data/spec/unit/ddl/agentddl_spec.rb +32 -0
  33. data/spec/unit/ddl/base_spec.rb +4 -0
  34. data/spec/unit/ddl/dataddl_spec.rb +1 -1
  35. data/spec/unit/log_spec.rb +44 -27
  36. data/spec/unit/logger/base_spec.rb +1 -1
  37. data/spec/unit/matcher_spec.rb +14 -0
  38. data/spec/unit/message_spec.rb +24 -0
  39. data/spec/unit/optionparser_spec.rb +99 -0
  40. data/spec/unit/pluginpackager/agent_definition_spec.rb +48 -17
  41. data/spec/unit/pluginpackager/standard_definition_spec.rb +44 -20
  42. data/spec/unit/pluginpackager_spec.rb +31 -7
  43. data/spec/unit/plugins/mcollective/agent/rpcutil_spec.rb +176 -0
  44. data/spec/unit/plugins/mcollective/application/plugin_spec.rb +81 -0
  45. data/spec/unit/plugins/mcollective/audit/logfile_spec.rb +44 -0
  46. data/spec/unit/plugins/mcollective/connector/activemq_spec.rb +118 -27
  47. data/spec/unit/plugins/mcollective/connector/rabbitmq_spec.rb +168 -34
  48. data/spec/unit/plugins/mcollective/data/agent_data_spec.rb +1 -0
  49. data/spec/unit/plugins/mcollective/data/fstat_data_spec.rb +1 -0
  50. data/spec/unit/plugins/mcollective/discovery/flatfile_spec.rb +10 -0
  51. data/spec/unit/plugins/mcollective/discovery/stdin_spec.rb +65 -0
  52. data/spec/unit/plugins/mcollective/facts/yaml_facts_spec.rb +65 -0
  53. data/spec/unit/plugins/mcollective/packagers/debpackage_packager_spec.rb +240 -219
  54. data/spec/unit/plugins/mcollective/packagers/modulepackage_packager_spec.rb +209 -0
  55. data/spec/unit/plugins/mcollective/packagers/rpmpackage_packager_spec.rb +223 -109
  56. data/spec/unit/rpc/actionrunner_spec.rb +2 -1
  57. data/spec/unit/rpc/agent_spec.rb +130 -1
  58. data/spec/unit/rpc/client_spec.rb +169 -3
  59. data/spec/unit/security/base_spec.rb +0 -1
  60. data/spec/unit/shell_spec.rb +76 -3
  61. data/spec/unit/util_spec.rb +69 -1
  62. data/spec/unit/windows_daemon_spec.rb +30 -9
  63. metadata +104 -90
  64. data/spec/unit/plugins/mcollective/connector/stomp/eventlogger_spec.rb +0 -34
  65. data/spec/unit/plugins/mcollective/connector/stomp_spec.rb +0 -424
  66. data/spec/unit/plugins/mcollective/validator/any_validator_spec.rb +0 -15
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/env rspec
2
+ require 'spec_helper'
3
+ require File.dirname(__FILE__) + '/../../../../../plugins/mcollective/pluginpackager/modulepackage_packager.rb'
4
+
5
+ module MCollective
6
+ module PluginPackager
7
+ describe ModulepackagePackager, :unless => MCollective::Util.windows? do
8
+ let(:data) do
9
+ {:agent => {:files => ['./agent/rspec.rb']},
10
+ :common => {:files => ['./agent/rspec.ddl']},
11
+ :client => {:files => ['./application/rspec.rb']}}
12
+ end
13
+
14
+ let(:plugin) do
15
+ p = mock
16
+ p.stubs(:mcname).returns('mcollective')
17
+ p.stubs(:metadata).returns({
18
+ :version => '1.0',
19
+ :name => 'rspec',
20
+ :description => 'An rspec.',
21
+ :url => 'http://example.com/rspec/',
22
+ })
23
+ p.stubs(:revision).returns(1)
24
+ p.stubs(:target_path).returns('rspec_build')
25
+ p.stubs(:vendor).returns('puppetlabs')
26
+ p.stubs(:packagedata).returns(data)
27
+ p
28
+ end
29
+
30
+ let(:packager) do
31
+ p = ModulepackagePackager.new(plugin)
32
+ p.instance_variable_set(:@tmpdir, 'rspec_tmp')
33
+ p
34
+ end
35
+
36
+ before :each do
37
+ ModulepackagePackager.any_instance.stubs(:assert_new_enough_puppet)
38
+ @packager = packager
39
+ end
40
+
41
+ describe '#initialize' do
42
+ it 'should set the instance variables' do
43
+ new_packager = ModulepackagePackager.new(plugin)
44
+ new_packager.instance_variable_get(:@plugin).should == plugin
45
+ new_packager.instance_variable_get(:@package_name).should == 'mcollective_rspec'
46
+ new_packager.instance_variable_get(:@verbose).should == false
47
+ new_packager.instance_variable_get(:@keep_artifacts).should == nil
48
+ end
49
+
50
+ it 'should fail if no build command is present' do
51
+ ModulepackagePackager.any_instance.stubs(:assert_new_enough_puppet).raises("Cannot build package. 'puppet' is not present on the system")
52
+ expect{
53
+ new_packager = ModulepackagePackager.new(plugin)
54
+ }.to raise_error("Cannot build package. 'puppet' is not present on the system")
55
+ end
56
+ end
57
+
58
+ describe '#create_packages' do
59
+ before :each do
60
+ @packager.stubs(:puts)
61
+ end
62
+
63
+ it 'should run through the complete build process' do
64
+ Dir.expects(:mktmpdir).with('mcollective_packager').returns('rspec_tmp')
65
+ @packager.expects(:make_module)
66
+ @packager.expects(:run_build)
67
+ @packager.expects(:move_package)
68
+ @packager.expects(:cleanup_tmpdirs)
69
+ @packager.create_packages
70
+ end
71
+
72
+ it 'should clean up tmpdirs if keep_artifacts is false' do
73
+ Dir.stubs(:mktmpdir).raises('error')
74
+ @packager.expects(:cleanup_tmpdirs)
75
+ expect{
76
+ packager.create_packages
77
+ }.to raise_error('error')
78
+ end
79
+
80
+ it 'should keep the build artifacts if keep_artifacts is true' do
81
+ @packager.instance_variable_set(:@keep_artifacts, true)
82
+ Dir.stubs(:mktmpdir).raises('error')
83
+ @packager.expects(:cleanup_tmpdirs).never
84
+ expect{
85
+ @packager.create_packages
86
+ }.to raise_error('error')
87
+ end
88
+ end
89
+
90
+ describe '#assert_new_enough_puppet' do
91
+ before :each do
92
+ ModulepackagePackager.any_instance.unstub(:assert_new_enough_puppet)
93
+ end
94
+
95
+ let(:shell) do
96
+ s = mock
97
+ s.stubs(:runcommand)
98
+ s
99
+ end
100
+
101
+ it 'should ensure we have a puppet' do
102
+ PluginPackager.expects(:command_available?).with('puppet').returns(false)
103
+ expect {
104
+ packager.send(:assert_new_enough_puppet)
105
+ }.to raise_error('Cannot build package. \'puppet\' is not present on the system.')
106
+ end
107
+
108
+ it 'should find the version of puppet' do
109
+ PluginPackager.stubs(:command_available?).with('puppet').returns(true)
110
+ shell.expects(:stdout).returns("3.3.0\n")
111
+ Shell.stubs(:new).with('puppet --version').returns(shell)
112
+ packager.send(:assert_new_enough_puppet)
113
+ end
114
+
115
+ it 'should assert the version of puppet is >= 3.3.0' do
116
+ PluginPackager.expects(:command_available?).with('puppet').returns(true)
117
+ Shell.stubs(:new).with('puppet --version').returns(shell)
118
+ shell.stubs(:stdout).returns("3.2.0\n")
119
+ expect {
120
+ packager.send(:assert_new_enough_puppet)
121
+ }.to raise_error('Cannot build package. puppet 3.3.0 or greater required. We have 3.2.0.')
122
+ end
123
+ end
124
+
125
+ describe '#make_module' do
126
+ it 'should copy the package content to the tmp build dir' do
127
+ file = mock()
128
+ File.stubs(:directory?).with('rspec_tmp/manifests').returns(false, true)
129
+ File.stubs(:directory?).with('rspec_tmp/files/agent/mcollective/agent').returns(false, true)
130
+ File.stubs(:directory?).with('rspec_tmp/files/common/mcollective/agent').returns(false, true)
131
+ File.stubs(:directory?).with('rspec_tmp/files/client/mcollective/application').returns(false)
132
+ FileUtils.expects(:mkdir_p).with('rspec_tmp/manifests')
133
+ FileUtils.expects(:mkdir_p).with('rspec_tmp/files/common/mcollective/agent')
134
+ FileUtils.expects(:mkdir_p).with('rspec_tmp/files/agent/mcollective/agent')
135
+ FileUtils.expects(:mkdir_p).with('rspec_tmp/files/client/mcollective/application')
136
+ FileUtils.expects(:cp_r).with('./agent/rspec.rb', 'rspec_tmp/files/agent/mcollective/agent')
137
+ FileUtils.expects(:cp_r).with('./agent/rspec.ddl', 'rspec_tmp/files/common/mcollective/agent')
138
+ FileUtils.expects(:cp_r).with('./application/rspec.rb', 'rspec_tmp/files/client/mcollective/application')
139
+ File.stubs(:open).with('rspec_tmp/manifests/common.pp', 'w').yields(file)
140
+ File.stubs(:open).with('rspec_tmp/manifests/agent.pp', 'w').yields(file)
141
+ File.stubs(:open).with('rspec_tmp/manifests/client.pp', 'w').yields(file)
142
+ File.stubs(:open).with('rspec_tmp/Modulefile', 'w').yields(file)
143
+ File.stubs(:open).with('rspec_tmp/README.md', 'w').yields(file)
144
+ file.expects(:puts).times(5)
145
+ @packager.send(:make_module)
146
+ end
147
+ end
148
+
149
+ describe '#run_build' do
150
+ before :each do
151
+ Dir.stubs(:chdir).yields
152
+ end
153
+
154
+ it 'should build the packages' do
155
+ PluginPackager.expects(:execute_verbosely).with(false).yields
156
+ PluginPackager.expects(:safe_system).with('puppet module build')
157
+ @packager.send(:run_build)
158
+ end
159
+
160
+ it 'should not build silently if verbose is false' do
161
+ @packager.instance_variable_set(:@verbose, true)
162
+ PluginPackager.expects(:execute_verbosely).with(true).yields
163
+ PluginPackager.expects(:safe_system).with('puppet module build')
164
+ @packager.send(:run_build)
165
+ end
166
+
167
+ it 'should write a message and raise an exception if the build fails' do
168
+ Dir.stubs(:chdir).raises('error')
169
+ @packager.expects(:puts).with('Build process has failed')
170
+ expect{
171
+ @packager.send(:run_build)
172
+ }.to raise_error('error')
173
+ end
174
+ end
175
+
176
+ describe '#move_package' do
177
+ it 'should copy all the build artifacts to the cwd' do
178
+ File.stubs(:join).with('rspec_tmp', 'pkg', 'puppetlabs-mcollective_rspec-1.0.tar.gz').returns('1.tar.gz')
179
+ FileUtils.expects(:cp).with('1.tar.gz', '.')
180
+ @packager.send(:move_package)
181
+ end
182
+
183
+ it 'should write a message and raise an exception if the artifacts cannot be copied' do
184
+ FileUtils.stubs(:cp).raises('error')
185
+ @packager.expects(:puts).with('Could not copy package to working directory')
186
+ expect{
187
+ @packager.send(:move_package)
188
+ }.to raise_error('error')
189
+ end
190
+ end
191
+
192
+ describe '#cleanup_tmpdirs' do
193
+ it 'should remove the tmp dirs' do
194
+ File.stubs(:directory?).with('rspec_tmp').returns(true)
195
+ FileUtils.expects(:rm_r).with('rspec_tmp')
196
+ @packager.send(:cleanup_tmpdirs)
197
+ end
198
+
199
+ it 'should write a message and raise an exception if it cannot remove the tmp dirs' do
200
+ File.stubs(:directory?).raises('error')
201
+ @packager.expects(:puts).with("Could not remove temporary build directory - 'rspec_tmp'")
202
+ expect{
203
+ @packager.send(:cleanup_tmpdirs)
204
+ }.to raise_error('error')
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
@@ -4,164 +4,278 @@ require File.dirname(__FILE__) + '/../../../../../plugins/mcollective/pluginpack
4
4
 
5
5
  module MCollective
6
6
  module PluginPackager
7
- describe RpmpackagePackager do
8
- let(:maketmpdir) do
9
- tmpdir = Dir.mktmpdir("mc-test")
10
- @tmpdirs << tmpdir
11
- tmpdir
7
+ describe RpmpackagePackager, :unless => MCollective::Util.windows? do
8
+ let(:plugin) do
9
+ p = mock
10
+ p.stubs(:mcname).returns('mcollective')
11
+ p.stubs(:metadata).returns({:version => '1.0', :name => 'rspec'})
12
+ p.stubs(:revision).returns(1)
13
+ p.stubs(:target_path).returns('rspec_build')
14
+ p
12
15
  end
13
16
 
14
- before :all do
15
- @tmpdirs = []
17
+ let(:packager) do
18
+ p = RpmpackagePackager.new(plugin)
19
+ p.instance_variable_set(:@tmpdir, 'rspec_tmp')
20
+ p
16
21
  end
17
22
 
18
- before :each do
19
- PluginPackager.stubs(:build_tool?).with("rpmbuild-md5").returns(true)
20
- PluginPackager.stubs(:build_tool?).with("rpmbuild").returns(true)
21
- @plugin = mock()
22
- @plugin.stubs(:iteration).returns("1")
23
- @plugin.stubs(:metadata).returns({:name => "test", :version => "1"})
24
- @plugin.stubs(:mcname).returns("mcollective")
25
- RpmpackagePackager.any_instance.stubs(:rpmdir).returns('rpmdir')
26
- RpmpackagePackager.any_instance.stubs(:srpmdir).returns('srpmdir')
23
+ let(:data) do
24
+ {:agent => {:files => ['agent/rspec.rb', 'agent/rspec.ddl']},
25
+ :client => {:files => ['application/rspec.rb']}}
27
26
  end
28
27
 
29
- after :all do
30
- @tmpdirs.each{|tmpdir| FileUtils.rm_rf tmpdir if File.directory? tmpdir}
28
+ before :each do
29
+ RpmpackagePackager.any_instance.stubs(:select_command).returns('rpmbuild')
30
+ RpmpackagePackager.any_instance.stubs(:rpmdir).returns('rspec_rpm')
31
+ RpmpackagePackager.any_instance.stubs(:srpmdir).returns('rspec_srpm')
32
+ @packager = packager
31
33
  end
32
34
 
33
- describe "#initialize" do
35
+ describe '#initialize' do
36
+ it 'should set the instance variables' do
37
+ new_packager = RpmpackagePackager.new(plugin)
38
+ new_packager.instance_variable_get(:@plugin).should == plugin
39
+ new_packager.instance_variable_get(:@package_name).should == 'mcollective-rspec'
40
+ new_packager.instance_variable_get(:@package_name_and_version).should == 'mcollective-rspec-1.0'
41
+ new_packager.instance_variable_get(:@verbose).should == false
42
+ new_packager.instance_variable_get(:@libdir).should == '/usr/libexec/mcollective/mcollective/'
43
+ new_packager.instance_variable_get(:@signature).should == nil
44
+ new_packager.instance_variable_get(:@rpmdir).should == 'rspec_rpm'
45
+ new_packager.instance_variable_get(:@srpmdir).should == 'rspec_srpm'
46
+ new_packager.instance_variable_get(:@keep_artifacts).should == nil
47
+ end
34
48
 
35
- it "should raise and exception if neither rpmbuild or rpmbuild-md5 is installed is not present" do
36
- PluginPackager.expects(:build_tool?).with("rpmbuild-md5").returns(false)
37
- PluginPackager.expects(:build_tool?).with("rpmbuild").returns(false)
49
+ it 'should fail if no build command is present' do
50
+ RpmpackagePackager.any_instance.stubs(:select_command).returns(nil)
38
51
  expect{
39
- RpmpackagePackager.new("plugin")
40
- }.to raise_exception(RuntimeError, "creating rpms require 'rpmbuild' or 'rpmbuild-md5' to be installed")
52
+ new_packager = RpmpackagePackager.new(plugin)
53
+ }.to raise_error("Cannot build package. 'rpmbuild' or 'rpmbuild-md5' is not present on the system")
41
54
  end
55
+ end
42
56
 
43
- it "should set the correct libdir" do
44
- packager = RpmpackagePackager.new("plugin")
45
- packager.libdir.should == "/usr/libexec/mcollective/mcollective/"
57
+ describe '#select_command' do
58
+ it 'should return the command string for rpmbuild if its present' do
59
+ RpmpackagePackager.any_instance.unstub(:select_command)
60
+ PluginPackager.stubs(:command_available?).with('rpmbuild-md5').returns(false)
61
+ PluginPackager.stubs(:command_available?).with('rpmbuild').returns(true)
62
+ @packager.select_command.should == 'rpmbuild'
63
+ end
46
64
 
47
- packager = RpmpackagePackager.new("plugin", "/tmp/")
48
- packager.libdir.should == "/tmp/"
65
+ it 'should return the command string for rpmbuild-md5 if its present' do
66
+ RpmpackagePackager.any_instance.unstub(:select_command)
67
+ PluginPackager.stubs(:command_available?).with('rpmbuild-md5').returns(true)
68
+ @packager.select_command.should == 'rpmbuild-md5'
49
69
  end
50
70
 
71
+ it 'should return nil if neither are present' do
72
+ RpmpackagePackager.any_instance.unstub(:select_command)
73
+ PluginPackager.stubs(:command_available?).with('rpmbuild-md5').returns(false)
74
+ PluginPackager.stubs(:command_available?).with('rpmbuild').returns(false)
75
+ @packager.select_command.should == nil
76
+ end
51
77
  end
52
78
 
53
- describe "#create_packages" do
79
+ describe '#create_packages' do
54
80
  before :each do
55
- @packager = RpmpackagePackager.new(@plugin)
56
- @packager.tmpdir = maketmpdir
57
- @packager.stubs(:create_package)
58
- @packager.stubs(:cleanup_tmpdirs)
59
- @plugin.stubs(:packagedata).returns(:test => {:files => ["test.rb"]})
60
- @packager.stubs(:prepare_tmpdirs)
61
- Dir.stubs(:mktmpdir)
81
+ @packager.stubs(:puts)
62
82
  end
63
83
 
64
- it "should set the package instance variables" do
84
+ it 'should run through the complete build process' do
85
+ Dir.expects(:mktmpdir).with('mcollective_packager').returns('rspec_tmp')
86
+ @packager.expects(:prepare_tmpdirs)
87
+ @packager.expects(:make_spec_file)
88
+ @packager.expects(:run_build)
89
+ @packager.expects(:move_packages)
90
+ @packager.expects(:cleanup_tmpdirs)
65
91
  @packager.create_packages
66
- @packager.current_package_type.should == :test
67
- @packager.current_package_data.should == {:files => ["test.rb"]}
68
- @packager.current_package_name.should == "mcollective-test-test"
69
92
  end
70
93
 
71
- it "should create the build dir" do
72
- @packager.expects(:prepare_tmpdirs)
73
- @packager.create_packages
94
+ it 'should clean up tmpdirs if keep_artifacts is false' do
95
+ Dir.stubs(:mktmpdir).raises('error')
96
+ @packager.expects(:cleanup_tmpdirs)
97
+ expect{
98
+ packager.create_packages
99
+ }.to raise_error('error')
74
100
  end
75
101
 
76
- it "should create packages" do
77
- @packager.expects(:create_package)
78
- @packager.create_packages
102
+ it 'should keep the build artifacts if keep_artifacts is true' do
103
+ @packager.instance_variable_set(:@keep_artifacts, true)
104
+ Dir.stubs(:mktmpdir).raises('error')
105
+ @packager.expects(:cleanup_tmpdirs).never
106
+ expect{
107
+ @packager.create_packages
108
+ }.to raise_error('error')
109
+ end
110
+ end
111
+
112
+ describe '#run_build' do
113
+ it 'should build the packages' do
114
+ @packager.expects(:create_tar).returns('rspec.tgz')
115
+ PluginPackager.expects(:execute_verbosely).with(false).yields
116
+ PluginPackager.expects(:safe_system).with('rpmbuild -ta --quiet rspec.tgz')
117
+ @packager.send(:run_build)
118
+ end
119
+
120
+ it 'should sign the packages if a signature is defined' do
121
+ @packager.instance_variable_set(:@signature, true)
122
+ @packager.expects(:create_tar).returns('rspec.tgz')
123
+ PluginPackager.expects(:execute_verbosely).with(false).yields
124
+ PluginPackager.expects(:safe_system).with('rpmbuild -ta --quiet --sign rspec.tgz')
125
+ @packager.send(:run_build)
126
+ end
127
+
128
+ it 'should not build silently if verbose is false' do
129
+ @packager.instance_variable_set(:@verbose, true)
130
+ @packager.expects(:create_tar).returns('rspec.tgz')
131
+ PluginPackager.expects(:execute_verbosely).with(true).yields
132
+ PluginPackager.expects(:safe_system).with('rpmbuild -ta rspec.tgz')
133
+ @packager.send(:run_build)
79
134
  end
80
135
 
136
+ it 'should write a message and raise an exception if the build fails' do
137
+ @packager.stubs(:create_tar).raises('error')
138
+ @packager.expects(:puts).with('Build process has failed')
139
+ expect{
140
+ @packager.send(:run_build)
141
+ }.to raise_error('error')
142
+ end
81
143
  end
82
144
 
83
- describe "#create_package" do
84
- before :each do
85
- @packager = RpmpackagePackager.new(@plugin)
145
+ describe '#create_tar' do
146
+ it 'should create the tarball' do
147
+ PluginPackager.expects(:execute_verbosely).with(false).yields
148
+ Dir.expects(:chdir).with('rspec_tmp').yields
149
+ PluginPackager.expects(:safe_system).with('tar -cvzf rspec_tmp/mcollective-rspec-1.0.tgz mcollective-rspec-1.0')
150
+ @packager.send(:create_tar)
86
151
  end
87
152
 
88
- it "should create the package" do
89
- Dir.expects(:chdir)
90
- PluginPackager.expects(:safe_system).with("rpmbuild-md5 -ta /tmp/mcollective-testplugin-test-1.tgz")
91
- FileUtils.expects(:cp).times(2)
92
- @packager.tmpdir = "/tmp"
93
- @packager.verbose = "true"
94
- @packager.expects(:make_spec_file)
95
- @packager.current_package_name = "mcollective-testplugin-test"
96
- @packager.expects(:puts).with('Created RPM and SRPM packages for mcollective-testplugin-test')
97
- @packager.create_package(:test, {:files => ["foo.rb"]})
98
- end
99
-
100
- it "should sign the package if a signature is given" do
101
- Dir.expects(:chdir)
102
- PluginPackager.expects(:safe_system).with("rpmbuild-md5 -ta --sign /tmp/mcollective-testplugin-test-1.tgz")
103
- FileUtils.expects(:cp).times(2)
104
- @packager.signature = true
105
- @packager.tmpdir = "/tmp"
106
- @packager.verbose = "true"
107
- @packager.expects(:make_spec_file)
108
- @packager.current_package_name = "mcollective-testplugin-test"
109
- @packager.expects(:puts).with('Created RPM and SRPM packages for mcollective-testplugin-test')
110
- @packager.create_package(:test, {:files => ["foo.rb"]})
153
+ it 'should write a message and raise an exception if the tarball cannot be built' do
154
+ PluginPackager.expects(:execute_verbosely).with(false).raises('error')
155
+ @packager.expects(:puts).with("Could not create tarball - 'rspec_tmp/mcollective-rspec-1.0.tgz'")
156
+ expect{
157
+ @packager.send(:create_tar)
158
+ }.to raise_error('error')
111
159
  end
160
+ end
112
161
 
113
- it "should raise an error if the package can't be built" do
114
- @packager = RpmpackagePackager.new(@plugin)
115
- @packager.tmpdir = "/tmp"
116
- @packager.expects(:make_spec_file)
117
- PluginPackager.stubs(:do_quietly?).raises("foo")
162
+ describe '#move_packages' do
163
+ it 'should copy all the build artifacts to the cwd' do
164
+ File.stubs(:join).with('rspec_rpm', 'noarch', 'mcollective-rspec-*-1.0-1.noarch.rpm').returns('rspec_rpm/noarch/mcollective-rspec-*-1.0-1.noarch.rpm')
165
+ File.stubs(:join).with('rspec_srpm', 'mcollective-rspec-1.0-1.src.rpm').returns('1.src.rpm')
166
+ Dir.stubs(:glob).with('rspec_rpm/noarch/mcollective-rspec-*-1.0-1.noarch.rpm').returns(['1.rpm', '2.rpm'])
167
+ Dir.stubs(:glob).with('rspec_srpm/mcollective-rspec-1.0-1.src.rpm').returns(['1.src.rpm'])
168
+ FileUtils.expects(:cp).with(['1.rpm', '2.rpm', '1.src.rpm'], '.')
169
+ @packager.send(:move_packages)
170
+ end
171
+
172
+ it 'should write a message and raise an exception if the artifacts cannot be copied' do
173
+ Dir.stubs(:glob).raises('error')
174
+ @packager.expects(:puts).with('Could not copy packages to working directory')
175
+ expect{
176
+ @packager.send(:move_packages)
177
+ }.to raise_error('error')
178
+ end
179
+ end
180
+
181
+ describe '#make_spec_file' do
182
+ it 'should create a specfile from the erb template' do
183
+ erb = mock
184
+ file = mock
185
+ erb.stubs(:result).returns('<% rspec =%>')
186
+ File.stubs(:dirname).returns('rspec_template')
187
+ File.expects(:read).with('rspec_template/templates/redhat/rpm_spec.erb').returns(erb)
188
+ ERB.expects(:new).with(erb, nil, '-').returns(erb)
189
+ File.expects(:open).with('rspec_tmp/mcollective-rspec-1.0/mcollective-rspec-1.0.spec', 'w').yields(file)
190
+ file.expects(:puts).with('<% rspec =%>')
191
+ @packager.send(:make_spec_file)
192
+ end
193
+
194
+ it 'should write a message and raise an exception if it could not create the specfile' do
195
+ ERB.stubs(:new).raises('error')
196
+ @packager.expects(:puts).with("Could not create specfile - 'rspec_tmp/mcollective-rspec-1.0/mcollective-rspec-1.0.spec'")
118
197
  expect{
119
- @packager.create_package("", "")
120
- }.to raise_error(RuntimeError, "Could not build package. Reason - foo")
198
+ @packager.send(:make_spec_file)
199
+ }.to raise_error('error')
121
200
  end
122
201
  end
123
202
 
124
- describe "#make_spec_file" do
203
+ describe '#prepare_tmpdirs' do
125
204
  before :each do
126
- @plugin = mock
127
- @packager = RpmpackagePackager.new(@plugin)
205
+ pluginfiles = ['/agent/rspec.rb', '/agent/rspec.ddl', '/application/rspec.rb']
206
+ @packager.stubs(:plugin_files).returns(pluginfiles)
207
+ end
208
+
209
+ it 'should copy the package content to the tmp build dir' do
210
+ File.stubs(:directory?).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent').returns(false, true)
211
+ File.stubs(:directory?).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/application').returns(false)
212
+ FileUtils.expects(:mkdir_p).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent')
213
+ FileUtils.expects(:mkdir_p).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/application')
214
+ FileUtils.expects(:cp_r).with('/agent/rspec.rb', 'rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent')
215
+ FileUtils.expects(:cp_r).with('/agent/rspec.ddl', 'rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent')
216
+ FileUtils.expects(:cp_r).with('/application/rspec.rb', 'rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/application')
217
+ @packager.send(:prepare_tmpdirs)
218
+ end
219
+
220
+ it 'should fail if we do not have permission to create the directory' do
221
+ File.stubs(:directory?).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent').raises(Errno::EACCES)
222
+ @packager.expects(:puts)
223
+ expect{
224
+ @packager.send(:prepare_tmpdirs)
225
+ }.to raise_error(Errno::EACCES)
226
+ end
227
+
228
+ it 'should fail if the files we are trying to copy do not exist' do
229
+ File.stubs(:directory?).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent').raises(Errno::ENOENT)
230
+ @packager.expects(:puts)
231
+ expect{
232
+ @packager.send(:prepare_tmpdirs)
233
+ }.to raise_error(Errno::ENOENT)
234
+
128
235
  end
129
236
 
130
- it "should raise an exception if specfile cannot be built" do
131
- File.expects(:dirname).raises("test error")
237
+ it 'should write a message an error if the something else goes wrong and raise an exception' do
238
+ File.stubs(:directory?).with('rspec_tmp/mcollective-rspec-1.0/usr/libexec/mcollective/mcollective/agent').raises('error')
239
+ @packager.expects(:puts)
132
240
  expect{
133
- @packager.make_spec_file
134
- }.to raise_error(RuntimeError, "Could not create specfile - test error")
241
+ @packager.send(:prepare_tmpdirs)
242
+ }.to raise_error('error')
135
243
  end
244
+ end
136
245
 
137
- it "should create the specfile from the erb" do
138
- File.stubs(:read).returns("specfile")
139
- @plugin.stubs(:metadata).returns({:version => 2})
140
- @packager.current_package_name = "test"
141
- @packager.tmpdir = maketmpdir
142
- Dir.mkdir(File.join(@packager.tmpdir, "test-2"))
143
- @packager.make_spec_file
144
- File.read(File.join(@packager.tmpdir, "test-2", "test-2.spec")).should == "specfile"
246
+ describe '#plugin_files' do
247
+ it 'should return the package files in a single array' do
248
+ files = ['agent/rspec.rb', 'agent/rspec.ddl', 'application/rspec.rb']
249
+ plugin.stubs(:packagedata).returns(data)
250
+ result = @packager.send(:plugin_files)
251
+ (files | result).should == files
145
252
  end
146
253
  end
147
254
 
148
- describe "#prepare_tmpdirs" do
149
- it "should create the tmp dirs and cp the package files" do
150
- @plugin.stubs(:target_path).returns("")
151
- packager = RpmpackagePackager.new(@plugin)
152
- FileUtils.expects(:mkdir_p)
153
- File.stubs(:join).returns("/target")
154
- FileUtils.expects(:cp_r).with("test.rb", "/target")
155
- packager.prepare_tmpdirs({:files => ["test.rb"]})
255
+ describe '#package_files' do
256
+ it 'should return the package files and ommit the directories' do
257
+ files = ['/rspec', '/rspec/1.rb', '/rspec/2.rb']
258
+ File.expects(:directory?).with('/rspec').returns(true)
259
+ File.expects(:directory?).with('/rspec/1.rb').returns(false)
260
+ File.expects(:directory?).with('/rspec/2.rb').returns(false)
261
+ @packager.send(:package_files, files).should == ['/usr/libexec/mcollective/mcollective/rspec/1.rb',
262
+ '/usr/libexec/mcollective/mcollective/rspec/2.rb']
156
263
  end
157
264
  end
158
265
 
159
- describe "#cleanup_tmpdirs" do
160
- it "should remove the temp directories" do
161
- packager = RpmpackagePackager.new("package")
162
- packager.tmpdir = maketmpdir
163
- packager.cleanup_tmpdirs
164
- File.directory?(packager.tmpdir).should == false
266
+ describe '#cleanup_tmpdirs' do
267
+ it 'should remove the tmp dirs' do
268
+ File.stubs(:directory?).with('rspec_tmp').returns(true)
269
+ FileUtils.expects(:rm_r).with('rspec_tmp')
270
+ @packager.send(:cleanup_tmpdirs)
271
+ end
272
+
273
+ it 'should write a message and raise an exception if it cannot remove the tmp dirs' do
274
+ File.stubs(:directory?).raises('error')
275
+ @packager.expects(:puts).with("Could not remove temporary build directory - 'rspec_tmp'")
276
+ expect{
277
+ @packager.send(:cleanup_tmpdirs)
278
+ }.to raise_error('error')
165
279
  end
166
280
  end
167
281
  end