From fd026c723145db12a88c91125efa37a02e211da4 Mon Sep 17 00:00:00 2001 From: "James F. Carter" Date: Thu, 21 Apr 2016 16:52:15 +0100 Subject: added tftp protocol test --- lib/custodian/protocoltest/tftp.rb | 116 +++++++++++++++++++++++++++++++++++++ lib/custodian/protocoltests.rb | 1 + t/test-custodian-testfactory.rb | 2 +- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 lib/custodian/protocoltest/tftp.rb 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" -- cgit v1.2.1