Annotation of embedaddon/mtr/test/cmdparse.py, revision 1.1
1.1 ! misho 1: #!/usr/bin/env python
! 2: #
! 3: # mtr -- a network diagnostic tool
! 4: # Copyright (C) 2016 Matt Kimball
! 5: #
! 6: # This program is free software; you can redistribute it and/or modify
! 7: # it under the terms of the GNU General Public License version 2 as
! 8: # published by the Free Software Foundation.
! 9: #
! 10: # This program is distributed in the hope that it will be useful,
! 11: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 12: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 13: # GNU General Public License for more details.
! 14: #
! 15: # You should have received a copy of the GNU General Public License
! 16: # along with this program; if not, write to the Free Software
! 17: # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
! 18: #
! 19:
! 20: '''Test mtr-packet's command parsing.'''
! 21:
! 22:
! 23: import time
! 24: import unittest
! 25:
! 26: import mtrpacket
! 27:
! 28:
! 29: class TestCommandParse(mtrpacket.MtrPacketTest):
! 30: '''Test cases with malformed commands and version checks'''
! 31:
! 32: def test_unknown_command(self):
! 33: 'Test sending a command unknown to mtr-packet'
! 34:
! 35: self.write_command('13 argle-bargle')
! 36: self.assertEqual(self.read_reply(), '13 unknown-command')
! 37:
! 38: def test_malformed_command(self):
! 39: 'Test sending a malformed command request to mtr-packet'
! 40:
! 41: self.write_command('malformed')
! 42: self.assertEqual(self.read_reply(), '0 command-parse-error')
! 43:
! 44: def test_exit_on_stdin_closed(self):
! 45: '''Test that the packet process terminates after stdin is closed
! 46:
! 47: Test that, when outstanding requests are complete, the process
! 48: terminates following stdin being closed.'''
! 49:
! 50: self.write_command('15 send-probe ip-4 8.8.254.254 timeout 1')
! 51: self.packet_process.stdin.close()
! 52: time.sleep(2)
! 53: self.read_reply()
! 54: exit_code = self.packet_process.poll()
! 55: self.assertIsNotNone(exit_code)
! 56:
! 57: def test_invalid_argument(self):
! 58: 'Test sending invalid arguments with probe requests'
! 59:
! 60: bad_commands = [
! 61: '22 send-probe',
! 62: '23 send-probe ip-4 str-value',
! 63: '24 send-probe ip-4 8.8.8.8 timeout str-value',
! 64: '25 send-probe ip-4 8.8.8.8 ttl str-value',
! 65: ]
! 66:
! 67: for cmd in bad_commands:
! 68: self.write_command(cmd)
! 69: reply = self.parse_reply()
! 70: self.assertEqual(reply.command_name, 'invalid-argument')
! 71:
! 72: def test_versioning(self):
! 73: 'Test version checks and feature support checks'
! 74:
! 75: feature_tests = [
! 76: ('31 check-support feature ip-4', 'ok'),
! 77: ('32 check-support feature send-probe', 'ok'),
! 78: ('33 check-support feature bogus-feature', 'no')
! 79: ]
! 80:
! 81: self.write_command('30 check-support feature version')
! 82: reply = self.parse_reply()
! 83: self.assertEqual(reply.token, 30)
! 84: self.assertEqual(reply.command_name, 'feature-support')
! 85: self.assertIn('support', reply.argument)
! 86:
! 87: for (request, expected) in feature_tests:
! 88: self.write_command(request)
! 89: reply = self.parse_reply()
! 90: self.assertEqual(reply.command_name, 'feature-support')
! 91: self.assertIn('support', reply.argument)
! 92: self.assertEqual(reply.argument['support'], expected)
! 93:
! 94: def test_command_overflow(self):
! 95: 'Test overflowing the incoming command buffer'
! 96:
! 97: big_buffer = 'x' * (64 * 1024)
! 98: self.write_command(big_buffer)
! 99:
! 100: reply = self.read_reply()
! 101: self.assertEqual(reply, '0 command-buffer-overflow')
! 102:
! 103:
! 104: if __name__ == '__main__':
! 105: mtrpacket.check_running_as_root()
! 106: unittest.main()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>