Update mcollective.init according to OSCI-855
[packages/precise/mcollective.git] / spec / unit / plugins / mcollective / packagers / rpmpackage_packager_spec.rb
1 #!/usr/bin/env rspec
2 require 'spec_helper'
3 require File.dirname(__FILE__) + '/../../../../../plugins/mcollective/pluginpackager/rpmpackage_packager.rb'
4
5 module MCollective
6   module PluginPackager
7     describe RpmpackagePackager do
8       let(:maketmpdir) do
9         tmpdir = Dir.mktmpdir("mc-test")
10         @tmpdirs << tmpdir
11         tmpdir
12       end
13
14       before :all do
15         @tmpdirs = []
16       end
17
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')
27       end
28
29       after :all do
30         @tmpdirs.each{|tmpdir| FileUtils.rm_rf tmpdir if File.directory? tmpdir}
31       end
32
33       describe "#initialize" do
34
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)
38           expect{
39             RpmpackagePackager.new("plugin")
40           }.to raise_exception(RuntimeError, "creating rpms require 'rpmbuild' or 'rpmbuild-md5' to be installed")
41         end
42
43         it "should set the correct libdir" do
44           packager = RpmpackagePackager.new("plugin")
45           packager.libdir.should == "/usr/libexec/mcollective/mcollective/"
46
47           packager = RpmpackagePackager.new("plugin", "/tmp/")
48           packager.libdir.should == "/tmp/"
49         end
50
51       end
52
53       describe "#create_packages" do
54         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)
62         end
63
64         it "should set the package instance variables" do
65           @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         end
70
71         it "should create the build dir" do
72           @packager.expects(:prepare_tmpdirs)
73           @packager.create_packages
74         end
75
76         it "should create packages" do
77           @packager.expects(:create_package)
78           @packager.create_packages
79         end
80
81       end
82
83       describe "#create_package" do
84         before :each do
85           @packager = RpmpackagePackager.new(@plugin)
86         end
87
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"]})
111         end
112
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")
118           expect{
119             @packager.create_package("", "")
120           }.to raise_error(RuntimeError, "Could not build package. Reason - foo")
121         end
122       end
123
124       describe "#make_spec_file" do
125         before :each do
126           @plugin = mock
127           @packager = RpmpackagePackager.new(@plugin)
128         end
129
130         it "should raise an exception if specfile cannot be built" do
131           File.expects(:dirname).raises("test error")
132           expect{
133             @packager.make_spec_file
134           }.to raise_error(RuntimeError, "Could not create specfile - test error")
135         end
136
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"
145         end
146       end
147
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"]})
156         end
157       end
158
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
165         end
166       end
167     end
168   end
169 end