示例#1
0
    def test_list_volume_mappings_with_filters(self, mock_ins, mock_write,
                                               mock_read):
        mock_ins.return_value = etcd_api.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound

        volume_mapping1 = utils.create_test_volume_mapping(
            name='volume_mapping1',
            uuid=uuidutils.generate_uuid(),
            context=self.context)
        volume_mapping2 = utils.create_test_volume_mapping(
            name='volume_mapping2',
            uuid=uuidutils.generate_uuid(),
            context=self.context,
        )

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [volume_mapping1.as_dict(),
             volume_mapping2.as_dict()])

        res = dbapi.list_volume_mappings(
            self.context, filters={'uuid': volume_mapping1.uuid})
        self.assertEqual([volume_mapping1.id], [r.id for r in res])

        res = dbapi.list_volume_mappings(
            self.context, filters={'uuid': volume_mapping2.uuid})
        self.assertEqual([volume_mapping2.id], [r.id for r in res])

        res = dbapi.list_volume_mappings(self.context,
                                         filters={'uuid': 'unknow-uuid'})
        self.assertEqual([], [r.id for r in res])
示例#2
0
 def test_get_resource_class_by_name(self, mock_write, mock_read):
     mock_read.side_effect = etcd.EtcdKeyNotFound
     rcs = utils.create_test_resource_class(context=self.context)
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         [rcs.as_dict()])
     res = dbapi.get_resource_class(self.context, rcs.name)
     self.assertEqual(rcs.uuid, res.uuid)
示例#3
0
    def test_container_action_event_start(self, mock_db_inst,
                                          mock__action_get_by_request_id,
                                          mock_write, mock_read):
        """Create a container action event."""
        mock_db_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        uuid = uuidutils.generate_uuid()

        action_values = self._create_action_values(uuid)
        action = dbapi.action_start(self.context, action_values)

        event_values = self._create_event_values(uuid)

        mock__action_get_by_request_id.return_value = action
        mock_read.side_effect = etcd.EtcdKeyNotFound
        event = dbapi.action_event_start(self.context, event_values)

        ignored_keys = self.IGNORED_FIELDS + ['finish_time', 'traceback',
                                              'result', 'action_uuid',
                                              'request_id', 'container_uuid',
                                              'uuid']
        self._assertEqualObjects(event_values, event, ignored_keys)

        event['start_time'] = datetime.isoformat(event['start_time'])
        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([event])
        self._assertActionEventSaved(event, action['uuid'])
示例#4
0
    def test_container_actions_get_by_container(self, mock_db_inst,
                                                mock_write, mock_read):
        mock_db_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        uuid1 = uuidutils.generate_uuid()

        expected = []

        action_values = self._create_action_values(uuid1)
        action = dbapi.action_start(self.context, action_values)
        action['start_time'] = datetime.isoformat(action['start_time'])
        expected.append(action)

        action_values['action'] = 'test-action'
        action = dbapi.action_start(self.context, action_values)
        action['start_time'] = datetime.isoformat(action['start_time'])
        expected.append(action)

        # Create an other container action.
        uuid2 = uuidutils.generate_uuid()
        action_values = self._create_action_values(uuid2, 'test-action')
        dbapi.action_start(self.context, action_values)

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            expected)
        actions = dbapi.actions_get(self.context, uuid1)
        self._assertEqualListsOfObjects(expected, actions)
示例#5
0
    def test_list_capsules_with_filters(self, mock_db_inst, mock_write,
                                        mock_read):
        mock_db_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound

        capsule1 = utils.create_test_capsule(name='capsule1',
                                             uuid=uuidutils.generate_uuid(),
                                             context=self.context)
        capsule2 = utils.create_test_capsule(name='capsule2',
                                             uuid=uuidutils.generate_uuid(),
                                             context=self.context)

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [capsule1.as_dict(), capsule2.as_dict()])

        res = dbapi.list_capsules(self.context,
                                  filters={'uuid': capsule1.uuid})
        self.assertEqual([capsule1.id], [r.id for r in res])

        res = dbapi.list_capsules(self.context,
                                  filters={'uuid': capsule2.uuid})
        self.assertEqual([capsule2.id], [r.id for r in res])

        res = dbapi.list_capsules(self.context,
                                  filters={'uuid': 'unknow-uuid'})
        self.assertEqual([], [r.id for r in res])
