3 require File.dirname(__FILE__) + '/../../../../../plugins/mcollective/pluginpackager/rpmpackage_packager.rb'
7 describe RpmpackagePackager do
9 tmpdir = Dir.mktmpdir("mc-test")
19 PluginPackager.stubs(:build_tool?).with("rpmbuild-md5").returns(true)
20 PluginPackager.stubs(:build_tool?).with("rpmbuild").returns(true)
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')
30 @tmpdirs.each{|tmpdir| FileUtils.rm_rf tmpdir if File.directory? tmpdir}
33 describe "#initialize" do
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)
39 RpmpackagePackager.new("plugin")
40 }.to raise_exception(RuntimeError, "creating rpms require 'rpmbuild' or 'rpmbuild-md5' to be installed")
43 it "should set the correct libdir" do
44 packager = RpmpackagePackager.new("plugin")
45 packager.libdir.should == "/usr/libexec/mcollective/mcollective/"
47 packager = RpmpackagePackager.new("plugin", "/tmp/")
48 packager.libdir.should == "/tmp/"
53 describe "#create_packages" 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)
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"
71 it "should create the build dir" do
72 @packager.expects(:prepare_tmpdirs)
73 @packager.create_packages
76 it "should create packages" do
77 @packager.expects(:create_package)
78 @packager.create_packages
83 describe "#create_package" do
85 @packager = RpmpackagePackager.new(@plugin)
88 it "should create the package" do
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"]})
100 it "should sign the package if a signature is given" do
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"]})
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")
119 @packager.create_package("", "")
120 }.to raise_error(RuntimeError, "Could not build package. Reason - foo")
124 describe "#make_spec_file" do
127 @packager = RpmpackagePackager.new(@plugin)
130 it "should raise an exception if specfile cannot be built" do
131 File.expects(:dirname).raises("test error")
133 @packager.make_spec_file
134 }.to raise_error(RuntimeError, "Could not create specfile - test error")
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"
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"]})
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