1# Copyright (C) 2011 Jeff Forcier <jeff@bitprophet.org> 2# 3# This file is part of ssh. 4# 5# 'ssh' is free software; you can redistribute it and/or modify it under the 6# terms of the GNU Lesser General Public License as published by the Free 7# Software Foundation; either version 2.1 of the License, or (at your option) 8# any later version. 9# 10# 'ssh' is distrubuted in the hope that it will be useful, but WITHOUT ANY 11# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 12# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 13# details. 14# 15# You should have received a copy of the GNU Lesser General Public License 16# along with 'ssh'; if not, write to the Free Software Foundation, Inc., 17# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA. 18 19""" 20Some unit tests for ssh protocol message blocks. 21""" 22 23import unittest 24from ssh.message import Message 25 26 27class MessageTest (unittest.TestCase): 28 29 __a = '\x00\x00\x00\x17\x07\x60\xe0\x90\x00\x00\x00\x01q\x00\x00\x00\x05hello\x00\x00\x03\xe8' + ('x' * 1000) 30 __b = '\x01\x00\xf3\x00\x3f\x00\x00\x00\x10huey,dewey,louie' 31 __c = '\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\xf5\xe4\xd3\xc2\xb1\x09\x00\x00\x00\x01\x11\x00\x00\x00\x07\x00\xf5\xe4\xd3\xc2\xb1\x09\x00\x00\x00\x06\x9a\x1b\x2c\x3d\x4e\xf7' 32 __d = '\x00\x00\x00\x05\x00\x00\x00\x05\x11\x22\x33\x44\x55\x01\x00\x00\x00\x03cat\x00\x00\x00\x03a,b' 33 34 def test_1_encode(self): 35 msg = Message() 36 msg.add_int(23) 37 msg.add_int(123789456) 38 msg.add_string('q') 39 msg.add_string('hello') 40 msg.add_string('x' * 1000) 41 self.assertEquals(str(msg), self.__a) 42 43 msg = Message() 44 msg.add_boolean(True) 45 msg.add_boolean(False) 46 msg.add_byte('\xf3') 47 msg.add_bytes('\x00\x3f') 48 msg.add_list(['huey', 'dewey', 'louie']) 49 self.assertEquals(str(msg), self.__b) 50 51 msg = Message() 52 msg.add_int64(5) 53 msg.add_int64(0xf5e4d3c2b109L) 54 msg.add_mpint(17) 55 msg.add_mpint(0xf5e4d3c2b109L) 56 msg.add_mpint(-0x65e4d3c2b109L) 57 self.assertEquals(str(msg), self.__c) 58 59 def test_2_decode(self): 60 msg = Message(self.__a) 61 self.assertEquals(msg.get_int(), 23) 62 self.assertEquals(msg.get_int(), 123789456) 63 self.assertEquals(msg.get_string(), 'q') 64 self.assertEquals(msg.get_string(), 'hello') 65 self.assertEquals(msg.get_string(), 'x' * 1000) 66 67 msg = Message(self.__b) 68 self.assertEquals(msg.get_boolean(), True) 69 self.assertEquals(msg.get_boolean(), False) 70 self.assertEquals(msg.get_byte(), '\xf3') 71 self.assertEquals(msg.get_bytes(2), '\x00\x3f') 72 self.assertEquals(msg.get_list(), ['huey', 'dewey', 'louie']) 73 74 msg = Message(self.__c) 75 self.assertEquals(msg.get_int64(), 5) 76 self.assertEquals(msg.get_int64(), 0xf5e4d3c2b109L) 77 self.assertEquals(msg.get_mpint(), 17) 78 self.assertEquals(msg.get_mpint(), 0xf5e4d3c2b109L) 79 self.assertEquals(msg.get_mpint(), -0x65e4d3c2b109L) 80 81 def test_3_add(self): 82 msg = Message() 83 msg.add(5) 84 msg.add(0x1122334455L) 85 msg.add(True) 86 msg.add('cat') 87 msg.add(['a', 'b']) 88 self.assertEquals(str(msg), self.__d) 89 90 def test_4_misc(self): 91 msg = Message(self.__d) 92 self.assertEquals(msg.get_int(), 5) 93 self.assertEquals(msg.get_mpint(), 0x1122334455L) 94 self.assertEquals(msg.get_so_far(), self.__d[:13]) 95 self.assertEquals(msg.get_remainder(), self.__d[13:]) 96 msg.rewind() 97 self.assertEquals(msg.get_int(), 5) 98 self.assertEquals(msg.get_so_far(), self.__d[:4]) 99 self.assertEquals(msg.get_remainder(), self.__d[4:]) 100 101