X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=spec%2Funit%2Fplugins%2Fmcollective%2Fpackagers%2Frpmpackage_packager_spec.rb;fp=spec%2Funit%2Fplugins%2Fmcollective%2Fpackagers%2Frpmpackage_packager_spec.rb;h=9f06e27ef3ddd4125f75a34e9f72f439e1da5d43;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/spec/unit/plugins/mcollective/packagers/rpmpackage_packager_spec.rb b/spec/unit/plugins/mcollective/packagers/rpmpackage_packager_spec.rb new file mode 100644 index 0000000..9f06e27 --- /dev/null +++ b/spec/unit/plugins/mcollective/packagers/rpmpackage_packager_spec.rb @@ -0,0 +1,169 @@ +#!/usr/bin/env rspec +require 'spec_helper' +require File.dirname(__FILE__) + '/../../../../../plugins/mcollective/pluginpackager/rpmpackage_packager.rb' + +module MCollective + module PluginPackager + describe RpmpackagePackager do + let(:maketmpdir) do + tmpdir = Dir.mktmpdir("mc-test") + @tmpdirs << tmpdir + tmpdir + end + + before :all do + @tmpdirs = [] + end + + before :each do + PluginPackager.stubs(:build_tool?).with("rpmbuild-md5").returns(true) + PluginPackager.stubs(:build_tool?).with("rpmbuild").returns(true) + @plugin = mock() + @plugin.stubs(:iteration).returns("1") + @plugin.stubs(:metadata).returns({:name => "test", :version => "1"}) + @plugin.stubs(:mcname).returns("mcollective") + RpmpackagePackager.any_instance.stubs(:rpmdir).returns('rpmdir') + RpmpackagePackager.any_instance.stubs(:srpmdir).returns('srpmdir') + end + + after :all do + @tmpdirs.each{|tmpdir| FileUtils.rm_rf tmpdir if File.directory? tmpdir} + end + + describe "#initialize" do + + it "should raise and exception if neither rpmbuild or rpmbuild-md5 is installed is not present" do + PluginPackager.expects(:build_tool?).with("rpmbuild-md5").returns(false) + PluginPackager.expects(:build_tool?).with("rpmbuild").returns(false) + expect{ + RpmpackagePackager.new("plugin") + }.to raise_exception(RuntimeError, "creating rpms require 'rpmbuild' or 'rpmbuild-md5' to be installed") + end + + it "should set the correct libdir" do + packager = RpmpackagePackager.new("plugin") + packager.libdir.should == "/usr/libexec/mcollective/mcollective/" + + packager = RpmpackagePackager.new("plugin", "/tmp/") + packager.libdir.should == "/tmp/" + end + + end + + describe "#create_packages" do + before :each do + @packager = RpmpackagePackager.new(@plugin) + @packager.tmpdir = maketmpdir + @packager.stubs(:create_package) + @packager.stubs(:cleanup_tmpdirs) + @plugin.stubs(:packagedata).returns(:test => {:files => ["test.rb"]}) + @packager.stubs(:prepare_tmpdirs) + Dir.stubs(:mktmpdir) + end + + it "should set the package instance variables" do + @packager.create_packages + @packager.current_package_type.should == :test + @packager.current_package_data.should == {:files => ["test.rb"]} + @packager.current_package_name.should == "mcollective-test-test" + end + + it "should create the build dir" do + @packager.expects(:prepare_tmpdirs) + @packager.create_packages + end + + it "should create packages" do + @packager.expects(:create_package) + @packager.create_packages + end + + end + + describe "#create_package" do + before :each do + @packager = RpmpackagePackager.new(@plugin) + end + + it "should create the package" do + Dir.expects(:chdir) + PluginPackager.expects(:safe_system).with("rpmbuild-md5 -ta /tmp/mcollective-testplugin-test-1.tgz") + FileUtils.expects(:cp).times(2) + @packager.tmpdir = "/tmp" + @packager.verbose = "true" + @packager.expects(:make_spec_file) + @packager.current_package_name = "mcollective-testplugin-test" + @packager.expects(:puts).with('Created RPM and SRPM packages for mcollective-testplugin-test') + @packager.create_package(:test, {:files => ["foo.rb"]}) + end + + it "should sign the package if a signature is given" do + Dir.expects(:chdir) + PluginPackager.expects(:safe_system).with("rpmbuild-md5 -ta --sign /tmp/mcollective-testplugin-test-1.tgz") + FileUtils.expects(:cp).times(2) + @packager.signature = true + @packager.tmpdir = "/tmp" + @packager.verbose = "true" + @packager.expects(:make_spec_file) + @packager.current_package_name = "mcollective-testplugin-test" + @packager.expects(:puts).with('Created RPM and SRPM packages for mcollective-testplugin-test') + @packager.create_package(:test, {:files => ["foo.rb"]}) + end + + it "should raise an error if the package can't be built" do + @packager = RpmpackagePackager.new(@plugin) + @packager.tmpdir = "/tmp" + @packager.expects(:make_spec_file) + PluginPackager.stubs(:do_quietly?).raises("foo") + expect{ + @packager.create_package("", "") + }.to raise_error(RuntimeError, "Could not build package. Reason - foo") + end + end + + describe "#make_spec_file" do + before :each do + @plugin = mock + @packager = RpmpackagePackager.new(@plugin) + end + + it "should raise an exception if specfile cannot be built" do + File.expects(:dirname).raises("test error") + expect{ + @packager.make_spec_file + }.to raise_error(RuntimeError, "Could not create specfile - test error") + end + + it "should create the specfile from the erb" do + File.stubs(:read).returns("specfile") + @plugin.stubs(:metadata).returns({:version => 2}) + @packager.current_package_name = "test" + @packager.tmpdir = maketmpdir + Dir.mkdir(File.join(@packager.tmpdir, "test-2")) + @packager.make_spec_file + File.read(File.join(@packager.tmpdir, "test-2", "test-2.spec")).should == "specfile" + end + end + + describe "#prepare_tmpdirs" do + it "should create the tmp dirs and cp the package files" do + @plugin.stubs(:target_path).returns("") + packager = RpmpackagePackager.new(@plugin) + FileUtils.expects(:mkdir_p) + File.stubs(:join).returns("/target") + FileUtils.expects(:cp_r).with("test.rb", "/target") + packager.prepare_tmpdirs({:files => ["test.rb"]}) + end + end + + describe "#cleanup_tmpdirs" do + it "should remove the temp directories" do + packager = RpmpackagePackager.new("package") + packager.tmpdir = maketmpdir + packager.cleanup_tmpdirs + File.directory?(packager.tmpdir).should == false + end + end + end + end +end