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" |