require 'spec_helper' module Beaker describe FreeBSD::Pkg do class FreeBSDPkgTest include FreeBSD::Pkg def initialize(hash, logger) @hash = hash @logger = logger end def [](k) @hash[k] end def to_s "me" end def exec # noop end end let(:opts) { @opts || {} } let(:logger) { double('logger').as_null_object } let(:instance) { FreeBSDPkgTest.new(opts, logger) } let(:cond) do 'TMPDIR=/dev/null ASSUME_ALWAYS_YES=1 PACKAGESITE=file:///nonexist pkg info -x "pkg(-devel)?\\$" > /dev/null 2>&1' end context "pkg_info_patten" do it "returns correct patterns" do expect(instance.pkg_info_pattern('rsync')).to eq '^rsync-[0-9][0-9a-zA-Z_\\.,]*$' end end context "check_pkgng_sh" do it { expect(instance.check_pkgng_sh).to eq cond } end context "pkgng_active?" do it "returns true if pkgng is available" do expect(instance).to receive(:check_pkgng_sh).once.and_return("do you have pkgng?") expect(Beaker::Command).to receive(:new).with("/bin/sh -c 'do you have pkgng?'", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('') expect(instance).to receive(:exec).with('', { :accept_all_exit_codes => true }).and_return(generate_result("hello", { :exit_code => 0 })) expect(instance.pkgng_active?).to be true end it "returns false if pkgng is unavailable" do expect(instance).to receive(:check_pkgng_sh).once.and_return("do you have pkgng?") expect(Beaker::Command).to receive(:new).with("/bin/sh -c 'do you have pkgng?'", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('') expect(instance).to receive(:exec).with('', { :accept_all_exit_codes => true }).and_return(generate_result("hello", { :exit_code => 127 })) expect(instance.pkgng_active?).to be false end end context "install_package" do context "without pkgng" do it "runs the correct install command" do expect(instance).to receive(:pkgng_active?).once.and_return(false) expect(Beaker::Command).to receive(:new).with("pkg_add -r rsync", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('') expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 })) instance.install_package('rsync') end end context "with pkgng" do it "runs the correct install command" do expect(instance).to receive(:pkgng_active?).once.and_return(true) expect(Beaker::Command).to receive(:new).with("pkg install -y rsync", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('') expect(instance).to receive(:exec).with('', {}).and_return(generate_result("hello", { :exit_code => 0 })) instance.install_package('rsync') end end end context "check_for_package" do context "without pkgng" do it "runs the correct checking command" do expect(instance).to receive(:pkgng_active?).once.and_return(false) expect(Beaker::Command).to receive(:new).with("pkg_info -Ix '^rsync-[0-9][0-9a-zA-Z_\\.,]*$'", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('') expect(instance).to receive(:exec).with('', { :accept_all_exit_codes => true }).and_return(generate_result("hello", { :exit_code => 0 })) instance.check_for_package('rsync') end end context "with pkgng" do it "runs the correct checking command" do expect(instance).to receive(:pkgng_active?).once.and_return(true) expect(Beaker::Command).to receive(:new).with("pkg info rsync", [], { :prepend_cmds => nil, :cmdexe => false }).and_return('') expect(instance).to receive(:exec).with('', { :accept_all_exit_codes => true }).and_return(generate_result("hello", { :exit_code => 0 })) instance.check_for_package('rsync') end end end end end