021-ssl-protocol.t 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. BEGIN {
  5. use File::Basename;
  6. use lib (dirname(__FILE__));
  7. }
  8. use IO::Select;
  9. use IO::Socket;
  10. use IO::Socket::SSL;
  11. use Test::More;
  12. use nrpe;
  13. my @response;
  14. if (!supports_ssl()) {
  15. plan skip_all => 'SSL/TLS support unavailable.';
  16. }
  17. plan tests => 16;
  18. ensure_daemon_running();
  19. switch_config_file("configs/ssl.cfg");
  20. restart_daemon();
  21. # v4
  22. @response = send_request('port' => 40321);
  23. is_response(\@response, 'v4 version check');
  24. @response = send_request('port' => 40321, 'length' => +10);
  25. is_response(\@response, 'v4 version check - large');
  26. @response = send_request('port' => 40321, 'length' => -10);
  27. isnt_response(\@response, "v4 version check - short"); # Expected failure - server read timeout
  28. @response = send_request('port' => 40321, 'crc' => 0);
  29. isnt_response(\@response, "v4 version check - invalid crc"); # Expected failure - crc
  30. @response = send_request('port' => 40321, 'type' => 20);
  31. isnt_response(\@response, "v4 version check - invalid type"); # Expected failure - invalid type
  32. # v3
  33. @response = send_request('port' => 40321, 'version' => 3);
  34. isnt_response(\@response, 'v3 version check'); # Expected failure
  35. # v2
  36. @response = send_request('port' => 40321, 'version' => 2);
  37. is_response(\@response, 'v2 version check', 'version' => 2);
  38. # SSL/TLS Connection/Handshake Timeout
  39. SKIP: {
  40. my $client = IO::Socket->new(
  41. Domain => AF_INET,
  42. Type => SOCK_STREAM,
  43. proto => 'tcp',
  44. PeerHost => 'localhost',
  45. PeerPort => 40321,
  46. ) || skip 'failed create socket', 1;
  47. my $sel = IO::Select->new( $client );
  48. my @c = $sel->can_read(15);
  49. is(@c, 1, 'SSL/TLS Handshake timeout');
  50. $client->close();
  51. }
  52. # SSL/TLS short header - result (less than common)
  53. send_and_wait_for_timeout(pack('n!n!N! ', 4, 1, 0), 'v4 missing result');
  54. # SSL/TLS short header - alignment
  55. send_and_wait_for_timeout(pack('n!n!N!n! ', 4, 1, 0, 0), 'v4 missing alignmnet');
  56. # SSL/TLS short header - buffer size
  57. send_and_wait_for_timeout(pack('n!n!N!n! n!', 4, 1, 0, 0, 0), 'v4 buffer size');
  58. # SSL/TLS large buffer size
  59. send_and_wait_for_timeout(pack('n!n!N!n! n! N!', 4, 1, 0, 0, 0, 75*1024), 'v4 large buffer size', 'timeout' => 0);
  60. done_testing();