示例#6
0
    def test_list_containers_with_filters(self, mock_write, mock_read):
        mock_read.side_effect = etcd.EtcdKeyNotFound

        container1 = utils.create_test_container(
            name='container-one',
            uuid=uuidutils.generate_uuid(),
            context=self.context)
        container2 = utils.create_test_container(
            name='container-two',
            uuid=uuidutils.generate_uuid(),
            context=self.context)

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [container1.as_dict(), container2.as_dict()])

        res = dbapi.list_containers(self.context,
                                    filters={'name': 'container-one'})
        self.assertEqual([container1.id], [r.id for r in res])

        res = dbapi.list_containers(self.context,
                                    filters={'name': 'container-two'})
        self.assertEqual([container2.id], [r.id for r in res])

        res = dbapi.list_containers(self.context,
                                    filters={'name': 'container-three'})
        self.assertEqual([], [r.id for r in res])

        res = dbapi.list_containers(self.context,
                                    filters={'name': container1.name})
        self.assertEqual([container1.id], [r.id for r in res])
示例#7
0
 def test_get_capsule_by_meta_name(self, mock_write, mock_read):
     mock_read.side_effect = etcd.EtcdKeyNotFound
     capsule = utils.create_test_capsule(context=self.context)
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         [capsule.as_dict()])
     res = dbapi.get_capsule_by_meta_name(self.context, capsule.meta_name)
     self.assertEqual(capsule.id, res.id)
     self.assertEqual(capsule.uuid, res.uuid)
示例#8
0
 def test_get_container_by_name(self, mock_write, mock_read):
     mock_read.side_effect = etcd.EtcdKeyNotFound
     container = utils.create_test_container(context=self.context)
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         [container.as_dict()])
     res = dbapi.get_container_by_name(self.context, container.name)
     self.assertEqual(container.id, res.id)
     self.assertEqual(container.uuid, res.uuid)
示例#9
0
 def test_list_zun_services(self, mock_write, mock_read):
     mock_read.side_effect = etcd.EtcdKeyNotFound
     service_1 = utils.create_test_zun_service(host='host_1')
     service_2 = utils.create_test_zun_service(host='host_2')
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         [service_1.as_dict(), service_2.as_dict()])
     res = dbapi.list_zun_services(self.context)
     self.assertEqual(2, len(res))
     self.assertEqual('host_1', res[0].host)
     self.assertEqual('host_2', res[1].host)
示例#10
0
    def test_container_action_event_finish_success(
            self, mock_db_inst, mock_get_event_by_name,
            mock__action_get_by_request_id,
            mock_update, mock_write, mock_read):
        """Finish a container action event."""
        mock_db_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        uuid = uuidutils.generate_uuid()

        action = dbapi.action_start(self.context,
                                    self._create_action_values(uuid))

        event_values = self._create_event_values(uuid)
        event_values['action_uuid'] = action['uuid']

        mock__action_get_by_request_id.return_value = action
        mock_read.side_effect = etcd.EtcdKeyNotFound
        event = dbapi.action_event_start(self.context, event_values)

        event_values = {
            'finish_time': timeutils.utcnow() + timedelta(seconds=5),
            'result': 'Success'
        }

        event_values = self._create_event_values(uuid, extra=event_values)

        mock__action_get_by_request_id.return_value = action
        mock_get_event_by_name.return_value = event
        mock_read.side_effect = lambda *args: FakeEtcdResult(event)
        event = dbapi.action_event_finish(self.context, event_values)

        event['start_time'] = datetime.isoformat(event['start_time'])
        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([event])
        self._assertActionEventSaved(event, action['uuid'])

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([action])
        action = dbapi.action_get_by_request_id(self.context, uuid,
                                                self.context.request_id)
        self.assertNotEqual('Error', action['message'])
