diff options
| author | James F. Carter <james.carter@bytemark.co.uk> | 2016-04-21 16:52:15 +0100 | 
|---|---|---|
| committer | James F. Carter <james.carter@bytemark.co.uk> | 2016-04-21 16:52:15 +0100 | 
| commit | fd026c723145db12a88c91125efa37a02e211da4 (patch) | |
| tree | f8b7942b27d917f603cf813dd6cf3c95ace7f2b4 | |
| parent | 0197e6c3e33ae5870436107cdb63fe56f9f45484 (diff) | |
added tftp protocol test
| -rw-r--r-- | lib/custodian/protocoltest/tftp.rb | 116 | ||||
| -rw-r--r-- | lib/custodian/protocoltests.rb | 1 | ||||
| -rwxr-xr-x | t/test-custodian-testfactory.rb | 2 | 
3 files changed, 118 insertions, 1 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'  # diff --git a/t/test-custodian-testfactory.rb b/t/test-custodian-testfactory.rb index f864544..fa5129f 100755 --- a/t/test-custodian-testfactory.rb +++ b/t/test-custodian-testfactory.rb @@ -266,7 +266,7 @@ class TestTestFactory < Test::Unit::TestCase            #            # NOTE: Skip the DNS and LDAP tests - they are more complex.            # -          next if  tst =~ /^(ldap|dns|dnsbl|sslcertificate)$/ +          next if  tst =~ /^(ldap|dns|dnsbl|sslcertificate|tftp)$/            # normal            test_one = "http://foo.com/.com must run #{tst} on 1234" | 
