require 'spec_helper'
require 'ronin/network/telnet'

describe Network::Telnet do
  describe "helpers", :network do
    let(:host) { 'towel.blinkenlights.nl' }

    subject do
      obj = Object.new
      obj.extend described_class
      obj
    end

    describe "#telnet_connect" do
      it "should return a Net::Telnet object" do
        telnet = subject.telnet_connect(host)

        telnet.should be_kind_of(Net::Telnet)
        telnet.close
      end

      it "should connect to a telnet service on port 23" do
        telnet = subject.telnet_connect(host)

        telnet.close
      end

      context "when given a block" do
        it "should yield the new Net::Telnet object" do
          telnet = nil

          subject.telnet_connect(host) do |telnet_object|
            telnet = telnet_object
          end

          telnet.should be_kind_of(Net::Telnet)
          telnet.close
        end
      end
    end

    describe "#telnet_session" do
      it "should yield a new Net::Telnet object" do
        yielded_telnet = nil

        subject.telnet_session(host) do |telnet|
          yielded_telnet = telnet
        end

        yielded_telnet.should be_kind_of(Net::Telnet)
      end

      it "should close the Telnet session after yielding it" do
        session  = nil
        was_open = nil

        subject.telnet_session(host) do |telnet|
          session   = telnet
          was_open  = !telnet.sock.closed?
        end

        was_open.should == true
        session.sock.should be_closed
      end
    end
  end
end