[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, experimental, updated. debian/2.6.8-1-844-g7ec39d5

James Turnbull james at lovedthanlost.net
Tue May 10 08:11:40 UTC 2011


The following commit has been merged in the experimental branch:
commit 358245a823c1e2ed6fa2351130cf98678bd02e0d
Author: Brice Figureau <brice-puppet at daysofwonder.com>
Date:   Mon Jan 3 19:49:12 2011 +0100

    Telnet transport to connect to remote network device
    
    It is based on net/telnet.
    
    Signed-off-by: Brice Figureau <brice-puppet at daysofwonder.com>

diff --git a/lib/puppet/util/network_device/transport/telnet.rb b/lib/puppet/util/network_device/transport/telnet.rb
new file mode 100644
index 0000000..e55079e
--- /dev/null
+++ b/lib/puppet/util/network_device/transport/telnet.rb
@@ -0,0 +1,42 @@
+require 'puppet/util/network_device'
+require 'puppet/util/network_device/transport'
+require 'puppet/util/network_device/transport/base'
+require 'net/telnet'
+
+class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevice::Transport::Base
+    def initialize
+      super
+    end
+
+    def handles_login?
+      false
+    end
+
+    def connect
+      @telnet = Net::Telnet::new("Host" => host, "Port" => port || 23,
+                                 "Timeout" => 10,
+                                 "Prompt" => default_prompt, "Output_log" => "/tmp/out.log")
+    end
+
+    def close
+      @telnet.close if @telnet
+      @telnet = nil
+    end
+
+    def expect(prompt)
+      @telnet.waitfor(prompt) do |out|
+        yield out if block_given?
+      end
+    end
+
+    def command(cmd, options = {})
+      send(cmd)
+      expect(options[:prompt] || default_prompt) do |output|
+        yield output if block_given?
+      end
+    end
+
+    def send(line)
+      @telnet.puts(line)
+    end
+end
\ No newline at end of file
diff --git a/spec/unit/util/network_device/transport/telnet_spec.rb b/spec/unit/util/network_device/transport/telnet_spec.rb
new file mode 100644
index 0000000..7499b52
--- /dev/null
+++ b/spec/unit/util/network_device/transport/telnet_spec.rb
@@ -0,0 +1,76 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../../spec_helper'
+
+require 'puppet/util/network_device/transport/telnet'
+
+describe Puppet::Util::NetworkDevice::Transport::Telnet do
+
+  before(:each) do
+    @transport = Puppet::Util::NetworkDevice::Transport::Telnet.new()
+  end
+
+  it "should not handle login through the transport" do
+    @transport.should_not be_handles_login
+  end
+
+  it "should connect to the given host and port" do
+    Net::Telnet.expects(:new).with { |args| args["Host"] == "localhost" && args["Port"] == 23 }.returns stub_everything
+    @transport.host = "localhost"
+    @transport.port = 23
+
+    @transport.connect
+  end
+
+  it "should connect and specify the default prompt" do
+    @transport.default_prompt = "prompt"
+    Net::Telnet.expects(:new).with { |args| args["Prompt"] == "prompt" }.returns stub_everything
+    @transport.host = "localhost"
+    @transport.port = 23
+
+    @transport.connect
+  end
+
+  describe "when connected" do
+    before(:each) do
+      @telnet = stub_everything 'telnet'
+      Net::Telnet.stubs(:new).returns(@telnet)
+      @transport.connect
+    end
+
+    it "should send line to the telnet session" do
+      @telnet.expects(:puts).with("line")
+      @transport.send("line")
+    end
+
+    describe "when expecting output" do
+      it "should waitfor output on the telnet session" do
+        @telnet.expects(:waitfor).with(/regex/)
+        @transport.expect(/regex/)
+      end
+
+      it "should return telnet session output" do
+        @telnet.expects(:waitfor).returns("output")
+        @transport.expect(/regex/).should == "output"
+      end
+
+      it "should yield telnet session output to the given block" do
+        @telnet.expects(:waitfor).yields("output")
+        @transport.expect(/regex/) { |out| out.should == "output" }
+      end
+    end
+  end
+
+  describe "when closing" do
+    before(:each) do
+      @telnet = stub_everything 'telnet'
+      Net::Telnet.stubs(:new).returns(@telnet)
+      @transport.connect
+    end
+
+    it "should close the telnet session" do
+      @telnet.expects(:close)
+      @transport.close
+    end
+  end
+end
\ No newline at end of file

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list