Repository navigation
Expand file tree
/
Copy pathtest_random_packet.py
More file actions
173 lines (147 loc) · 6.56 KB
/
Copy pathtest_random_packet.py
File metadata and controls
173 lines (147 loc) · 6.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/usr/bin/env python3
"""
Unit tests for the Random Packet Generator.
"""
import unittest
from random_packet import RandomPacket, format_packet
class TestRandomPacket(unittest.TestCase):
"""Test cases for RandomPacket class."""
def setUp(self):
"""Set up test fixtures."""
self.generator = RandomPacket(seed=42)
def test_generate_random_ip(self):
"""Test random IP generation."""
ip = self.generator.generate_random_ip()
parts = ip.split('.')
self.assertEqual(len(parts), 4)
for part in parts:
self.assertTrue(0 <= int(part) <= 255)
def test_generate_random_port(self):
"""Test random port generation."""
port = self.generator.generate_random_port()
self.assertTrue(1024 <= port <= 65535)
def test_generate_random_payload(self):
"""Test random payload generation."""
payload = self.generator.generate_random_payload(10, 20)
self.assertTrue(10 <= len(payload) <= 20)
self.assertIsInstance(payload, bytes)
def test_generate_tcp_packet(self):
"""Test TCP packet generation."""
packet = self.generator.generate_tcp_packet()
self.assertEqual(packet['protocol'], RandomPacket.PROTOCOL_TCP)
self.assertIn('src_ip', packet)
self.assertIn('dst_ip', packet)
self.assertIn('src_port', packet)
self.assertIn('dst_port', packet)
self.assertIn('seq_num', packet)
self.assertIn('ack_num', packet)
self.assertIn('flags', packet)
self.assertIn('window', packet)
self.assertIn('payload', packet)
# Validate port ranges
self.assertTrue(1024 <= packet['src_port'] <= 65535)
self.assertTrue(1024 <= packet['dst_port'] <= 65535)
def test_generate_udp_packet(self):
"""Test UDP packet generation."""
packet = self.generator.generate_udp_packet()
self.assertEqual(packet['protocol'], RandomPacket.PROTOCOL_UDP)
self.assertIn('src_ip', packet)
self.assertIn('dst_ip', packet)
self.assertIn('src_port', packet)
self.assertIn('dst_port', packet)
self.assertIn('payload', packet)
# Validate port ranges
self.assertTrue(1024 <= packet['src_port'] <= 65535)
self.assertTrue(1024 <= packet['dst_port'] <= 65535)
def test_generate_icmp_packet(self):
"""Test ICMP packet generation."""
packet = self.generator.generate_icmp_packet()
self.assertEqual(packet['protocol'], RandomPacket.PROTOCOL_ICMP)
self.assertIn('src_ip', packet)
self.assertIn('dst_ip', packet)
self.assertIn('type', packet)
self.assertIn('code', packet)
self.assertIn('id', packet)
self.assertIn('seq', packet)
self.assertIn('payload', packet)
def test_generate_tcp_packet_with_params(self):
"""Test TCP packet generation with specific parameters."""
packet = self.generator.generate_tcp_packet(
src_ip='192.168.1.1',
dst_ip='10.0.0.1',
src_port=8080,
dst_port=443
)
self.assertEqual(packet['src_ip'], '192.168.1.1')
self.assertEqual(packet['dst_ip'], '10.0.0.1')
self.assertEqual(packet['src_port'], 8080)
self.assertEqual(packet['dst_port'], 443)
def test_generate_random_packet(self):
"""Test random packet generation."""
packet = self.generator.generate_random_packet()
self.assertIn(packet['protocol'], [
RandomPacket.PROTOCOL_TCP,
RandomPacket.PROTOCOL_UDP,
RandomPacket.PROTOCOL_ICMP
])
def test_generate_random_packet_tcp(self):
"""Test random packet generation with specific protocol."""
packet = self.generator.generate_random_packet(protocol='TCP')
self.assertEqual(packet['protocol'], RandomPacket.PROTOCOL_TCP)
def test_generate_packets(self):
"""Test generating multiple packets."""
packets = self.generator.generate_packets(count=5)
self.assertEqual(len(packets), 5)
for packet in packets:
self.assertIn(packet['protocol'], [
RandomPacket.PROTOCOL_TCP,
RandomPacket.PROTOCOL_UDP,
RandomPacket.PROTOCOL_ICMP
])
def test_generate_packets_tcp_only(self):
"""Test generating multiple TCP packets."""
packets = self.generator.generate_packets(count=3, protocol='TCP')
self.assertEqual(len(packets), 3)
for packet in packets:
self.assertEqual(packet['protocol'], RandomPacket.PROTOCOL_TCP)
def test_format_packet_tcp(self):
"""Test formatting TCP packet."""
packet = self.generator.generate_tcp_packet()
formatted = format_packet(packet)
self.assertIn('Protocol: TCP', formatted)
self.assertIn('Source:', formatted)
self.assertIn('Destination:', formatted)
self.assertIn('Sequence:', formatted)
self.assertIn('Flags:', formatted)
def test_format_packet_udp(self):
"""Test formatting UDP packet."""
packet = self.generator.generate_udp_packet()
formatted = format_packet(packet)
self.assertIn('Protocol: UDP', formatted)
self.assertIn('Source Port:', formatted)
self.assertIn('Destination Port:', formatted)
def test_format_packet_icmp(self):
"""Test formatting ICMP packet."""
packet = self.generator.generate_icmp_packet()
formatted = format_packet(packet)
self.assertIn('Protocol: ICMP', formatted)
self.assertIn('Type:', formatted)
self.assertIn('Code:', formatted)
def test_seeded_generation_reproducibility(self):
"""Test that seeded generation is reproducible."""
# Generate multiple packets with same seed to verify reproducibility
gen1 = RandomPacket(seed=12345)
packets1 = gen1.generate_packets(count=3)
gen2 = RandomPacket(seed=12345)
packets2 = gen2.generate_packets(count=3)
# Check that the same sequence is generated
for p1, p2 in zip(packets1, packets2):
self.assertEqual(p1['protocol'], p2['protocol'])
self.assertEqual(p1['src_ip'], p2['src_ip'])
self.assertEqual(p1['dst_ip'], p2['dst_ip'])
def test_invalid_protocol(self):
"""Test that invalid protocol raises ValueError."""
with self.assertRaises(ValueError):
self.generator.generate_random_packet(protocol='INVALID')
if __name__ == '__main__':
unittest.main()