#
# Tests Solaris OS abstraction code
#

require File.expand_path('tpkgtest', File.dirname(__FILE__))

class TpkgOSSolarisTests < Test::Unit::TestCase
  include TpkgTests
  
  def setup
    @pkginfo = File.join(TESTCMDDIR, 'solaris/pkginfo')
    @pkgutil = File.join(TESTCMDDIR, 'solaris/pkgutil')
    @solaris = Tpkg::OS::Solaris.new(
      :pkginfocmd => @pkginfo,
      :pkgutilcmd => @pkgutil,
      )
  end
  
  def test_supported
    fact = Facter::Util::Fact.new('operatingsystem')
    Facter.expects(:[]).with('operatingsystem').returns(fact).at_least_once
    fact.stubs(:value).returns('Solaris')
    assert Tpkg::OS::Solaris.supported?
    fact.stubs(:value).returns('Other')
    refute Tpkg::OS::Solaris.supported?
  end
  def test_initialize
    [:pkginfocmd, :pkgutilcmd].each do |cmdvar|
      solaris = Tpkg::OS::Solaris.new(cmdvar => TESTCMD)
      assert_equal TESTCMD, solaris.instance_variable_get("@#{cmdvar}")
      solaris = Tpkg::OS::Solaris.new(:testcmd => TESTCMD)
      assert_equal TESTCMD, solaris.instance_variable_get("@#{cmdvar}")
    end
    # Test that super is called
    [true, false].each do |debugval|
      solaris = Tpkg::OS::Solaris.new(:debug => debugval)
      assert_equal debugval, solaris.instance_variable_get(:@debug)
    end
  end
  def test_init_links
    correct = (2..3).collect{|i| "/etc/rc#{i}.d/S99script"}
    assert_equal correct, @solaris.init_links('/path/to/init/script', {:init => {}})
  end
  def test_available_native_packages
    assert_equal(
      [
        {:metadata=>
          {:name=>'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'},
          :source=>:native_installed,
          :prefer=>true},
        {:metadata=>
          {:name=>'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'},
          :source=>:native_available},
      ],
      @solaris.available_native_packages('CSWcurl'))
    assert_equal(
      [
        {:metadata=>
          {:name=>'CSWwget', :version=>'1.13.4', :package_version=>'2012.05.12'},
          :source=>:native_available},
      ],
      @solaris.available_native_packages('CSWwget'))
    assert_equal(
      [
        {:metadata=>
          {:name=>'SUNWzfsu', :version=>'11.10.0', :package_version=>'2006.05.18.01.46'},
          :source=>:native_installed,
          :prefer=>true},
      ],
      @solaris.available_native_packages('SUNWzfsu'))
    assert_equal [], @solaris.available_native_packages('bogus')
  end
  def test_native_pkg_to_install_string
    assert_equal 'pkg-1.0,REV=1', @solaris.native_pkg_to_install_string({:metadata => {:name => 'pkg', :version => '1.0', :package_version => '1'}})
    assert_equal 'pkg-1.0', @solaris.native_pkg_to_install_string({:metadata => {:name => 'pkg', :version => '1.0'}})
  end
  def test_install_native_package
    @solaris.expects(:system).with("#{@pkgutil} -y -i CSWcurl-7.25.0,REV=2012.04.26")
    @solaris.install_native_package({:metadata => {:name => 'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'}})
  end
  def test_upgrade_native_package
    @solaris.expects(:system).with("#{@pkgutil} -y -u CSWcurl-7.25.0,REV=2012.04.26")
    @solaris.upgrade_native_package({:metadata => {:name => 'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'}})
  end
end