예제 #1
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)
예제 #2
0
    def test_container_action_events_get_in_order(self):
        """Ensure retrived action events are in order."""
        uuid1 = uuidutils.generate_uuid()

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

        extra1 = {
            'created_at': timeutils.utcnow()
        }

        extra2 = {
            '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)

        event1 = dbapi.action_event_start(self.context, event_val1)
        event2 = dbapi.action_event_start(self.context, event_val2)
        event3 = dbapi.action_event_start(self.context, event_val3)

        events = dbapi.action_events_get(self.context, action['id'])

        self.assertEqual(3, len(events))

        self._assertEqualOrderedListOfObjects([event3, event2, event1], events,
                                              ['container_uuid', 'request_id'])
예제 #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_action_get_by_container_and_request(self):
        """Ensure we can get an action by container UUID and request_id"""
        uuid1 = uuidutils.generate_uuid()

        action_values = self._create_action_values(uuid1)
        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)

        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'])
예제 #5
0
    def test_container_action_start(self):
        """Create a container action."""
        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']
        self._assertEqualObjects(action_values, action, ignored_keys)

        self._assertActionSaved(action, uuid)
예제 #6
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'])
예제 #7
0
    def test_container_actions_get_by_container(self):
        """Ensure we can get actions by UUID."""
        uuid1 = uuidutils.generate_uuid()

        expected = []

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

        action_values['action'] = 'test-action'
        action = dbapi.action_start(self.context, action_values)
        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)

        actions = dbapi.actions_get(self.context, uuid1)
        self._assertEqualListsOfObjects(expected, actions)
예제 #8
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)
예제 #9
0
    def test_container_action_event_start(self):
        """Create a container action event."""
        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)
        event = dbapi.action_event_start(self.context, event_values)

        event_values['action_id'] = action['id']
        ignored_keys = self.IGNORED_FIELDS + ['finish_time', 'traceback',
                                              'result']
        self._assertEqualObjects(event_values, event, ignored_keys)

        self._assertActionEventSaved(event, action['id'])
예제 #10
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'])
예제 #11
0
    def test_container_action_event_finish_success(self):
        """Finish a container action event."""
        uuid = uuidutils.generate_uuid()

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

        dbapi.action_event_start(self.context, self._create_event_values(uuid))

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

        event_values = self._create_event_values(uuid, extra=event_values)
        event = dbapi.action_event_finish(self.context, event_values)

        self._assertActionEventSaved(event, action['id'])
        action = dbapi.action_get_by_request_id(self.context, uuid,
                                                self.context.request_id)
        self.assertNotEqual('Error', action['message'])
예제 #12
0
    def test_container_action_event_finish_success(self):
        """Finish a container action event."""
        uuid = uuidutils.generate_uuid()

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

        dbapi.action_event_start(self.context,
                                 self._create_event_values(uuid))

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

        event_values = self._create_event_values(uuid, extra=event_values)
        event = dbapi.action_event_finish(self.context, event_values)

        self._assertActionEventSaved(event, action['id'])
        action = dbapi.action_get_by_request_id(self.context, uuid,
                                                self.context.request_id)
        self.assertNotEqual('Error', action['message'])
예제 #13
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'])
예제 #14
0
 def action_start(cls, context, container_uuid, action_name,
                  want_result=True):
     values = cls.pack_action_start(context, container_uuid, action_name)
     db_action = dbapi.action_start(context, values)
     if want_result:
         return cls._from_db_object(context, cls(context), db_action)