diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/custodian/protocoltest/tftp.rb | 116 | ||||
| -rw-r--r-- | lib/custodian/protocoltests.rb | 1 | 
2 files changed, 117 insertions, 0 deletions
| diff --git a/lib/custodian/protocoltest/tftp.rb b/lib/custodian/protocoltest/tftp.rb new file mode 100644 index 0000000..7a6abe3 --- /dev/null +++ b/lib/custodian/protocoltest/tftp.rb @@ -0,0 +1,116 @@ +require 'custodian/settings' +require 'custodian/testfactory' +require 'custodian/util/tftp' + + +# +# The TFTP-protocol test +# +# This object is instantiated if the parser sees a line such as: +# +### +### tftp://foo.vm.bytemark.co.uk/pxelinux.0 must run tftp otherwise 'tftp fail' +### +# +# +module Custodian + +  module ProtocolTest + +    class TFTPTest < TestFactory + +      # +      # The line from which we were constructed. +      # +      attr_reader :line + +      # +      # The TFTP server +      # +      attr_reader :host + +      # +      # The TFTP port +      # +      attr_reader :port + +      # +      # The file on the TFTP server to test +      # +      attr_reader :file + +      # +      # Constructor +      # +      def initialize(line) + +        # +        #  Save the line +        # +        @line = line + +        # +        #  Save the URL +        # +        url  = line.split(/\s+/)[0] + +        # +        #  Ensure we've got a TFTP url. +        # +        if url !~ /^tftp:/ +          raise ArgumentError, "The target wasn't a TFTP URL: #{line}" +        end + +        # +        # Extract host, port and file from URL +        # +        if line =~ /^tftp:\/\/([^\/]+)\/([^\s]*)/ +          @host = $1.split(':')[0] +          @file = $2.dup +          p = $1.split(':')[1] +          @port = (p && p.to_i > 0) ? p.to_i : 69 +        end + +        # +        # Ensure there is a file to fetch +        # +        if @file.nil? || @file.empty? +          raise ArgumentError, "Missing file name" +        end + +      end + +      # +      # Allow this test to be serialized. +      # +      def to_s +        @line +      end + +      # +      # Run the test. +      # +      def run_test +        tftp = Custodian::Util::Tftp.new(@host, @port) +        if tftp.test(@file) +          Custodian::TestResult::TEST_PASSED +        else +          @error = "TFTP failed for #{@file} on #{@host}" +          Custodian::TestResult::TEST_FAILED +        end +      end + +      # +      # If the test fails then report the error. +      # +      def error +        @error +      end + +      register_test_type 'tftp' + +    end + +  end + +end diff --git a/lib/custodian/protocoltests.rb b/lib/custodian/protocoltests.rb index 56fee83..b793b41 100644 --- a/lib/custodian/protocoltests.rb +++ b/lib/custodian/protocoltests.rb @@ -31,6 +31,7 @@ require 'custodian/protocoltest/ssh'  require 'custodian/protocoltest/ssl'  require 'custodian/protocoltest/smtp'  require 'custodian/protocoltest/telnet' +require 'custodian/protocoltest/tftp'  # | 
