def test_network_driver_leave(self): fake_docker_net_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, fake_docker_net_id) fake_neutron_port_id = str(uuid.uuid4()) self.mox.StubOutWithMock(app.neutron, 'list_ports') neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) fake_neutron_v4_subnet_id = str(uuid.uuid4()) fake_neutron_v6_subnet_id = str(uuid.uuid4()) fake_neutron_ports_response = self._get_fake_ports( fake_docker_endpoint_id, fake_neutron_net_id, fake_neutron_port_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_ports( name=neutron_port_name).AndReturn(fake_neutron_ports_response) fake_neutron_port = fake_neutron_ports_response['ports'][0] self._mock_out_unbinding(fake_docker_endpoint_id, fake_neutron_port) leave_request = { 'NetworkID': fake_docker_net_id, 'EndpointID': fake_docker_endpoint_id, } response = self.app.post('/NetworkDriver.Leave', content_type='application/json', data=jsonutils.dumps(leave_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_leave(self): fake_docker_net_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, fake_docker_net_id) fake_neutron_port_id = str(uuid.uuid4()) self.mox.StubOutWithMock(app.neutron, 'list_ports') neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) fake_neutron_v4_subnet_id = str(uuid.uuid4()) fake_neutron_v6_subnet_id = str(uuid.uuid4()) fake_neutron_ports_response = self._get_fake_ports( fake_docker_endpoint_id, fake_neutron_net_id, fake_neutron_port_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_ports(name=neutron_port_name).AndReturn( fake_neutron_ports_response) fake_neutron_port = fake_neutron_ports_response['ports'][0] self._mock_out_unbinding(fake_docker_endpoint_id, fake_neutron_port) leave_request = { 'NetworkID': fake_docker_net_id, 'EndpointID': fake_docker_endpoint_id, } response = self.app.post('/NetworkDriver.Leave', content_type='application/json', data=jsonutils.dumps(leave_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_leave_unbinding_failure(self, GivenException): fake_docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_network_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_network_id, fake_docker_network_id) fake_neutron_port_id = str(uuid.uuid4()) self.mox.StubOutWithMock(app.neutron, 'list_ports') neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) fake_neutron_v4_subnet_id = str(uuid.uuid4()) fake_neutron_v6_subnet_id = str(uuid.uuid4()) fake_neutron_ports_response = self._get_fake_ports( fake_docker_endpoint_id, fake_neutron_network_id, fake_neutron_port_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_ports(name=neutron_port_name).AndReturn( fake_neutron_ports_response) fake_neutron_port = fake_neutron_ports_response['ports'][0] fake_message = "fake message" fake_exception = GivenException(fake_message) self._port_unbind_with_exception( fake_docker_endpoint_id, fake_neutron_port, fake_exception) response = self._invoke_leave_request( fake_docker_network_id, fake_docker_endpoint_id) self.assertEqual( w_exceptions.InternalServerError.code, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertIn(fake_message, decoded_json['Err'])
def _delete_network_with_exception(self, network_id, ex): fake_neutron_network_id = "4e8e5957-649f-477b-9e5b-f1f75b21c03c" if ex == exceptions.NotFound: fake_networks_response = { "networks": [] } else: fake_networks_response = { "networks": [{ "status": "ACTIVE", "subnets": [], "name": network_id, "admin_state_up": True, "tenant_id": "9bacb3c5d39d41a79512987f338cf177", "router:external": False, "segments": [], "shared": False, "id": fake_neutron_network_id }] } self.mox.StubOutWithMock(app.neutron, 'list_networks') app.neutron.list_networks( name=network_id).AndReturn(fake_networks_response) subnet_v4_id = "9436e561-47bf-436a-b1f1-fe23a926e031" subnet_v6_id = "64dd4a98-3d7a-4bfd-acf4-91137a8d2f51" docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_v4_subnet = self._get_fake_v4_subnet( docker_network_id, docker_endpoint_id, subnet_v4_id) fake_v6_subnet = self._get_fake_v6_subnet( docker_network_id, docker_endpoint_id, subnet_v6_id) fake_subnets_response = { "subnets": [ fake_v4_subnet['subnet'], fake_v6_subnet['subnet'] ] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(network_id=fake_neutron_network_id).AndReturn( fake_subnets_response) self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_subnetpools_response = {"subnetpools": []} app.neutron.list_subnetpools(name='kuryr').AndReturn( fake_subnetpools_response) app.neutron.list_subnetpools(name='kuryr6').AndReturn( fake_subnetpools_response) self.mox.StubOutWithMock(app.neutron, 'delete_subnet') app.neutron.delete_subnet(subnet_v4_id).AndReturn(None) app.neutron.delete_subnet(subnet_v6_id).AndReturn(None) self.mox.StubOutWithMock(app.neutron, 'delete_network') app.neutron.delete_network(fake_neutron_network_id).AndRaise(ex) self.mox.ReplayAll()
def _delete_network_with_exception(self, network_id, ex): fake_neutron_network_id = "4e8e5957-649f-477b-9e5b-f1f75b21c03c" no_networks_response = {"networks": []} if ex == exceptions.NotFound: fake_networks_response = no_networks_response else: fake_networks_response = { "networks": [{ "status": "ACTIVE", "subnets": [], "name": network_id, "admin_state_up": True, "tenant_id": "9bacb3c5d39d41a79512987f338cf177", "router:external": False, "segments": [], "shared": False, "id": fake_neutron_network_id }] } self.mox.StubOutWithMock(app.neutron, 'list_networks') t = utils.make_net_tags(network_id) te = t + ',' + const.KURYR_EXISTING_NEUTRON_NET app.neutron.list_networks(tags=te).AndReturn(no_networks_response) app.neutron.list_networks(tags=t).AndReturn(fake_networks_response) subnet_v4_id = "9436e561-47bf-436a-b1f1-fe23a926e031" subnet_v6_id = "64dd4a98-3d7a-4bfd-acf4-91137a8d2f51" docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() fake_v4_subnet = self._get_fake_v4_subnet(docker_network_id, docker_endpoint_id, subnet_v4_id) fake_v6_subnet = self._get_fake_v6_subnet(docker_network_id, docker_endpoint_id, subnet_v6_id) fake_subnets_response = { "subnets": [fake_v4_subnet['subnet'], fake_v6_subnet['subnet']] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(network_id=fake_neutron_network_id).AndReturn( fake_subnets_response) self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_subnetpools_response = {"subnetpools": []} app.neutron.list_subnetpools( name='kuryr').AndReturn(fake_subnetpools_response) app.neutron.list_subnetpools( name='kuryr6').AndReturn(fake_subnetpools_response) self.mox.StubOutWithMock(app.neutron, 'delete_subnet') app.neutron.delete_subnet(subnet_v4_id).AndReturn(None) app.neutron.delete_subnet(subnet_v6_id).AndReturn(None) self.mox.StubOutWithMock(app.neutron, 'delete_network') app.neutron.delete_network(fake_neutron_network_id).AndRaise(ex) self.mox.ReplayAll()
def test_network_driver_delete_network_with_subnets(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, docker_network_id, check_existing=True) # The following fake response is retrieved from the Neutron doc: # http://developer.openstack.org/api-ref-networking-v2.html#createSubnet # noqa subnet_v4_id = "9436e561-47bf-436a-b1f1-fe23a926e031" subnet_v6_id = "64dd4a98-3d7a-4bfd-acf4-91137a8d2f51" fake_v4_subnet = self._get_fake_v4_subnet( docker_network_id, docker_endpoint_id, subnet_v4_id) fake_v6_subnet = self._get_fake_v6_subnet( docker_network_id, docker_endpoint_id, subnet_v6_id) fake_subnets_response = { "subnets": [ fake_v4_subnet['subnet'], fake_v6_subnet['subnet'] ] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(network_id=fake_neutron_net_id).AndReturn( fake_subnets_response) self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_subnetpools_response = {"subnetpools": []} app.neutron.list_subnetpools(name='kuryr').AndReturn( fake_subnetpools_response) app.neutron.list_subnetpools(name='kuryr6').AndReturn( fake_subnetpools_response) self.mox.StubOutWithMock(app.neutron, 'delete_subnet') app.neutron.delete_subnet(subnet_v4_id).AndReturn(None) app.neutron.delete_subnet(subnet_v6_id).AndReturn(None) self.mox.StubOutWithMock(app.neutron, 'delete_network') app.neutron.delete_network(fake_neutron_net_id).AndReturn(None) self.mox.ReplayAll() data = {'NetworkID': docker_network_id} response = self.app.post('/NetworkDriver.DeleteNetwork', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_delete_endpoint(self): docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() data = { 'NetworkID': docker_network_id, 'EndpointID': docker_endpoint_id, } response = self.app.post('/NetworkDriver.DeleteEndpoint', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_delete_network_with_subnets(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_network_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_network_id, docker_network_id) # The following fake response is retrieved from the Neutron doc: # http://developer.openstack.org/api-ref-networking-v2.html#createSubnet # noqa subnet_v4_id = "9436e561-47bf-436a-b1f1-fe23a926e031" subnet_v6_id = "64dd4a98-3d7a-4bfd-acf4-91137a8d2f51" fake_v4_subnet = self._get_fake_v4_subnet( docker_network_id, docker_endpoint_id, subnet_v4_id) fake_v6_subnet = self._get_fake_v6_subnet( docker_network_id, docker_endpoint_id, subnet_v6_id) fake_subnets_response = { "subnets": [ fake_v4_subnet['subnet'], fake_v6_subnet['subnet'] ] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(network_id=fake_neutron_network_id).AndReturn( fake_subnets_response) self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_subnetpools_response = {"subnetpools": []} app.neutron.list_subnetpools(name='kuryr').AndReturn( fake_subnetpools_response) app.neutron.list_subnetpools(name='kuryr6').AndReturn( fake_subnetpools_response) self.mox.StubOutWithMock(app.neutron, 'delete_subnet') app.neutron.delete_subnet(subnet_v4_id).AndReturn(None) app.neutron.delete_subnet(subnet_v6_id).AndReturn(None) self.mox.StubOutWithMock(app.neutron, 'delete_network') app.neutron.delete_network(fake_neutron_network_id).AndReturn(None) self.mox.ReplayAll() data = {'NetworkID': docker_network_id} response = self.app.post('/NetworkDriver.DeleteNetwork', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_delete_endpoint(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() data = { 'NetworkID': docker_network_id, 'EndpointID': docker_endpoint_id, } response = self.app.post('/NetworkDriver.DeleteEndpoint', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_get_port_name(self): fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() generated_neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) self.assertIn(utils.PORT_POSTFIX, generated_neutron_port_name) self.assertIn(fake_docker_endpoint_id, generated_neutron_port_name)
def test_join_bad_request(self): fake_docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() invalid_docker_endpoint_id = 'id-should-be-hexdigits' fake_container_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() response = self._invoke_join_request( fake_docker_network_id, invalid_docker_endpoint_id, fake_container_id) self.assertEqual( w_exceptions.BadRequest.code, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) # TODO(tfukushima): Add the better error message validation. self.assertIn(invalid_docker_endpoint_id, decoded_json['Err']) self.assertIn('EndpointID', decoded_json['Err'])
def test_create_endpoint_port_failures(self, GivenException): fake_docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_network_id = str(uuid.uuid4()) fake_neutron_subnet_v4_id = str(uuid.uuid4()) fake_neutron_subnet_v6_id = str(uuid.uuid4()) fake_subnets = self._get_fake_subnets(fake_docker_endpoint_id, fake_neutron_network_id, fake_neutron_subnet_v4_id, fake_neutron_subnet_v6_id) fake_fixed_ips = [ 'subnet_id=%s' % fake_neutron_subnet_v4_id, 'ip_address=192.168.1.2', 'subnet_id=%s' % fake_neutron_subnet_v6_id, 'ip_address=fe80::f816:3eff:fe20:57c4' ] fake_port_response = {"ports": []} self.mox.StubOutWithMock(app.neutron, 'list_ports') app.neutron.list_ports( fixed_ips=fake_fixed_ips).AndReturn(fake_port_response) self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(network_id=fake_neutron_network_id, cidr='192.168.1.0/24').AndReturn(fake_subnets) app.neutron.list_subnets(network_id=fake_neutron_network_id, cidr='fe80::/64').AndReturn({'subnets': []}) self._create_port_with_exception(fake_neutron_network_id, fake_docker_endpoint_id, fake_neutron_subnet_v4_id, fake_neutron_subnet_v6_id, GivenException()) self._mock_out_network(fake_neutron_network_id, fake_docker_network_id) response = self._invoke_create_request(fake_docker_network_id, fake_docker_endpoint_id) self.assertEqual(GivenException.status_code, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertEqual({'Err': GivenException.message}, decoded_json)
def test_create_endpoint_port_failures(self, GivenException): fake_docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_network_id = str(uuid.uuid4()) fake_neutron_subnet_v4_id = str(uuid.uuid4()) fake_neutron_subnet_v6_id = str(uuid.uuid4()) fake_subnets = self._get_fake_subnets( fake_docker_endpoint_id, fake_neutron_network_id, fake_neutron_subnet_v4_id, fake_neutron_subnet_v6_id) fake_fixed_ips = ['subnet_id=%s' % fake_neutron_subnet_v4_id, 'ip_address=192.168.1.2', 'subnet_id=%s' % fake_neutron_subnet_v6_id, 'ip_address=fe80::f816:3eff:fe20:57c4'] fake_port_response = {"ports": []} self.mox.StubOutWithMock(app.neutron, 'list_ports') app.neutron.list_ports(fixed_ips=fake_fixed_ips).AndReturn( fake_port_response) self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets( network_id=fake_neutron_network_id, cidr='192.168.1.0/24').AndReturn(fake_subnets) app.neutron.list_subnets( network_id=fake_neutron_network_id, cidr='fe80::/64').AndReturn({'subnets': []}) self._create_port_with_exception(fake_neutron_network_id, fake_docker_endpoint_id, fake_neutron_subnet_v4_id, fake_neutron_subnet_v6_id, GivenException()) self._mock_out_network(fake_neutron_network_id, fake_docker_network_id) response = self._invoke_create_request( fake_docker_network_id, fake_docker_endpoint_id) self.assertEqual(GivenException.status_code, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertEqual({'Err': GivenException.message}, decoded_json)
def test_delete_network_failures(self, GivenException): docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() self._delete_network_with_exception(docker_network_id, GivenException()) response = self._invoke_delete_request(docker_network_id) self.assertEqual(GivenException.status_code, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertEqual({'Err': GivenException.message}, decoded_json)
def test_delete_network_failures(self, GivenException): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() self._delete_network_with_exception( docker_network_id, GivenException()) response = self._invoke_delete_request(docker_network_id) self.assertEqual(GivenException.status_code, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertEqual({'Err': GivenException.message}, decoded_json)
def test_create_network_unauthorized(self): docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() self._create_network_with_exception(docker_network_id, exceptions.Unauthorized()) response = self._invoke_create_request(docker_network_id) self.assertEqual(401, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertEqual({'Err': exceptions.Unauthorized.message}, decoded_json)
def test_create_network_unauthorized(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() self._create_network_with_exception( docker_network_id, exceptions.Unauthorized()) response = self._invoke_create_request(docker_network_id) self.assertEqual(401, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertIn('Err', decoded_json) self.assertEqual( {'Err': exceptions.Unauthorized.message}, decoded_json)
def _ids(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_net_id = "4e8e5957-649f-477b-9e5b-f1f75b21c03c" fake_response = { 'networks': [ { "status": "ACTIVE", "subnets": [], "admin_state_up": True, "tenant_id": "9bacb3c5d39d41a79512987f338cf177", "router:external": False, "segments": [], "shared": False, "id": fake_neutron_net_id } ] } return docker_network_id, fake_neutron_net_id, fake_response
class TestKuryrUtils(base.TestKuryrBase): """Unit tests for utilities.""" @ddt.data(hashlib.sha256(utils.getrandbits( 256)).hexdigest(), '51c75a2515d4' '51c75a') def test_get_sandbox_key(self, fake_container_id): sandbox_key = utils.get_sandbox_key(fake_container_id) expected = '/'.join([utils.DOCKER_NETNS_BASE, fake_container_id[:12]]) self.assertEqual(expected, sandbox_key) def test_get_port_name(self): fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() generated_neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) self.assertIn(utils.PORT_POSTFIX, generated_neutron_port_name) self.assertIn(fake_docker_endpoint_id, generated_neutron_port_name) def test_get_subnetpool_name(self): fake_subnet_cidr = "10.0.0.0/16" generated_neutron_subnetpool_name = utils.get_neutron_subnetpool_name( fake_subnet_cidr) name_prefix = cfg.CONF.subnetpool_name_prefix self.assertIn(name_prefix, generated_neutron_subnetpool_name) self.assertIn(fake_subnet_cidr, generated_neutron_subnetpool_name) def test_get_dict_format_fixed_ips_from_kv_format(self): fake_fixed_ips_kv_format = \ ['subnet_id=5083bda8-1b7c-4625-97f3-1d4c33bfeea8', 'ip_address=192.168.1.2', 'subnet_id=6607a230-f3eb-4937-b09f-9dd659211139', 'ip_address=fdfa:8456:1afa:0:f816:3eff:fe67:885e'] expected_dict_form = \ [{'subnet_id': '5083bda8-1b7c-4625-97f3-1d4c33bfeea8', 'ip_address': '192.168.1.2'}, {'subnet_id': '6607a230-f3eb-4937-b09f-9dd659211139', 'ip_address': 'fdfa:8456:1afa:0:f816:3eff:fe67:885e'}] fixed_ips = utils.get_dict_format_fixed_ips_from_kv_format( fake_fixed_ips_kv_format) self.assertEqual(expected_dict_form, fixed_ips)
def test_network_driver_delete_network(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_network_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_network_id, docker_network_id) self.mox.StubOutWithMock(app.neutron, 'list_subnets') fake_neutron_subnets_response = {"subnets": []} app.neutron.list_subnets(network_id=fake_neutron_network_id).AndReturn( fake_neutron_subnets_response) self.mox.StubOutWithMock(app.neutron, 'delete_network') app.neutron.delete_network(fake_neutron_network_id).AndReturn(None) self.mox.ReplayAll() data = {'NetworkID': docker_network_id} response = self.app.post('/NetworkDriver.DeleteNetwork', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_create_network(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() self.mox.StubOutWithMock(app.neutron, "create_network") fake_request = { "network": { "name": utils.make_net_name(docker_network_id), "admin_state_up": True } } # The following fake response is retrieved from the Neutron doc: # http://developer.openstack.org/api-ref-networking-v2.html#createNetwork # noqa fake_neutron_net_id = "4e8e5957-649f-477b-9e5b-f1f75b21c03c" fake_response = { "network": { "status": "ACTIVE", "subnets": [], "name": utils.make_net_name(docker_network_id), "admin_state_up": True, "tenant_id": "9bacb3c5d39d41a79512987f338cf177", "router:external": False, "segments": [], "shared": False, "id": fake_neutron_net_id } } app.neutron.create_network(fake_request).AndReturn(fake_response) self.mox.StubOutWithMock(app.neutron, "add_tag") tags = utils.create_net_tags(docker_network_id) for tag in tags: app.neutron.add_tag('networks', fake_neutron_net_id, tag) self.mox.StubOutWithMock(app.neutron, 'list_subnets') fake_existing_subnets_response = { "subnets": [] } fake_cidr_v4 = '192.168.42.0/24' app.neutron.list_subnets( network_id=fake_neutron_net_id, cidr=fake_cidr_v4).AndReturn(fake_existing_subnets_response) self.mox.StubOutWithMock(app.neutron, 'create_subnet') fake_subnet_request = { "subnets": [{ 'name': fake_cidr_v4, 'network_id': fake_neutron_net_id, 'ip_version': 4, 'cidr': fake_cidr_v4, 'enable_dhcp': app.enable_dhcp, 'gateway_ip': '192.168.42.1', }] } subnet_v4_id = str(uuid.uuid4()) fake_v4_subnet = self._get_fake_v4_subnet( fake_neutron_net_id, subnet_v4_id, name=fake_cidr_v4, cidr=fake_cidr_v4) fake_subnet_response = { 'subnets': [ fake_v4_subnet['subnet'] ] } app.neutron.create_subnet( fake_subnet_request).AndReturn(fake_subnet_response) self.mox.ReplayAll() network_request = { 'NetworkID': docker_network_id, 'IPv4Data': [{ 'AddressSpace': 'foo', 'Pool': '192.168.42.0/24', 'Gateway': '192.168.42.1/24', }], 'IPv6Data': [{ 'AddressSpace': 'bar', 'Pool': 'fe80::/64', 'Gateway': 'fe80::f816:3eff:fe20:57c3/64', }], 'Options': {} } response = self.app.post('/NetworkDriver.CreateNetwork', content_type='application/json', data=jsonutils.dumps(network_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_create_endpoint(self): docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, docker_network_id) # The following fake response is retrieved from the Neutron doc: # http://developer.openstack.org/api-ref-networking-v2.html#createSubnet # noqa subnet_v4_id = "9436e561-47bf-436a-b1f1-fe23a926e031" subnet_v6_id = "64dd4a98-3d7a-4bfd-acf4-91137a8d2f51" fake_v4_subnet = self._get_fake_v4_subnet(docker_network_id, docker_endpoint_id, subnet_v4_id) fake_v6_subnet = self._get_fake_v6_subnet(docker_network_id, docker_endpoint_id, subnet_v6_id) fake_subnetv4_response = {"subnets": [fake_v4_subnet['subnet']]} fake_subnetv6_response = {"subnets": [fake_v6_subnet['subnet']]} self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets( network_id=fake_neutron_net_id, cidr='192.168.1.0/24').AndReturn(fake_subnetv4_response) app.neutron.list_subnets( network_id=fake_neutron_net_id, cidr='fe80::/64').AndReturn(fake_subnetv6_response) fake_ipv4cidr = '192.168.1.2/24' fake_ipv6cidr = 'fe80::f816:3eff:fe20:57c4/64' fake_port_id = str(uuid.uuid4()) fake_port = self._get_fake_port(docker_endpoint_id, fake_neutron_net_id, fake_port_id, subnet_v4_id, subnet_v6_id) fake_fixed_ips = [ 'subnet_id=%s' % subnet_v4_id, 'ip_address=192.168.1.2', 'subnet_id=%s' % subnet_v6_id, 'ip_address=fe80::f816:3eff:fe20:57c4' ] fake_port_response = {"ports": [fake_port['port']]} self.mox.StubOutWithMock(app.neutron, 'list_ports') app.neutron.list_ports( fixed_ips=fake_fixed_ips).AndReturn(fake_port_response) fake_updated_port = fake_port['port'] fake_updated_port['name'] = '-'.join([docker_endpoint_id, 'port']) self.mox.StubOutWithMock(app.neutron, 'update_port') app.neutron.update_port( fake_updated_port['id'], { 'port': { 'name': fake_updated_port['name'], 'device_owner': constants.DEVICE_OWNER, 'device_id': docker_endpoint_id } }).AndReturn(fake_port) self.mox.ReplayAll() data = { 'NetworkID': docker_network_id, 'EndpointID': docker_endpoint_id, 'Options': {}, 'Interface': { 'Address': fake_ipv4cidr, 'AddressIPv6': fake_ipv6cidr, 'MacAddress': "fa:16:3e:20:57:c3" } } response = self.app.post('/NetworkDriver.CreateEndpoint', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) expected = {'Interface': {}} self.assertEqual(expected, decoded_json)
def test_ipam_driver_release_address(self): # faking list_subnetpools self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_kuryr_subnetpool_id = str(uuid.uuid4()) fake_name = str('-'.join(['kuryrPool', FAKE_IP4_CIDR])) kuryr_subnetpools = self._get_fake_v4_subnetpools( fake_kuryr_subnetpool_id, prefixes=[FAKE_IP4_CIDR], name=fake_name) app.neutron.list_subnetpools(id=fake_kuryr_subnetpool_id).AndReturn( kuryr_subnetpools) fake_ip4 = '10.0.0.5' # faking list_subnets docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() neutron_network_id = docker_network_id = str(uuid.uuid4()) subnet_v4_id = str(uuid.uuid4()) fake_v4_subnet = self._get_fake_v4_subnet( docker_network_id, docker_endpoint_id, subnet_v4_id, subnetpool_id=fake_kuryr_subnetpool_id, cidr=FAKE_IP4_CIDR) fake_subnet_response = { 'subnets': [ fake_v4_subnet['subnet'] ] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(cidr=FAKE_IP4_CIDR).AndReturn( fake_subnet_response) #faking list_ports and delete_port fake_neutron_port_id = str(uuid.uuid4()) fake_port = base.TestKuryrBase._get_fake_port( docker_endpoint_id, neutron_network_id, fake_neutron_port_id, subnet_v4_id, neutron_subnet_v4_address=fake_ip4) port_request = { 'name': 'demo-port', 'admin_state_up': True, 'network_id': neutron_network_id, } rel_fixed_ips = port_request['fixed_ips'] = [] fixed_ip = {'subnet_id': subnet_v4_id} fixed_ip['ip_address'] = fake_ip4 rel_fixed_ips.append(fixed_ip) self.mox.StubOutWithMock(app.neutron, 'list_ports') list_port_response = {'ports': [fake_port['port']]} app.neutron.list_ports().AndReturn( list_port_response) self.mox.StubOutWithMock(app.neutron, 'delete_port') app.neutron.delete_port(fake_port['port']['id']).AndReturn({}) # Apply mocks self.mox.ReplayAll() fake_request = { 'PoolID': fake_kuryr_subnetpool_id, 'Address': fake_ip4 } response = self.app.post('/IpamDriver.ReleaseAddress', content_type='application/json', data=jsonutils.dumps(fake_request)) self.assertEqual(200, response.status_code)
def test_ipam_driver_request_address(self): # faking list_subnetpools self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_kuryr_subnetpool_id = str(uuid.uuid4()) fake_name = utils.get_neutron_subnetpool_name(FAKE_IP4_CIDR) kuryr_subnetpools = self._get_fake_v4_subnetpools( fake_kuryr_subnetpool_id, prefixes=[FAKE_IP4_CIDR], name=fake_name) app.neutron.list_subnetpools(id=fake_kuryr_subnetpool_id).AndReturn( kuryr_subnetpools) # faking list_subnets docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() neutron_network_id = str(uuid.uuid4()) subnet_v4_id = str(uuid.uuid4()) fake_v4_subnet = self._get_fake_v4_subnet( neutron_network_id, docker_endpoint_id, subnet_v4_id, subnetpool_id=fake_kuryr_subnetpool_id, cidr=FAKE_IP4_CIDR) fake_subnet_response = { 'subnets': [ fake_v4_subnet['subnet'] ] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(cidr=FAKE_IP4_CIDR).AndReturn( fake_subnet_response) # faking create_port fake_neutron_port_id = str(uuid.uuid4()) fake_port = base.TestKuryrBase._get_fake_port( docker_endpoint_id, neutron_network_id, fake_neutron_port_id, subnet_v4_id, neutron_subnet_v4_address="10.0.0.5") port_request = { 'name': 'kuryr-unbound-port', 'admin_state_up': True, 'network_id': neutron_network_id, 'binding:host_id': utils.get_hostname(), } fixed_ips = port_request['fixed_ips'] = [] fixed_ip = {'subnet_id': subnet_v4_id} fixed_ips.append(fixed_ip) self.mox.StubOutWithMock(app.neutron, 'create_port') app.neutron.create_port({'port': port_request}).AndReturn(fake_port) # Apply mocks self.mox.ReplayAll() # Testing container ip allocation fake_request = { 'PoolID': fake_kuryr_subnetpool_id, 'Address': '', # Querying for container address 'Options': {} } response = self.app.post('/IpamDriver.RequestAddress', content_type='application/json', data=jsonutils.dumps(fake_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual('10.0.0.5/16', decoded_json['Address'])
def test_ipam_driver_release_address(self): # faking list_subnetpools self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_kuryr_subnetpool_id = str(uuid.uuid4()) fake_name = str('-'.join(['kuryrPool', FAKE_IP4_CIDR])) kuryr_subnetpools = self._get_fake_v4_subnetpools( fake_kuryr_subnetpool_id, prefixes=[FAKE_IP4_CIDR], name=fake_name) app.neutron.list_subnetpools( id=fake_kuryr_subnetpool_id).AndReturn(kuryr_subnetpools) fake_ip4 = '10.0.0.5' # faking list_subnets docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() neutron_network_id = docker_network_id = str(uuid.uuid4()) subnet_v4_id = str(uuid.uuid4()) fake_v4_subnet = self._get_fake_v4_subnet( docker_network_id, docker_endpoint_id, subnet_v4_id, subnetpool_id=fake_kuryr_subnetpool_id, cidr=FAKE_IP4_CIDR) fake_subnet_response = {'subnets': [fake_v4_subnet['subnet']]} self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets( cidr=FAKE_IP4_CIDR).AndReturn(fake_subnet_response) #faking list_ports and delete_port fake_neutron_port_id = str(uuid.uuid4()) fake_port = base.TestKuryrBase._get_fake_port( docker_endpoint_id, neutron_network_id, fake_neutron_port_id, subnet_v4_id, neutron_subnet_v4_address=fake_ip4) port_request = { 'name': 'demo-port', 'admin_state_up': True, 'network_id': neutron_network_id, } rel_fixed_ips = port_request['fixed_ips'] = [] fixed_ip = {'subnet_id': subnet_v4_id} fixed_ip['ip_address'] = fake_ip4 rel_fixed_ips.append(fixed_ip) self.mox.StubOutWithMock(app.neutron, 'list_ports') list_port_response = {'ports': [fake_port['port']]} app.neutron.list_ports().AndReturn(list_port_response) self.mox.StubOutWithMock(app.neutron, 'delete_port') app.neutron.delete_port(fake_port['port']['id']).AndReturn({}) # Apply mocks self.mox.ReplayAll() fake_request = { 'PoolID': fake_kuryr_subnetpool_id, 'Address': fake_ip4 } response = self.app.post('/IpamDriver.ReleaseAddress', content_type='application/json', data=jsonutils.dumps(fake_request)) self.assertEqual(200, response.status_code)
def test_ipam_driver_request_address(self): # faking list_subnetpools self.mox.StubOutWithMock(app.neutron, 'list_subnetpools') fake_kuryr_subnetpool_id = str(uuid.uuid4()) fake_name = utils.get_neutron_subnetpool_name(FAKE_IP4_CIDR) kuryr_subnetpools = self._get_fake_v4_subnetpools( fake_kuryr_subnetpool_id, prefixes=[FAKE_IP4_CIDR], name=fake_name) app.neutron.list_subnetpools( id=fake_kuryr_subnetpool_id).AndReturn(kuryr_subnetpools) # faking list_subnets docker_endpoint_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() neutron_network_id = str(uuid.uuid4()) subnet_v4_id = str(uuid.uuid4()) fake_v4_subnet = self._get_fake_v4_subnet( neutron_network_id, docker_endpoint_id, subnet_v4_id, subnetpool_id=fake_kuryr_subnetpool_id, cidr=FAKE_IP4_CIDR) fake_subnet_response = {'subnets': [fake_v4_subnet['subnet']]} self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets( cidr=FAKE_IP4_CIDR).AndReturn(fake_subnet_response) # faking create_port fake_neutron_port_id = str(uuid.uuid4()) fake_port = base.TestKuryrBase._get_fake_port( docker_endpoint_id, neutron_network_id, fake_neutron_port_id, subnet_v4_id, neutron_subnet_v4_address="10.0.0.5") port_request = { 'name': 'kuryr-unbound-port', 'admin_state_up': True, 'network_id': neutron_network_id, 'binding:host_id': utils.get_hostname(), } fixed_ips = port_request['fixed_ips'] = [] fixed_ip = {'subnet_id': subnet_v4_id} fixed_ips.append(fixed_ip) self.mox.StubOutWithMock(app.neutron, 'create_port') app.neutron.create_port({'port': port_request}).AndReturn(fake_port) # Apply mocks self.mox.ReplayAll() # Testing container ip allocation fake_request = { 'PoolID': fake_kuryr_subnetpool_id, 'Address': '', # Querying for container address 'Options': {} } response = self.app.post('/IpamDriver.RequestAddress', content_type='application/json', data=jsonutils.dumps(fake_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual('10.0.0.5/16', decoded_json['Address'])
def test_network_driver_join(self): fake_docker_net_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_container_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, fake_docker_net_id) fake_neutron_port_id = str(uuid.uuid4()) self.mox.StubOutWithMock(app.neutron, 'list_ports') neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) fake_neutron_v4_subnet_id = str(uuid.uuid4()) fake_neutron_v6_subnet_id = str(uuid.uuid4()) fake_neutron_ports_response = self._get_fake_ports( fake_docker_endpoint_id, fake_neutron_net_id, fake_neutron_port_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_ports(name=neutron_port_name).AndReturn( fake_neutron_ports_response) self.mox.StubOutWithMock(app.neutron, 'list_subnets') fake_neutron_subnets_response = self._get_fake_subnets( fake_docker_endpoint_id, fake_neutron_net_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_subnets(network_id=fake_neutron_net_id).AndReturn( fake_neutron_subnets_response) fake_neutron_port = fake_neutron_ports_response['ports'][0] fake_neutron_subnets = fake_neutron_subnets_response['subnets'] _, fake_peer_name, _ = self._mock_out_binding( fake_docker_endpoint_id, fake_neutron_port, fake_neutron_subnets) self.mox.ReplayAll() fake_subnets_dict_by_id = {subnet['id']: subnet for subnet in fake_neutron_subnets} join_request = { 'NetworkID': fake_docker_net_id, 'EndpointID': fake_docker_endpoint_id, 'SandboxKey': utils.get_sandbox_key(fake_container_id), 'Options': {}, } response = self.app.post('/NetworkDriver.Join', content_type='application/json', data=jsonutils.dumps(join_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) fake_neutron_v4_subnet = fake_subnets_dict_by_id[ fake_neutron_v4_subnet_id] fake_neutron_v6_subnet = fake_subnets_dict_by_id[ fake_neutron_v6_subnet_id] expected_response = { 'Gateway': fake_neutron_v4_subnet['gateway_ip'], 'GatewayIPv6': fake_neutron_v6_subnet['gateway_ip'], 'InterfaceName': { 'DstPrefix': config.CONF.binding.veth_dst_prefix, 'SrcName': fake_peer_name, }, 'StaticRoutes': [] } self.assertEqual(expected_response, decoded_json)
def test_network_driver_create_network(self): docker_network_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() self.mox.StubOutWithMock(app.neutron, "create_network") fake_request = { "network": { "name": utils.make_net_name(docker_network_id), "admin_state_up": True } } # The following fake response is retrieved from the Neutron doc: # http://developer.openstack.org/api-ref-networking-v2.html#createNetwork # noqa fake_neutron_net_id = "4e8e5957-649f-477b-9e5b-f1f75b21c03c" fake_response = { "network": { "status": "ACTIVE", "subnets": [], "name": utils.make_net_name(docker_network_id), "admin_state_up": True, "tenant_id": "9bacb3c5d39d41a79512987f338cf177", "router:external": False, "segments": [], "shared": False, "id": fake_neutron_net_id } } app.neutron.create_network(fake_request).AndReturn(fake_response) self.mox.StubOutWithMock(app.neutron, "add_tag") tags = utils.create_net_tags(docker_network_id) for tag in tags: app.neutron.add_tag('networks', fake_neutron_net_id, tag) self.mox.StubOutWithMock(app.neutron, 'list_subnets') fake_existing_subnets_response = {"subnets": []} fake_cidr_v4 = '192.168.42.0/24' app.neutron.list_subnets( network_id=fake_neutron_net_id, cidr=fake_cidr_v4).AndReturn(fake_existing_subnets_response) self.mox.StubOutWithMock(app.neutron, 'create_subnet') fake_subnet_request = { "subnets": [{ 'name': fake_cidr_v4, 'network_id': fake_neutron_net_id, 'ip_version': 4, 'cidr': fake_cidr_v4, 'enable_dhcp': app.enable_dhcp, 'gateway_ip': '192.168.42.1', }] } subnet_v4_id = str(uuid.uuid4()) fake_v4_subnet = self._get_fake_v4_subnet(fake_neutron_net_id, subnet_v4_id, name=fake_cidr_v4, cidr=fake_cidr_v4) fake_subnet_response = {'subnets': [fake_v4_subnet['subnet']]} app.neutron.create_subnet(fake_subnet_request).AndReturn( fake_subnet_response) self.mox.ReplayAll() network_request = { 'NetworkID': docker_network_id, 'IPv4Data': [{ 'AddressSpace': 'foo', 'Pool': '192.168.42.0/24', 'Gateway': '192.168.42.1/24', }], 'IPv6Data': [{ 'AddressSpace': 'bar', 'Pool': 'fe80::/64', 'Gateway': 'fe80::f816:3eff:fe20:57c3/64', }], 'Options': {} } response = self.app.post('/NetworkDriver.CreateNetwork', content_type='application/json', data=jsonutils.dumps(network_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) self.assertEqual(constants.SCHEMA['SUCCESS'], decoded_json)
def test_network_driver_create_endpoint(self): docker_network_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, docker_network_id) # The following fake response is retrieved from the Neutron doc: # http://developer.openstack.org/api-ref-networking-v2.html#createSubnet # noqa subnet_v4_id = "9436e561-47bf-436a-b1f1-fe23a926e031" subnet_v6_id = "64dd4a98-3d7a-4bfd-acf4-91137a8d2f51" fake_v4_subnet = self._get_fake_v4_subnet( docker_network_id, docker_endpoint_id, subnet_v4_id) fake_v6_subnet = self._get_fake_v6_subnet( docker_network_id, docker_endpoint_id, subnet_v6_id) fake_subnetv4_response = { "subnets": [ fake_v4_subnet['subnet'] ] } fake_subnetv6_response = { "subnets": [ fake_v6_subnet['subnet'] ] } self.mox.StubOutWithMock(app.neutron, 'list_subnets') app.neutron.list_subnets(network_id=fake_neutron_net_id, cidr='192.168.1.0/24').AndReturn(fake_subnetv4_response) app.neutron.list_subnets( network_id=fake_neutron_net_id, cidr='fe80::/64').AndReturn(fake_subnetv6_response) fake_ipv4cidr = '192.168.1.2/24' fake_ipv6cidr = 'fe80::f816:3eff:fe20:57c4/64' fake_port_id = str(uuid.uuid4()) fake_port = self._get_fake_port( docker_endpoint_id, fake_neutron_net_id, fake_port_id, subnet_v4_id, subnet_v6_id) fake_fixed_ips = ['subnet_id=%s' % subnet_v4_id, 'ip_address=192.168.1.2', 'subnet_id=%s' % subnet_v6_id, 'ip_address=fe80::f816:3eff:fe20:57c4'] fake_port_response = { "ports": [ fake_port['port'] ] } self.mox.StubOutWithMock(app.neutron, 'list_ports') app.neutron.list_ports(fixed_ips=fake_fixed_ips).AndReturn( fake_port_response) fake_updated_port = fake_port['port'] fake_updated_port['name'] = '-'.join([docker_endpoint_id, 'port']) self.mox.StubOutWithMock(app.neutron, 'update_port') app.neutron.update_port(fake_updated_port['id'], {'port': { 'name': fake_updated_port['name'], 'device_owner': constants.DEVICE_OWNER, 'device_id': docker_endpoint_id}}).AndReturn(fake_port) self.mox.ReplayAll() data = { 'NetworkID': docker_network_id, 'EndpointID': docker_endpoint_id, 'Options': {}, 'Interface': { 'Address': fake_ipv4cidr, 'AddressIPv6': fake_ipv6cidr, 'MacAddress': "fa:16:3e:20:57:c3" } } response = self.app.post('/NetworkDriver.CreateEndpoint', content_type='application/json', data=jsonutils.dumps(data)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) expected = {'Interface': {}} self.assertEqual(expected, decoded_json)
def test_network_driver_join(self): fake_docker_net_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() fake_docker_endpoint_id = hashlib.sha256( utils.getrandbits(256)).hexdigest() fake_container_id = hashlib.sha256(utils.getrandbits(256)).hexdigest() fake_neutron_net_id = str(uuid.uuid4()) self._mock_out_network(fake_neutron_net_id, fake_docker_net_id) fake_neutron_port_id = str(uuid.uuid4()) self.mox.StubOutWithMock(app.neutron, 'list_ports') neutron_port_name = utils.get_neutron_port_name( fake_docker_endpoint_id) fake_neutron_v4_subnet_id = str(uuid.uuid4()) fake_neutron_v6_subnet_id = str(uuid.uuid4()) fake_neutron_ports_response = self._get_fake_ports( fake_docker_endpoint_id, fake_neutron_net_id, fake_neutron_port_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_ports( name=neutron_port_name).AndReturn(fake_neutron_ports_response) self.mox.StubOutWithMock(app.neutron, 'list_subnets') fake_neutron_subnets_response = self._get_fake_subnets( fake_docker_endpoint_id, fake_neutron_net_id, fake_neutron_v4_subnet_id, fake_neutron_v6_subnet_id) app.neutron.list_subnets(network_id=fake_neutron_net_id).AndReturn( fake_neutron_subnets_response) fake_neutron_port = fake_neutron_ports_response['ports'][0] fake_neutron_subnets = fake_neutron_subnets_response['subnets'] _, fake_peer_name, _ = self._mock_out_binding(fake_docker_endpoint_id, fake_neutron_port, fake_neutron_subnets) self.mox.ReplayAll() fake_subnets_dict_by_id = { subnet['id']: subnet for subnet in fake_neutron_subnets } join_request = { 'NetworkID': fake_docker_net_id, 'EndpointID': fake_docker_endpoint_id, 'SandboxKey': utils.get_sandbox_key(fake_container_id), 'Options': {}, } response = self.app.post('/NetworkDriver.Join', content_type='application/json', data=jsonutils.dumps(join_request)) self.assertEqual(200, response.status_code) decoded_json = jsonutils.loads(response.data) fake_neutron_v4_subnet = fake_subnets_dict_by_id[ fake_neutron_v4_subnet_id] fake_neutron_v6_subnet = fake_subnets_dict_by_id[ fake_neutron_v6_subnet_id] expected_response = { 'Gateway': fake_neutron_v4_subnet['gateway_ip'], 'GatewayIPv6': fake_neutron_v6_subnet['gateway_ip'], 'InterfaceName': { 'DstPrefix': config.CONF.binding.veth_dst_prefix, 'SrcName': fake_peer_name, }, 'StaticRoutes': [] } self.assertEqual(expected_response, decoded_json)