################################################################################
#
#      Author: Zachary Patten <zachary@jovelabs.net>
#   Copyright: Copyright (c) Jove Labs
#     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"

describe ZTK::SSH do

  subject { ZTK::SSH.new }

  before(:all) do
    $stdout = File.open("/dev/null", "w")
    $stderr = File.open("/dev/null", "w")
    $stdin = File.open("/dev/null", "r")
  end

  describe "class" do

    it "should be an instance of ZTK::SSH" do
      subject.should be_an_instance_of ZTK::SSH
    end

    describe "default config" do

      it "should use $stdout as the default" do
        subject.config.stdout.should be_a_kind_of $stdout.class
        subject.config.stdout.should == $stdout
      end

      it "should use $stderr as the default" do
        subject.config.stderr.should be_a_kind_of $stderr.class
        subject.config.stderr.should == $stderr
      end

      it "should use $stdin as the default" do
        subject.config.stdin.should be_a_kind_of $stdin.class
        subject.config.stdin.should == $stdin
      end

      it "should use $logger as the default" do
        subject.config.logger.should be_a_kind_of ZTK::Logger
        subject.config.logger.should == $logger
      end

    end

  end

  # this stuff doesn't work as is under travis-ci
  if !ENV['CI'] && !ENV['TRAVIS']

    it "should be able to connect to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
      stdout = StringIO.new
      subject.config do |config|
        config.stdout = stdout
        config.user = ENV["USER"]
        config.host_name = "127.0.0.1"
      end
      hostname = %x( hostname -f ).chomp
      status = subject.exec("hostname -f")
      status.exit.exitstatus.should == 0
      stdout.rewind
      stdout.read.chomp.should == hostname
    end

    it "should be able to proxy through 127.0.0.1, connecting to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
      stdout = StringIO.new
      subject.config do |config|
        config.stdout = stdout
        config.user = ENV["USER"]
        config.host_name = "127.0.0.1"
        config.proxy_user = ENV["USER"]
        config.proxy_host_name = "127.0.0.1"
      end
      hostname = %x( hostname -f ).chomp
      status = subject.exec("hostname -f")
      status.exit.exitstatus.should == 0
      stdout.rewind
      stdout.read.chomp.should == hostname
    end

  end

end