Annotation of embedaddon/mtr/test/cmdparse.py, revision 1.1.1.2
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: #
1.1.1.2 ! misho 15: # You should have received a copy of the GNU General Public License along
! 16: # with this program; if not, write to the Free Software Foundation, Inc.,
! 17: # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1.1 misho 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>