示例#11
0
 def test_list_resource_classes_sorted(self, mock_write, mock_read):
     names = []
     resource_classes = []
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(1, 6):
         res_class = utils.create_test_resource_class(
             context=self.context, name='class'+str(i))
         resource_classes.append(res_class.as_dict())
         names.append(six.text_type(res_class['name']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         resource_classes)
     res = dbapi.list_resource_classes(self.context, sort_key='name')
     res_names = [r.name for r in res]
     self.assertEqual(sorted(names), res_names)
示例#12
0
 def test_list_capsules(self, mock_write, mock_read):
     uuids = []
     capsules = []
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(1, 6):
         capsule = utils.create_test_capsule(uuid=uuidutils.generate_uuid(),
                                             context=self.context,
                                             name='capsule' + str(i))
         capsules.append(capsule.as_dict())
         uuids.append(six.text_type(capsule['uuid']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(capsules)
     res = dbapi.list_capsules(self.context)
     res_uuids = [r.uuid for r in res]
     self.assertEqual(sorted(uuids), sorted(res_uuids))
示例#13
0
 def test_list_images(self, mock_get, mock_write, mock_read):
     mock_get.return_value = None
     mock_read.side_effect = etcd.EtcdKeyNotFound
     uuids = []
     images = []
     for i in range(1, 6):
         image = utils.create_test_image(context=self.context,
                                         repo='testrepo' + str(i))
         images.append(image.as_dict())
         uuids.append(image.uuid)
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(images)
     res = self.dbapi.list_image(self.context)
     res_uuids = [r.uuid for r in res]
     self.assertEqual(sorted(uuids), sorted(res_uuids))
示例#14
0
    def test_container_action_start(self, mock_db_inst,
                                    mock_write, mock_read):
        mock_db_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        uuid = uuidutils.generate_uuid()
        action_values = self._create_action_values(uuid)
        action = dbapi.action_start(self.context, action_values)

        ignored_keys = self.IGNORED_FIELDS + ['finish_time', 'uuid']

        self._assertEqualObjects(action_values, action.as_dict(), ignored_keys)
        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [action.as_dict()])
        action['start_time'] = datetime.isoformat(action['start_time'])
        self._assertActionSaved(action.as_dict(), uuid)
示例#15
0
 def test_list_compute_nodes(self, mock_write, mock_read):
     hostnames = []
     compute_nodes = []
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(1, 6):
         res_class = utils.create_test_compute_node(context=self.context,
                                                    hostname='class' +
                                                    str(i))
         compute_nodes.append(res_class.as_dict())
         hostnames.append(six.text_type(res_class['hostname']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         compute_nodes)
     res = dbapi.list_compute_nodes(self.context)
     res_names = [r.hostname for r in res]
     self.assertEqual(sorted(hostnames), sorted(res_names))
示例#16
0
 def test_list_volume_mappings(self, mock_write, mock_read):
     uuids = []
     volume_mappings = []
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(0, 6):
         volume_mapping = utils.create_test_volume_mapping(
             uuid=uuidutils.generate_uuid(),
             context=self.context,
             name='volume_mapping' + str(i))
         volume_mappings.append(volume_mapping.as_dict())
         uuids.append(six.text_type(volume_mapping['uuid']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         volume_mappings)
     res = dbapi.list_volume_mappings(self.context)
     res_uuids = [r.uuid for r in res]
     self.assertEqual(sorted(uuids), sorted(res_uuids))
示例#17
0
    def test_container_action_events_get_in_order(
            self, mock_db_inst, mock__action_get_by_request_id,
            mock_write, mock_read):
        mock_db_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        uuid1 = uuidutils.generate_uuid()

        action = dbapi.action_start(self.context,
                                    self._create_action_values(uuid1))

        extra1 = {
            'action_uuid': action['uuid'],
            'created_at': timeutils.utcnow()
        }

        extra2 = {
            'action_uuid': action['uuid'],
            'created_at': timeutils.utcnow() + timedelta(seconds=5)
        }

        event_val1 = self._create_event_values(uuid1, 'fake1', extra=extra1)
        event_val2 = self._create_event_values(uuid1, 'fake2', extra=extra1)
        event_val3 = self._create_event_values(uuid1, 'fake3', extra=extra2)

        mock__action_get_by_request_id.return_value = action
        mock_read.side_effect = etcd.EtcdKeyNotFound
        event1 = dbapi.action_event_start(self.context, event_val1)
        event1['start_time'] = datetime.isoformat(event1['start_time'])

        mock__action_get_by_request_id.return_value = action
        mock_read.side_effect = etcd.EtcdKeyNotFound
        event2 = dbapi.action_event_start(self.context, event_val2)
        event2['start_time'] = datetime.isoformat(event2['start_time'])

        mock__action_get_by_request_id.return_value = action
        mock_read.side_effect = etcd.EtcdKeyNotFound
        event3 = dbapi.action_event_start(self.context, event_val3)
        event3['start_time'] = datetime.isoformat(event3['start_time'])

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [event1, event2, event3])
        events = dbapi.action_events_get(self.context, action['uuid'])

        self.assertEqual(3, len(events))

        self._assertEqualOrderedListOfObjects([event3, event2, event1], events,
                                              ['container_uuid', 'request_id'])
示例#18
0
    def test_update_container_with_the_same_name(self, mock_update, mock_write,
                                                 mock_read):
        mock_read.side_effect = etcd.EtcdKeyNotFound
        container1 = utils.create_test_container(
            name='container-one',
            uuid=uuidutils.generate_uuid(),
            context=self.context)
        container2 = utils.create_test_container(
            name='container-two',
            uuid=uuidutils.generate_uuid(),
            context=self.context)

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [container1.as_dict(), container2.as_dict()])
        self.assertRaises(exception.ContainerAlreadyExists,
                          dbapi.update_container, self.context,
                          container2.uuid, {'name': 'container-one'})
示例#19
0
 def test_list_containers(self, mock_inst, mock_write, mock_read):
     uuids = []
     containers = []
     mock_inst.return_value = etcdapi.get_backend()
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(1, 6):
         container = utils.create_test_container(
             uuid=uuidutils.generate_uuid(),
             context=self.context,
             name='cont' + str(i))
         containers.append(container.as_dict())
         uuids.append(six.text_type(container['uuid']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(containers
                                                                  )
     res = dbapi.list_containers(self.context)
     res_uuids = [r.uuid for r in res]
     self.assertEqual(sorted(uuids), sorted(res_uuids))
    def test_list_zun_services_by_binary(self, mock_ins, mock_write,
                                         mock_read):
        mock_ins.return_value = etcd_api.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        service_1 = utils.create_test_zun_service(host='host_1',
                                                  binary='binary_1')
        service_2 = utils.create_test_zun_service(host='host_2',
                                                  binary='binary_2')
        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [service_1.as_dict(), service_2.as_dict()])
        res = dbapi.list_zun_services_by_binary(self.context, 'binary_1')
        self.assertEqual(1, len(res))
        self.assertEqual('host_1', res[0].host)
        self.assertEqual('binary_1', res[0].binary)

        res = dbapi.list_zun_services_by_binary(self.context, 'fake-binary')
        self.assertEqual(0, len(res))
示例#21
0
 def test_list_capsules_sorted(self, mock_db_inst, mock_write, mock_read):
     uuids = []
     capsules = []
     mock_db_inst.return_value = etcdapi.get_backend()
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(1, 6):
         capsule = utils.create_test_capsule(uuid=uuidutils.generate_uuid(),
                                             context=self.context,
                                             name='capsule' + str(i))
         capsules.append(capsule.as_dict())
         uuids.append(six.text_type(capsule['uuid']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(capsules)
     res = dbapi.list_capsules(self.context, sort_key='uuid')
     res_uuids = [r.uuid for r in res]
     self.assertEqual(sorted(uuids), res_uuids)
     self.assertRaises(exception.InvalidParameterValue,
                       dbapi.list_capsules,
                       self.context,
                       sort_key='foo')
示例#22
0
    def test_container_action_get_by_container_and_request(self, mock_write,
                                                           mock_read):
        """Ensure we can get an action by container UUID and request_id"""
        mock_read.side_effect = etcd.EtcdKeyNotFound
        uuid1 = uuidutils.generate_uuid()

        action_values = self._create_action_values(uuid1)
        action = dbapi.action_start(self.context, action_values)
        request_id = action_values['request_id']

        # An other action using a different req id
        action_values['action'] = 'test-action'
        action_values['request_id'] = 'req-00000000-7522-4d99-7ff-111111111111'
        dbapi.action_start(self.context, action_values)

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([action])
        action = dbapi.action_get_by_request_id(self.context, uuid1,
                                                request_id)
        self.assertEqual('create_container', action['action'])
        self.assertEqual(self.context.request_id, action['request_id'])
示例#23
0
    def test_list_images_with_filters(self, mock_get, mock_write, mock_read):
        mock_get.return_value = None
        mock_read.side_effect = etcd.EtcdKeyNotFound
        image1 = utils.create_test_image(context=self.context,
                                         repo='imageone',
                                         uuid=uuidutils.generate_uuid())
        image2 = utils.create_test_image(context=self.context,
                                         repo='imagetwo',
                                         uuid=uuidutils.generate_uuid())
        images = [image1.as_dict(), image2.as_dict()]

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(images)
        res = self.dbapi.list_image(self.context, filters={'repo': 'imageone'})
        self.assertEqual([image1.uuid], [r.uuid for r in res])

        res = self.dbapi.list_image(self.context, filters={'repo': 'imagetwo'})
        self.assertEqual([image2.uuid], [r.uuid for r in res])

        res = self.dbapi.list_image(self.context, filters={'repo': 'foo'})
        self.assertEqual([], [r.uuid for r in res])
示例#24
0
    def test_list_containers_sorted(self, mock_write, mock_read):
        uuids = []
        containers = []
        mock_read.side_effect = etcd.EtcdKeyNotFound
        for i in range(5):
            container = utils.create_test_container(
                uuid=uuidutils.generate_uuid(),
                context=self.context,
                name='cont' + str(i))
            containers.append(container.as_dict())
            uuids.append(six.text_type(container.uuid))
        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(containers
                                                                     )
        res = dbapi.list_containers(self.context, sort_key='uuid')
        res_uuids = [r.uuid for r in res]
        self.assertEqual(sorted(uuids), res_uuids)

        self.assertRaises(exception.InvalidParameterValue,
                          dbapi.list_containers,
                          self.context,
                          sort_key='foo')
示例#25
0
    def test_update_container_with_the_same_name(self, mock_inst, mock_update,
                                                 mock_write, mock_read):
        CONF.set_override("unique_container_name_scope",
                          "project",
                          group="compute")
        mock_inst.return_value = etcdapi.get_backend()
        mock_read.side_effect = etcd.EtcdKeyNotFound
        container1 = utils.create_test_container(
            name='container-one',
            uuid=uuidutils.generate_uuid(),
            context=self.context)
        container2 = utils.create_test_container(
            name='container-two',
            uuid=uuidutils.generate_uuid(),
            context=self.context)

        mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
            [container1.as_dict(), container2.as_dict()])
        self.assertRaises(exception.ContainerAlreadyExists,
                          dbapi.update_container, self.context,
                          container2.uuid, {'name': 'container-one'})
示例#26
0
 def test_list_volume_mappings_sorted(self, mock_ins, mock_write,
                                      mock_read):
     uuids = []
     volume_mappings = []
     mock_ins.return_value = etcd_api.get_backend()
     mock_read.side_effect = etcd.EtcdKeyNotFound
     for i in range(0, 6):
         volume_mapping = utils.create_test_volume_mapping(
             uuid=uuidutils.generate_uuid(),
             context=self.context,
             name='volume_mapping' + str(i))
         volume_mappings.append(volume_mapping.as_dict())
         uuids.append(six.text_type(volume_mapping['uuid']))
     mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
         volume_mappings)
     res = dbapi.list_volume_mappings(self.context, sort_key='uuid')
     res_uuids = [r.uuid for r in res]
     self.assertEqual(sorted(uuids), res_uuids)
     self.assertRaises(exception.InvalidParameterValue,
                       dbapi.list_volume_mappings,
                       self.context,
                       sort_key='wrong_key')