summaryrefslogtreecommitdiff
path: root/spec/unit/provider/package/freebsd/pkg_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/provider/package/freebsd/pkg_spec.rb')
-rw-r--r--spec/unit/provider/package/freebsd/pkg_spec.rb274
1 files changed, 0 insertions, 274 deletions
diff --git a/spec/unit/provider/package/freebsd/pkg_spec.rb b/spec/unit/provider/package/freebsd/pkg_spec.rb
deleted file mode 100644
index 29a8bfef44..0000000000
--- a/spec/unit/provider/package/freebsd/pkg_spec.rb
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Authors:: Bryan McLellan (btm@loftninjas.org)
-# Matthew Landauer (matthew@openaustralia.org)
-# Copyright:: Copyright 2009-2016, Bryan McLellan, Matthew Landauer
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require "spec_helper"
-require "ostruct"
-
-describe Chef::Provider::Package::Freebsd::Pkg, "load_current_resource" do
- before(:each) do
- @node = Chef::Node.new
- @events = Chef::EventDispatch::Dispatcher.new
- @run_context = Chef::RunContext.new(@node, {}, @events)
- @new_resource = Chef::Resource::Package.new("zsh")
- @current_resource = Chef::Resource::Package.new("zsh")
-
- @provider = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context)
- @provider.current_resource = @current_resource
- allow(::File).to receive(:exist?).with("/usr/ports/Makefile").and_return(false)
- allow(::File).to receive(:exist?).with("/usr/ports/www/wordpress").and_return(false)
- allow(::File).to receive(:exist?).with("www/wordpress").and_return(false)
- end
-
- describe "when determining the current package state" do
- before do
- allow(@provider).to receive(:ports_candidate_version).and_return("4.3.6")
- end
-
- it "should create a current resource with the name of the new_resource" do
- current_resource = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context).current_resource
- expect(current_resource.name).to eq("zsh")
- end
-
- it "should return a version if the package is installed" do
- expect(@provider).to receive(:current_installed_version).and_return("4.3.6_7")
- @provider.load_current_resource
- expect(@current_resource.version).to eq("4.3.6_7")
- end
-
- it "should return nil if the package is not installed" do
- expect(@provider).to receive(:current_installed_version).and_return(nil)
- @provider.load_current_resource
- expect(@current_resource.version).to be_nil
- end
-
- it "should return a candidate version if it exists" do
- expect(@provider).to receive(:current_installed_version).and_return(nil)
- @provider.load_current_resource
- expect(@provider.candidate_version).to eql("4.3.6")
- end
- end
-
- describe "when querying for package state and properties" do
- before do
- # @new_resource = Chef::Resource::Package.new("zsh")
-
- # @provider = Chef::Provider::Package::Freebsd::Pkg.new(@node, @new_resource)
-
- # @status = double("Status", :exitstatus => 0)
- # @stdin = double("STDIN", :null_object => true)
- # @stdout = double("STDOUT", :null_object => true)
- # @stderr = double("STDERR", :null_object => true)
- # @pid = double("PID", :null_object => true)
- end
-
- it "should return the version number when it is installed" do
- pkg_info = OpenStruct.new(stdout: "zsh-4.3.6_7")
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_info", "-E", "zsh*", env: nil, returns: [0, 1], timeout: 900).and_return(pkg_info)
- allow(@provider).to receive(:package_name).and_return("zsh")
- expect(@provider.current_installed_version).to eq("4.3.6_7")
- end
-
- it "does not set the current version number when the package is not installed" do
- pkg_info = OpenStruct.new(stdout: "")
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_info", "-E", "zsh*", env: nil, returns: [0, 1], timeout: 900).and_return(pkg_info)
- allow(@provider).to receive(:package_name).and_return("zsh")
- expect(@provider.current_installed_version).to be_nil
- end
-
- it "should return the port path for a valid port name" do
- whereis = OpenStruct.new(stdout: "zsh: /usr/ports/shells/zsh")
- expect(@provider).to receive(:shell_out_compacted!).with("whereis", "-s", "zsh", env: nil, timeout: 900).and_return(whereis)
- allow(@provider).to receive(:port_name).and_return("zsh")
- expect(@provider.port_path).to eq("/usr/ports/shells/zsh")
- end
-
- # Not happy with the form of these tests as they are far too closely tied to the implementation and so very fragile.
- it "should return the ports candidate version when given a valid port path" do
- allow(@provider).to receive(:port_path).and_return("/usr/ports/shells/zsh")
- make_v = OpenStruct.new(stdout: "4.3.6\n", exitstatus: 0)
- expect(@provider).to receive(:shell_out_compacted!).with("make", "-V", "PORTVERSION", { cwd: "/usr/ports/shells/zsh", returns: [0, 1], env: nil, timeout: 900 }).and_return(make_v)
- expect(@provider.ports_candidate_version).to eq("4.3.6")
- end
-
- it "should figure out the package name when we have ports" do
- allow(::File).to receive(:exist?).with("/usr/ports/Makefile").and_return(true)
- allow(@provider).to receive(:port_path).and_return("/usr/ports/shells/zsh")
- make_v = OpenStruct.new(stdout: "zsh-4.3.6_7\n", exitstatus: 0)
- expect(@provider).to receive(:shell_out_compacted!).with("make", "-V", "PKGNAME", { cwd: "/usr/ports/shells/zsh", env: nil, returns: [0, 1], timeout: 900 }).and_return(make_v)
- # @provider.should_receive(:ports_makefile_variable_value).with("PKGNAME").and_return("zsh-4.3.6_7")
- expect(@provider.package_name).to eq("zsh")
- end
- end
-
- describe Chef::Provider::Package::Freebsd::Pkg, "install_package" do
- before(:each) do
- @cmd_result = OpenStruct.new(status: true)
-
- @provider.current_resource = @current_resource
- allow(@provider).to receive(:package_name).and_return("zsh")
- allow(@provider).to receive(:latest_link_name).and_return("zsh")
- allow(@provider).to receive(:port_path).and_return("/usr/ports/shells/zsh")
- end
-
- it "should run pkg_add -r with the package name" do
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_add", "-r", "zsh", env: nil, timeout: 900).and_return(@cmd_result)
- @provider.install_package("zsh", "4.3.6_7")
- end
- end
-
- describe Chef::Provider::Package::Freebsd::Pkg, "port path" do
- before do
- # @node = Chef::Node.new
- @new_resource = Chef::Resource::Package.new("zsh")
- @new_resource.cookbook_name = "adventureclub"
- @provider = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context)
- end
-
- it "should figure out the port path from the package_name using whereis" do
- whereis = OpenStruct.new(stdout: "zsh: /usr/ports/shells/zsh")
- expect(@provider).to receive(:shell_out_compacted!).with("whereis", "-s", "zsh", env: nil, timeout: 900).and_return(whereis)
- expect(@provider.port_path).to eq("/usr/ports/shells/zsh")
- end
-
- it "should use the package_name as the port path when it starts with /" do
- new_resource = Chef::Resource::Package.new("/usr/ports/www/wordpress")
- provider = Chef::Provider::Package::Freebsd::Pkg.new(new_resource, @run_context)
- expect(provider).not_to receive(:popen4)
- expect(provider.port_path).to eq("/usr/ports/www/wordpress")
- end
-
- it "should use the package_name as a relative path from /usr/ports when it contains / but doesn't start with it" do
- # @new_resource = double( "Chef::Resource::Package",
- # :package_name => "www/wordpress",
- # :cookbook_name => "xenoparadox")
- new_resource = Chef::Resource::Package.new("www/wordpress")
- provider = Chef::Provider::Package::Freebsd::Pkg.new(new_resource, @run_context)
- expect(provider).not_to receive(:popen4)
- expect(provider.port_path).to eq("/usr/ports/www/wordpress")
- end
- end
-
- describe Chef::Provider::Package::Freebsd::Pkg, "ruby-iconv (package with a dash in the name)" do
- before(:each) do
- @new_resource = Chef::Resource::Package.new("ruby-iconv")
- @current_resource = Chef::Resource::Package.new("ruby-iconv")
- @provider = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context)
- @provider.current_resource = @current_resource
- allow(@provider).to receive(:port_path).and_return("/usr/ports/converters/ruby-iconv")
- allow(@provider).to receive(:package_name).and_return("ruby18-iconv")
- allow(@provider).to receive(:latest_link_name).and_return("ruby18-iconv")
-
- @install_result = OpenStruct.new(status: true)
- end
-
- it "should run pkg_add -r with the package name" do
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_add", "-r", "ruby18-iconv", env: nil, timeout: 900).and_return(@install_result)
- @provider.install_package("ruby-iconv", "1.0")
- end
- end
-
- describe Chef::Provider::Package::Freebsd::Pkg, "remove_package" do
- before(:each) do
- @pkg_delete = OpenStruct.new(status: true)
- @new_resource.version "4.3.6_7"
- @current_resource.version "4.3.6_7"
- @provider.current_resource = @current_resource
- allow(@provider).to receive(:package_name).and_return("zsh")
- end
-
- it "should run pkg_delete with the package name and version" do
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_delete", "zsh-4.3.6_7", env: nil, timeout: 900).and_return(@pkg_delete)
- @provider.remove_package("zsh", "4.3.6_7")
- end
- end
-
- # CHEF-4371
- # There are some port names that contain special characters such as +'s. This breaks the regular expression used to determine what
- # version of a package is currently installed and to get the port_path.
- # Example package name: bonnie++
-
- describe Chef::Provider::Package::Freebsd::Pkg, "bonnie++ (package with a plus in the name :: CHEF-4371)" do
- before(:each) do
- @new_resource = Chef::Resource::Package.new("bonnie++")
- @current_resource = Chef::Resource::Package.new("bonnie++")
- @provider = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context)
- @provider.current_resource = @current_resource
- end
-
- it "should return the port path for a valid port name" do
- whereis = OpenStruct.new(stdout: "bonnie++: /usr/ports/benchmarks/bonnie++")
- expect(@provider).to receive(:shell_out_compacted!).with("whereis", "-s", "bonnie++", env: nil, timeout: 900).and_return(whereis)
- allow(@provider).to receive(:port_name).and_return("bonnie++")
- expect(@provider.port_path).to eq("/usr/ports/benchmarks/bonnie++")
- end
-
- it "should return the version number when it is installed" do
- pkg_info = OpenStruct.new(stdout: "bonnie++-1.96")
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_info", "-E", "bonnie++*", env: nil, returns: [0, 1], timeout: 900).and_return(pkg_info)
- allow(@provider).to receive(:package_name).and_return("bonnie++")
- expect(@provider.current_installed_version).to eq("1.96")
- end
- end
-
- # A couple of examples to show up the difficulty of determining the command to install the binary package given the port:
- # PORT DIRECTORY INSTALLED PACKAGE NAME COMMAND TO INSTALL PACKAGE
- # /usr/ports/lang/perl5.8 perl-5.8.8_1 pkg_add -r perl
- # /usr/ports/databases/mysql50-server mysql-server-5.0.45_1 pkg_add -r mysql50-server
- #
- # So, in one case it appears the command to install the package can be derived from the name of the port directory and in the
- # other case it appears the command can be derived from the package name. Very confusing!
- # Well, luckily, after much poking around, I discovered that the two can be disambiguated through the use of the LATEST_LINK
- # variable which is set by the ports Makefile
- #
- # PORT DIRECTORY LATEST_LINK INSTALLED PACKAGE NAME COMMAND TO INSTALL PACKAGE
- # /usr/ports/lang/perl5.8 perl perl-5.8.8_1 pkg_add -r perl
- # /usr/ports/databases/mysql50-server mysql50-server mysql-server-5.0.45_1 pkg_add -r mysql50-server
- #
- # The variable LATEST_LINK is named that way because the directory that "pkg_add -r" downloads from is called "Latest" and
- # contains the "latest" versions of package as symbolic links to the files in the "All" directory.
-
- describe Chef::Provider::Package::Freebsd::Pkg, "install_package latest link fixes" do
- it "should install the perl binary package with the correct name" do
- @new_resource = Chef::Resource::Package.new("perl5.8")
- @current_resource = Chef::Resource::Package.new("perl5.8")
- @provider = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context)
- @provider.current_resource = @current_resource
- allow(@provider).to receive(:package_name).and_return("perl")
- allow(@provider).to receive(:latest_link_name).and_return("perl")
-
- cmd = OpenStruct.new(status: true)
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_add", "-r", "perl", env: nil, timeout: 900).and_return(cmd)
- @provider.install_package("perl5.8", "5.8.8_1")
- end
-
- it "should install the mysql50-server binary package with the correct name" do
-
- @new_resource = Chef::Resource::Package.new("mysql50-server")
- @current_resource = Chef::Resource::Package.new("mysql50-server")
- @provider = Chef::Provider::Package::Freebsd::Pkg.new(@new_resource, @run_context)
- @provider.current_resource = @current_resource
- allow(@provider).to receive(:package_name).and_return("mysql-server")
- allow(@provider).to receive(:latest_link_name).and_return("mysql50-server")
-
- cmd = OpenStruct.new(status: true)
- expect(@provider).to receive(:shell_out_compacted!).with("pkg_add", "-r", "mysql50-server", env: nil, timeout: 900).and_return(cmd)
- @provider.install_package("mysql50-server", "5.0.45_1")
- end
- end
-end