179
185
'00000000-0000-0000-0000-00000000000000%02d' % nid,
180
186
'should_create_vlan': False,
181
187
'should_create_bridge': False}
182
self.assertDictMatch(info, check)
188
self.assertThat(info, matchers.DictMatches(check))
184
190
check = [{'enabled': 'DONTCARE',
185
191
'ip': '2001:db8:0:1::%x' % nid,
187
193
'gateway': 'fe80::def'}]
188
self.assertDictListMatch(info['ip6s'], check)
194
self.assertThat(info['ip6s'], matchers.DictListMatches(check))
190
196
num_fixed_ips = len(info['ips'])
191
197
check = [{'enabled': 'DONTCARE',
853
869
self.network.disassociate_floating_ip(ctxt, mox.IgnoreArg())
854
870
self.assertTrue(self.local)
872
# raises because auto_assigned floating IP cannot be disassociated
873
self.stubs.Set(self.network.db, 'floating_ip_get_by_address', fake8)
874
self.assertRaises(exception.CannotDisassociateAutoAssignedFloatingIP,
875
self.network.disassociate_floating_ip,
856
879
def test_add_fixed_ip_instance_without_vpn_requested_networks(self):
857
880
self.mox.StubOutWithMock(db, 'network_get')
858
881
self.mox.StubOutWithMock(db, 'fixed_ip_associate_pool')
1500
1524
self.assertEqual(rval, address)
1527
class BackdoorPortTestCase(test.TestCase):
1528
"""Tests nova.network.manager.get_backdoor_port"""
1530
super(BackdoorPortTestCase, self).setUp()
1531
self.manager = network_manager.NetworkManager()
1532
self.manager.backdoor_port = 59697
1533
self.context = context.RequestContext('fake', 'fake')
1535
def test_backdoor_port(self):
1536
port = self.manager.get_backdoor_port(self.context)
1537
self.assertEqual(port, self.manager.backdoor_port)
1503
1540
class TestFloatingIPManager(network_manager.FloatingIP,
1504
1541
network_manager.NetworkManager):
1505
1542
"""Dummy manager that implements FloatingIP"""
1612
1649
self.network.deallocate_for_instance(self.context,
1613
1650
instance_id=instance['id'])
1652
def test_migrate_instance_start(self):
1653
called = {'count': 0}
1655
def fake_floating_ip_get_by_address(context, address):
1656
return {'address': address,
1659
def fake_is_stale_floating_ip_address(context, floating_ip):
1660
return floating_ip['address'] == '172.24.4.23'
1662
def fake_fixed_ip_get(context, fixed_ip_id):
1663
return {'instance_uuid': 'fake_uuid',
1664
'address': '10.0.0.2'}
1666
def fake_remove_floating_ip(floating_addr, fixed_addr, interface):
1667
called['count'] += 1
1669
def fake_floating_ip_update(context, address, args):
1672
self.stubs.Set(self.network.db, 'floating_ip_get_by_address',
1673
fake_floating_ip_get_by_address)
1674
self.stubs.Set(self.network, '_is_stale_floating_ip_address',
1675
fake_is_stale_floating_ip_address)
1676
self.stubs.Set(self.network.db, 'fixed_ip_get', fake_fixed_ip_get)
1677
self.stubs.Set(self.network.db, 'floating_ip_update',
1678
fake_floating_ip_update)
1679
self.stubs.Set(self.network.l3driver, 'remove_floating_ip',
1680
fake_remove_floating_ip)
1681
self.mox.ReplayAll()
1682
addresses = ['172.24.4.23', '172.24.4.24', '172.24.4.25']
1683
self.network.migrate_instance_start(self.context,
1684
instance_uuid=FAKEUUID,
1685
floating_addresses=addresses,
1687
project_id=self.project_id,
1688
source='fake_source',
1691
self.assertEqual(called['count'], 2)
1693
def test_migrate_instance_finish(self):
1694
called = {'count': 0}
1696
def fake_floating_ip_get_by_address(context, address):
1697
return {'address': address,
1700
def fake_is_stale_floating_ip_address(context, floating_ip):
1701
return floating_ip['address'] == '172.24.4.23'
1703
def fake_fixed_ip_get(context, fixed_ip_id):
1704
return {'instance_uuid': 'fake_uuid',
1705
'address': '10.0.0.2'}
1707
def fake_add_floating_ip(floating_addr, fixed_addr, interface):
1708
called['count'] += 1
1710
def fake_floating_ip_update(context, address, args):
1713
self.stubs.Set(self.network.db, 'floating_ip_get_by_address',
1714
fake_floating_ip_get_by_address)
1715
self.stubs.Set(self.network, '_is_stale_floating_ip_address',
1716
fake_is_stale_floating_ip_address)
1717
self.stubs.Set(self.network.db, 'fixed_ip_get', fake_fixed_ip_get)
1718
self.stubs.Set(self.network.db, 'floating_ip_update',
1719
fake_floating_ip_update)
1720
self.stubs.Set(self.network.l3driver, 'add_floating_ip',
1721
fake_add_floating_ip)
1722
self.mox.ReplayAll()
1723
addresses = ['172.24.4.23', '172.24.4.24', '172.24.4.25']
1724
self.network.migrate_instance_finish(self.context,
1725
instance_uuid=FAKEUUID,
1726
floating_addresses=addresses,
1729
project_id=self.project_id,
1730
source='fake_source')
1732
self.assertEqual(called['count'], 2)
1615
1734
def test_floating_dns_create_conflict(self):
1616
1735
zone = "example.org"
1617
1736
address1 = "10.10.10.11"
1752
1871
self.network.delete_dns_domain(context_admin, domain1)
1753
1872
self.network.delete_dns_domain(context_admin, domain2)
1874
def test_mac_conflicts(self):
1875
"""Make sure MAC collisions are retried"""
1876
self.flags(create_unique_mac_address_attempts=3)
1877
ctxt = context.RequestContext('testuser', 'testproject', is_admin=True)
1878
macs = ['bb:bb:bb:bb:bb:bb', 'aa:aa:aa:aa:aa:aa']
1880
# Create a VIF with aa:aa:aa:aa:aa:aa
1881
crash_test_dummy_vif = {
1883
'instance_uuid': 'fake_uuid',
1884
'network_id': 'fake_net',
1885
'uuid': 'fake_uuid',
1887
self.network.db.virtual_interface_create(ctxt, crash_test_dummy_vif)
1889
# Hand out a collision first, then a legit MAC
1892
self.stubs.Set(utils, 'generate_mac_address', fake_gen_mac)
1894
# SQLite doesn't seem to honor the uniqueness constraint on the
1895
# address column, so fake the collision-avoidance here
1896
def fake_vif_save(vif):
1897
if vif.address == crash_test_dummy_vif['address']:
1898
raise exception.DBError("If you're smart, you'll retry!")
1899
self.stubs.Set(models.VirtualInterface, 'save', fake_vif_save)
1901
# Attempt to add another and make sure that both MACs are consumed
1903
self.network.add_virtual_interface(ctxt, 'fake_uuid', 'fake_net')
1904
self.assertEqual(macs, [])
1756
1907
class NetworkPolicyTestCase(test.TestCase):
1757
1908
def setUp(self):
1787
1938
self.tempdir = tempfile.mkdtemp()
1788
1939
self.flags(logdir=self.tempdir)
1789
1940
self.network = TestFloatingIPManager()
1790
temp = importutils.import_object('nova.network.minidns.MiniDNS')
1791
self.network.instance_dns_manager = temp
1792
temp = importutils.import_object('nova.network.dns_driver.DNSDriver')
1793
self.network.floating_dns_manager = temp
1941
self.network.instance_dns_manager = importutils.import_object(
1942
'nova.network.minidns.MiniDNS')
1943
self.network.floating_dns_manager = importutils.import_object(
1944
'nova.network.dns_driver.DNSDriver')
1794
1945
self.network.db = db
1795
1946
self.project_id = 'testproject'
1796
1947
self.context = context.RequestContext('testuser', self.project_id,
1832
1983
def setUp(self):
1833
1984
super(LdapDNSTestCase, self).setUp()
1835
self.saved_ldap = sys.modules.get('ldap')
1836
import nova.auth.fakeldap
1837
sys.modules['ldap'] = nova.auth.fakeldap
1986
self.stub_module('ldap', fake_ldap)
1987
dns_class = 'nova.network.ldapdns.LdapDNS'
1988
self.driver = importutils.import_object(dns_class)
1839
temp = importutils.import_object('nova.network.ldapdns.FakeLdapDNS')
1990
attrs = {'objectClass': ['domainrelatedobject', 'dnsdomain',
1991
'domain', 'dcobject', 'top'],
1992
'associateddomain': ['root'],
1994
self.driver.lobj.add_s("ou=hosts,dc=example,dc=org", attrs.items())
1841
1995
self.driver.create_domain(domain1)
1842
1996
self.driver.create_domain(domain2)
1844
1998
def tearDown(self):
1845
1999
self.driver.delete_domain(domain1)
1846
2000
self.driver.delete_domain(domain2)
1847
sys.modules['ldap'] = self.saved_ldap
1848
2001
super(LdapDNSTestCase, self).tearDown()
1850
2003
def test_ldap_dns_domains(self):