52
52
def test_pick_port_returns_int(self):
53
53
self.assertIsInstance(factory.pick_port(), int)
55
def test_getRandomIPAddress(self):
56
ip_address = factory.getRandomIPAddress()
55
def test_make_ipv4_address(self):
56
ip_address = factory.make_ipv4_address()
57
57
self.assertIsInstance(ip_address, unicode)
58
58
octets = ip_address.split('.')
59
59
self.assertEqual(4, len(octets))
60
60
for octet in octets:
61
61
self.assertTrue(0 <= int(octet) <= 255)
63
def test_getRandomIPAddress_but_not(self):
63
def test_make_ipv4_address_but_not(self):
64
64
# We want to look for clashes between identical IPs and/or netmasks.
65
65
# Narrow down the range of randomness so we have a decent chance of
66
66
# triggering a clash, but not so far that we'll loop for very long
67
67
# trying to find a network we haven't seen already.
69
factory, 'getRandomIPAddress',
69
factory, 'make_ipv4_address',
70
70
lambda: '10.%d.0.0' % randint(1, 200))
72
72
for _ in range(100):
73
networks.append(factory.getRandomNetwork(but_not=networks))
73
networks.append(factory.make_ipv4_network(but_not=networks))
74
74
self.assertEquals(len(networks), len(set(networks)))
76
76
def test_make_UUID(self):
78
78
self.assertIsInstance(uuid, unicode)
79
79
self.assertEqual(36, len(uuid))
81
def test_getRandomNetwork(self):
82
network = factory.getRandomNetwork()
81
def test_make_ipv4_network(self):
82
network = factory.make_ipv4_network()
83
83
self.assertIsInstance(network, IPNetwork)
85
def test_getRandomNetwork_respects_but_not(self):
86
self.patch(factory, 'getRandomIPAddress').return_value = IPAddress(
85
def test_make_ipv4_network_respects_but_not(self):
86
self.patch(factory, 'make_ipv4_address').return_value = IPAddress(
89
89
TooManyRandomRetries,
90
factory.getRandomNetwork,
90
factory.make_ipv4_network,
91
91
slash=24, but_not=[IPNetwork('10.1.1.0/24')])
93
def test_getRandomNetwork_returns_network_not_in_but_not(self):
94
self.patch(factory, 'getRandomIPAddress').return_value = IPAddress(
93
def test_make_ipv4_network_returns_network_not_in_but_not(self):
94
self.patch(factory, 'make_ipv4_address').return_value = IPAddress(
97
97
IPNetwork('10.1.1.0/24'),
98
factory.getRandomNetwork(
98
factory.make_ipv4_network(
99
99
slash=24, but_not=[IPNetwork('10.9.9.0/24')]))
101
def test_getRandomNetwork_may_overlap_but_not(self):
102
self.patch(factory, 'getRandomIPAddress').return_value = IPAddress(
101
def test_make_ipv4_network_may_overlap_but_not(self):
102
self.patch(factory, 'make_ipv4_address').return_value = IPAddress(
104
104
self.assertEqual(
105
105
IPNetwork('10.1.1.0/24'),
106
factory.getRandomNetwork(
106
factory.make_ipv4_network(
107
107
slash=24, but_not=[IPNetwork('10.1.0.0/16')]))
109
def test_getRandomNetwork_avoids_network_in_disjoint_from(self):
110
self.patch(factory, 'getRandomIPAddress').return_value = IPAddress(
109
def test_make_ipv4_network_avoids_network_in_disjoint_from(self):
110
self.patch(factory, 'make_ipv4_address').return_value = IPAddress(
112
112
self.assertRaises(
113
113
TooManyRandomRetries,
114
factory.getRandomNetwork,
114
factory.make_ipv4_network,
115
115
slash=24, disjoint_from=[IPNetwork('10.1.1.0/24')])
117
def test_getRandomNetwork_avoids_network_overlapping_disjoint_from(self):
118
self.patch(factory, 'getRandomIPAddress').return_value = IPAddress(
117
def test_make_ipv4_network_avoids_network_overlapping_disjoint_from(self):
118
self.patch(factory, 'make_ipv4_address').return_value = IPAddress(
120
120
self.assertRaises(
121
121
TooManyRandomRetries,
122
factory.getRandomNetwork,
122
factory.make_ipv4_network,
123
123
slash=24, disjoint_from=[IPNetwork('10.1.0.0/16')])
125
def test_getRandomNetwork_returns_network_disjoint_from(self):
126
existing_network = factory.getRandomNetwork()
127
new_network = factory.getRandomNetwork(
125
def test_make_ipv4_network_returns_network_disjoint_from(self):
126
existing_network = factory.make_ipv4_network()
127
new_network = factory.make_ipv4_network(
128
128
disjoint_from=[existing_network])
129
129
self.assertNotEqual(existing_network, new_network)
130
130
self.assertNotIn(new_network, existing_network)
131
131
self.assertNotIn(existing_network, new_network)
133
133
def test_pick_ip_in_network(self):
134
network = factory.getRandomNetwork()
134
network = factory.make_ipv4_network()
135
135
ip = factory.pick_ip_in_network(network)
137
137
network.first <= IPAddress(ip).value <= network.last)
151
151
def test_make_ip_range_returns_low_and_high(self):
152
152
# Make a very very small network, to maximise the chances of exposure
153
153
# if the method gets this wrong e.g. by returning identical addresses.
154
low, high = factory.make_ip_range(factory.getRandomNetwork(slash=31))
154
low, high = factory.make_ip_range(factory.make_ipv4_network(slash=31))
155
155
self.assertLess(low, high)
157
157
def test_make_ip_range_obeys_but_not(self):
158
158
# Make a very very small network, to maximise the chances of exposure
159
159
# if the method gets this wrong.
160
network = factory.getRandomNetwork(slash=30)
160
network = factory.make_ipv4_network(slash=30)
161
161
first_low, first_high = factory.make_ip_range(network)
162
162
second_low, second_high = factory.make_ip_range(
163
163
network, but_not=(first_low, first_high))
166
166
def test_make_date_returns_datetime(self):
167
167
self.assertIsInstance(factory.make_date(), datetime)
169
def test_getRandomMACAddress(self):
170
mac_address = factory.getRandomMACAddress()
169
def test_make_mac_address(self):
170
mac_address = factory.make_mac_address()
171
171
self.assertIsInstance(mac_address, unicode)
172
172
self.assertEqual(17, len(mac_address))
173
173
for hex_octet in mac_address.split(":"):
174
174
self.assertTrue(0 <= int(hex_octet, 16) <= 255)
176
def test_getRandomMACAddress_alternative_delimiter(self):
176
def test_make_mac_address_alternative_delimiter(self):
177
177
self.patch(factory, "random_octets", count(0x3a))
178
mac_address = factory.getRandomMACAddress(delimiter="-")
178
mac_address = factory.make_mac_address(delimiter="-")
179
179
self.assertEqual("3a-3b-3c-3d-3e-3f", mac_address)
181
181
def test_make_random_leases_maps_ips_to_macs(self):