Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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'])
Example #4
0
    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()
Example #5
0
    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()
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
    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)
Example #10
0
 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)
Example #11
0
    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'])
Example #12
0
    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)
Example #13
0
    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)
Example #14
0
    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)
Example #15
0
    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)
Example #16
0
    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)
Example #17
0
    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)
Example #18
0
 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
Example #19
0
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)
Example #20
0
    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)
Example #21
0
    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)
Example #22
0
    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)
Example #23
0
    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)
Example #24
0
    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'])
Example #25
0
    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)
Example #26
0
    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'])
Example #27
0
    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)
Example #28
0
    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)
Example #29
0
    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)
Example #30
0
    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)