spec/unit/software_spec.rb in omnibus-5.5.0 vs spec/unit/software_spec.rb in omnibus-5.6.0

- old
+ new

@@ -40,10 +40,11 @@ it_behaves_like "a cleanroom setter", :default_version, %{default_version '1.2.3'} it_behaves_like "a cleanroom setter", :version, %{version '1.2.3'} it_behaves_like "a cleanroom setter", :license, %{license 'Apache 2.0'} it_behaves_like "a cleanroom setter", :license_file, %{license_file 'LICENSES/artistic.txt'} it_behaves_like "a cleanroom setter", :skip_transitive_dependency_licensing, %{skip_transitive_dependency_licensing true} + it_behaves_like "a cleanroom setter", :dependency_licenses, %{dependency_licenses [{license: "MIT"}]} it_behaves_like "a cleanroom setter", :whitelist_file, %{whitelist_file '/opt/whatever'} it_behaves_like "a cleanroom setter", :relative_path, %{relative_path '/path/to/extracted'} it_behaves_like "a cleanroom setter", :build, %|build {}| it_behaves_like "a cleanroom getter", :project_dir it_behaves_like "a cleanroom getter", :build_dir @@ -74,62 +75,68 @@ "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end it "overrides LDFLAGS" do expect(subject.with_standard_compiler_flags("LDFLAGS" => "foo")).to eq( "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end it "overrides CFLAGS" do expect(subject.with_standard_compiler_flags("CFLAGS" => "foo")).to eq( "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end it "overrides CXXFLAGS" do expect(subject.with_standard_compiler_flags("CXXFLAGS" => "foo")).to eq( "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end it "overrides CPPFLAGS" do expect(subject.with_standard_compiler_flags("CPPFLAGS" => "foo")).to eq( "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end it "preserves anything else" do expect(subject.with_standard_compiler_flags("numberwang" => 4)).to eq( "numberwang" => 4, "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end context "on solaris_11" do @@ -147,11 +154,12 @@ "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib -static-libgcc", "LD_OPTIONS" => "-R/opt/project/embedded/lib", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end context "when loader mapping file is specified" do # Let the unit tests run on windows where auto-path translation occurs. @@ -173,11 +181,12 @@ "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib -static-libgcc", "LD_OPTIONS" => "-R/opt/project/embedded/lib", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end end @@ -191,16 +200,17 @@ it "sets the defaults" do expect(subject.with_standard_compiler_flags).to eq( "CC" => "gcc -static-libgcc", "LDFLAGS" => "-R/opt/project/embedded/lib -L/opt/project/embedded/lib -static-libgcc", - "CFLAGS" => "-I/opt/project/embedded/include", - "CXXFLAGS" => "-I/opt/project/embedded/include", - "CPPFLAGS" => "-I/opt/project/embedded/include", + "CFLAGS" => "-I/opt/project/embedded/include -O2", + "CXXFLAGS" => "-I/opt/project/embedded/include -O2", + "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", "LD_OPTIONS" => "-R/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end context "when loader mapping file is specified" do # Let the unit tests run on windows where auto-path translation occurs. @@ -217,16 +227,17 @@ it "sets LD_OPTIONS correctly" do expect(subject.with_standard_compiler_flags).to eq( "CC" => "gcc -static-libgcc", "LDFLAGS" => "-R/opt/project/embedded/lib -L/opt/project/embedded/lib -static-libgcc", - "CFLAGS" => "-I/opt/project/embedded/include", - "CXXFLAGS" => "-I/opt/project/embedded/include", - "CPPFLAGS" => "-I/opt/project/embedded/include", + "CFLAGS" => "-I/opt/project/embedded/include -O2", + "CXXFLAGS" => "-I/opt/project/embedded/include -O2", + "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", "LD_OPTIONS" => "-R/opt/project/embedded/lib -M #{project_root}/files/mapfile/solaris", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end end @@ -238,11 +249,12 @@ "LDFLAGS" => "-L/opt/project/embedded/lib", "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end context "on aix" do @@ -263,11 +275,12 @@ "LDFLAGS" => "-q64 -L/opt/project/embedded/lib -Wl,-blibpath:/opt/project/embedded/lib:/usr/lib:/lib", "LD" => "ld -b64", "OBJECT_MODE" => "64", "ARFLAGS" => "-X64 cru", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end context "on freebsd 9" do @@ -280,11 +293,12 @@ "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LDFLAGS" => "-L/opt/project/embedded/lib", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end context "with gcc 4.9 installed" do before do @@ -298,11 +312,13 @@ "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LDFLAGS" => "-L/opt/project/embedded/lib", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" ) + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" + ) end end end context "on freebsd 10" do @@ -317,15 +333,74 @@ "CFLAGS" => "-I/opt/project/embedded/include -O2", "CXXFLAGS" => "-I/opt/project/embedded/include -O2", "CPPFLAGS" => "-I/opt/project/embedded/include -O2", "LDFLAGS" => "-L/opt/project/embedded/lib", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end + context "on sles 11" do + before do + # sles identifies as suse + stub_ohai(platform: "suse", version: "11.4") + end + it "sets the defaults" do + expect(subject.with_standard_compiler_flags).to eq( + "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", + "CFLAGS" => "-I/opt/project/embedded/include -O2", + "CXXFLAGS" => "-I/opt/project/embedded/include -O2", + "CPPFLAGS" => "-I/opt/project/embedded/include -O2", + "LD_RUN_PATH" => "/opt/project/embedded/lib", + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" + ) + end + + context "with gcc 4.8 installed" do + + before do + allow(subject).to receive(:which).and_return("/usr/bin/gcc-4.8") + end + + it "sets the compiler args" do + expect(subject.with_standard_compiler_flags).to eq( + "CC" => "gcc-4.8", + "CXX" => "g++-4.8", + "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", + "CFLAGS" => "-I/opt/project/embedded/include -O2", + "CXXFLAGS" => "-I/opt/project/embedded/include -O2", + "CPPFLAGS" => "-I/opt/project/embedded/include -O2", + "LD_RUN_PATH" => "/opt/project/embedded/lib", + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" + ) + end + end + end + + context "on sles 12" do + before do + # sles identifies as suse + stub_ohai(platform: "suse", version: "12.1") + end + + it "sets the defaults" do + expect(subject.with_standard_compiler_flags).to eq( + "LDFLAGS" => "-Wl,-rpath,/opt/project/embedded/lib -L/opt/project/embedded/lib", + "CFLAGS" => "-I/opt/project/embedded/include -O2", + "CXXFLAGS" => "-I/opt/project/embedded/include -O2", + "CPPFLAGS" => "-I/opt/project/embedded/include -O2", + "LD_RUN_PATH" => "/opt/project/embedded/lib", + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" + ) + end + end + context "on Windows" do let(:win_arch_i386) { true } before do stub_ohai(platform: "windows", version: "2012") @@ -333,31 +408,33 @@ end context "in 32-bit mode" do it "sets the default" do expect(subject.with_standard_compiler_flags).to eq( - "CFLAGS" => "-I/opt/project/embedded/include -m32 -O2 -fno-lto -march=i686", - "CXXFLAGS" => "-I/opt/project/embedded/include -m32 -O2 -fno-lto -march=i686", - "CPPFLAGS" => "-I/opt/project/embedded/include -m32 -O2 -fno-lto -march=i686", + "CFLAGS" => "-I/opt/project/embedded/include -m32 -O3 -march=i686", + "CXXFLAGS" => "-I/opt/project/embedded/include -m32 -O3 -march=i686", + "CPPFLAGS" => "-I/opt/project/embedded/include -m32 -O3 -march=i686", "LDFLAGS" => "-L/opt/project/embedded/lib -m32 -fno-lto", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end context "in 64-bit mode" do let(:win_arch_i386) { false } it "sets the default" do expect(subject.with_standard_compiler_flags).to eq( - "CFLAGS" => "-I/opt/project/embedded/include -m64 -O2 -fno-lto -march=x86-64", - "CXXFLAGS" => "-I/opt/project/embedded/include -m64 -O2 -fno-lto -march=x86-64", - "CPPFLAGS" => "-I/opt/project/embedded/include -m64 -O2 -fno-lto -march=x86-64", + "CFLAGS" => "-I/opt/project/embedded/include -m64 -O3 -march=x86-64", + "CXXFLAGS" => "-I/opt/project/embedded/include -m64 -O3 -march=x86-64", + "CPPFLAGS" => "-I/opt/project/embedded/include -m64 -O3 -march=x86-64", "LDFLAGS" => "-L/opt/project/embedded/lib -m64 -fno-lto", "LD_RUN_PATH" => "/opt/project/embedded/lib", - "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig" + "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig", + "OMNIBUS_INSTALL_DIR" => "/opt/project" ) end end end @@ -423,13 +500,14 @@ before do stub_env("Path", path) allow(ENV).to receive(:keys).and_return(%w{ Path PATH }) end - it "returns a path key of `Path`" do - expect(subject.with_embedded_path).to eq( - "Path" => prepended_path + it "and raises an error when PATH is also set" do + expect { subject.with_embedded_path }.to raise_error( + RuntimeError, + "The current omnibus environment has multiple PATH/Path variables." ) end end context "`Path` does not exist in the environment" do @@ -444,11 +522,11 @@ end end end end - describe '#ohai' do + describe "#ohai" do before { stub_ohai(platform: "ubuntu", version: "12.04") } it "is a DSL method" do expect(subject).to have_exposed_method(:ohai) end @@ -514,22 +592,22 @@ it "raises an error if it was given a manifest but can't find it's entry" do expect { another_project.manifest_entry }.to raise_error(Manifest::MissingManifestEntry) end end - describe '#<=>' do + describe "#<=>" do let(:zlib) { described_class.new(project).tap { |s| s.name("zlib") } } let(:erchef) { described_class.new(project).tap { |s| s.name("erchef") } } let(:bacon) { described_class.new(project).tap { |s| s.name("bacon") } } it "compares projects by name" do list = [zlib, erchef, bacon] expect(list.sort.map(&:name)).to eq(%w{bacon erchef zlib}) end end - describe '#whitelist_file' do + describe "#whitelist_file" do it "appends to the whitelist_files array" do expect(subject.whitelist_files.size).to eq(0) subject.whitelist_file(/foo\/bar/) expect(subject.whitelist_files.size).to eq(1) end @@ -634,11 +712,11 @@ subject.send(:fetcher) end end end - describe '#fetcher' do + describe "#fetcher" do before do expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", source).and_return("1.2.8") end context "when given a source url to an archive" do @@ -758,10 +836,10 @@ expect(subject.send(:canonicalize_source, original)).to eq(git: "https://github.com/chef/chef.git", submodules: true) expect(original).to eq(github: "chef/chef", submodules: true) end end - describe '#shasum' do + describe "#shasum" do context "when a filepath is given" do let(:path) { "/software.rb" } let(:file) { double(File) } before { subject.instance_variable_set(:@filepath, path) }