root/trunk/RBTelepathy/test/test_packet.py

Revision 455, 5.3 kB (checked in by sholloway, 6 years ago)

*** empty log message ***

Line 
1 #!/usr/bin/env python
2 ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 ##~ License
4 ##~
5 ##- The RuneBlade Foundation library is intended to ease some
6 ##- aspects of writing intricate Jabber, XML, and User Interface (wxPython, etc.)
7 ##- applications, while providing the flexibility to modularly change the
8 ##- architecture. Enjoy.
9 ##~
10 ##~ Copyright (C) 2002  TechGame Networks, LLC.
11 ##~
12 ##~ This library is free software; you can redistribute it and/or
13 ##~ modify it under the terms of the BSD style License as found in the
14 ##~ LICENSE file included with this distribution.
15 ##~
16 ##~ TechGame Networks, LLC can be reached at:
17 ##~ 3578 E. Hartsel Drive #211
18 ##~ Colorado Springs, Colorado, USA, 80920
19 ##~
20 ##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21
22 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 #~ Imports
24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25
26 # Path adjustmet so the test can run out of the box
27 import sys; sys.path.append('..')
28 from test import test_support
29 import unittest
30
31 from RBTelepathy import Packet
32
33 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 #~ Definitions
35 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36
37 class AddressedPacketTestCase(unittest.TestCase):
38     toAddresses = ('someone', 'act@network')
39     XMLHeader = '''<message><to addr='%s'/><to addr='%s'/></message>''' % toAddresses
40     Data = ''
41
42     def setUp(self):
43         self.builder = Packet.StandardStreamPacketBuilder()
44
45     def testAddressesMatch(self):
46         """Test parsed element addresses match inputs"""
47         packet = self.builder.BuildPacket(self.XMLHeader)
48         toNodes = packet._getElements(node='to')
49         self.failUnlessEqual(len(toNodes), len(self.toAddresses))
50         for value, expected in zip(toNodes, self.toAddresses):
51             self.failUnlessEqual(str(value.addr), expected)
52
53 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54
55 class TerminateStreamPacketTestCase(unittest.TestCase):
56     DataStreams = [
57         ("<stream format='term'/>", "Terminated data test #1", "\x04"),
58         ("<stream format='term'/>", "Test #2 for terminated data", "\x04"),
59         ("<stream format='term'/>", unittest.__doc__, "\x04"),
60
61         ("<stream format='terminated' ordinal='31'/>", "Data test #3 with different terminator", "\x1f"),
62         ("<stream format='terminated' ordinal='07'/>", "Test terminated data #4", "\x07"),
63         ("<stream format='terminated' ordinal='27'/>", unittest.__doc__, "\x1B"),
64         ]
65     XMLHeader = '''<message>%s</message>''' % ''.join([each[0] for each in DataStreams])
66
67     def setUp(self):
68         self.builder = Packet.StandardStreamPacketBuilder()
69         self.packet = self.builder.BuildPacket(self.XMLHeader)
70         for xml, data, term in self.DataStreams:
71             self.packet.OnStreamData(data + term)
72
73     def testAllStreamsAccountedFor(self):
74         """Test stream count input match output"""
75         streams = self.packet._getElements(node='stream')
76         self.failUnless(len(streams) == len(self.DataStreams))
77         self.failUnless(len(streams) == len(self.packet.datastreams))
78         for a,b in zip(self.packet.datastreams, streams):
79             self.failUnless(a is b, "packet.datastream should be *identical* to message.stream elements")
80
81     def testStreamContent(self):
82         """Test stream content matches input"""
83         for (stream, (xml, data, term)) in zip(self.packet.datastreams, self.DataStreams):
84             self.failUnless(stream.terminator == term, "Terminator not preserved")
85             self.failUnless(stream.StreamContent == data, "Binary data content not preserved")
86
87 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88
89 class LenghtStreamPacketTestCase(unittest.TestCase):
90     DataStreams = [
91         ("<stream format='length' size='%d'/>", "Lenght data test #1"),
92         ("<stream format='length' size='%d'/>", "Test #2 for terminated data"),
93         ("<stream format='length' size='%d'/>", unittest.__doc__),
94         ("<stream format='length' size='%d'/>", open(sys.argv[0], 'r').read()),
95         ]
96     XMLHeader = '''<message>%s</message>''' % ''.join([each[0]%len(each[1]) for each in DataStreams])
97
98     def setUp(self):
99         self.builder = Packet.StandardStreamPacketBuilder()
100         self.packet = self.builder.BuildPacket(self.XMLHeader)
101         for xml, data in self.DataStreams:
102             self.packet.OnStreamData(data)
103
104     def testAllStreamsAccountedFor(self):
105         """Test stream count input match output"""
106         streams = self.packet._getElements(node='stream')
107         self.failUnless(len(streams) == len(self.DataStreams))
108         self.failUnless(len(streams) == len(self.packet.datastreams))
109         for a,b in zip(self.packet.datastreams, streams):
110             self.failUnless(a is b, "packet.datastream should be *identical* to message.stream elements")
111
112     def testStreamContent(self):
113         """Test stream content matches input"""
114         for (stream, (xml, data)) in zip(self.packet.datastreams, self.DataStreams):
115             self.failUnless(stream.ContentLen == len(data), "length not preserved")
116             self.failUnless(len(stream.StreamContent) == len(data), "length not preserved")
117             self.failUnless(stream.StreamContent == data, "Binary data content not preserved")
118
119 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120 #~ Unittest Main
121 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122
123 if __name__=='__main__':
124     unittest.main()
125
Note: See TracBrowser for help on using the browser.