Пример #1
0
 def test_get_one_custom_fields(self):
     obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
     fields = 'hostname,alive'
     data = self.get_json(
         '/conductors/rocky.rocks?fields=%s' % fields,
         headers={api_base.Version.string: str(api_v1.max_version())})
     self.assertItemsEqual(['hostname', 'alive', 'links'], data)
Пример #2
0
    def test_check_orphaned_allocations(self, mock_allocate):
        alive_conductor = obj_utils.create_test_conductor(
            self.context, id=42, hostname='alive')
        dead_conductor = obj_utils.create_test_conductor(
            self.context, id=43, hostname='dead')

        obj_utils.create_test_allocation(
            self.context,
            state='allocating',
            conductor_affinity=alive_conductor.id)
        allocation = obj_utils.create_test_allocation(
            self.context,
            state='allocating',
            conductor_affinity=dead_conductor.id)

        self._start_service()
        with mock.patch.object(self.dbapi, 'get_offline_conductors',
                               autospec=True) as mock_conds:
            mock_conds.return_value = [dead_conductor.id]
            self.service._check_orphan_allocations(self.context)

        mock_allocate.assert_called_once_with(self.context, mock.ANY)
        actual = mock_allocate.call_args[0][1]
        self.assertEqual(allocation.uuid, actual.uuid)
        self.assertIsInstance(allocation, objects.Allocation)

        allocation = self.dbapi.get_allocation_by_id(allocation.id)
        self.assertEqual(self.service.conductor.id,
                         allocation.conductor_affinity)
Пример #3
0
 def test_get_custom_fields_invalid_fields(self):
     obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
     fields = 'hostname,spongebob'
     response = self.get_json(
         '/conductors/rocky.rocks?fields=%s' % fields,
         headers={api_base.Version.string: str(api_v1.max_version())},
         expect_errors=True)
     self.assertEqual(http_client.BAD_REQUEST, response.status_int)
     self.assertEqual('application/json', response.content_type)
     self.assertIn('spongebob', response.json['error_message'])
Пример #4
0
    def test_get_collection_custom_fields(self):
        obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
        obj_utils.create_test_conductor(self.context, hostname='stein.rocks')
        fields = 'hostname,alive'

        data = self.get_json(
            '/conductors?fields=%s' % fields,
            headers={api_base.Version.string: str(api_v1.max_version())})

        self.assertEqual(2, len(data['conductors']))
        for c in data['conductors']:
            self.assertItemsEqual(['hostname', 'alive', 'links'], c)
Пример #5
0
 def test_get_one(self):
     obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
     data = self.get_json(
         '/conductors/rocky.rocks',
         headers={api_base.Version.string: str(api_v1.max_version())})
     self.assertIn('hostname', data)
     self.assertIn('drivers', data)
     self.assertIn('conductor_group', data)
     self.assertIn('alive', data)
     self.assertIn('drivers', data)
     self.assertEqual(data['hostname'], 'rocky.rocks')
     self.assertTrue(data['alive'])
Пример #6
0
 def test_get_one(self):
     obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
     data = self.get_json(
         '/conductors/rocky.rocks',
         headers={api_base.Version.string: str(api_v1.max_version())})
     self.assertIn('hostname', data)
     self.assertIn('drivers', data)
     self.assertIn('conductor_group', data)
     self.assertIn('alive', data)
     self.assertIn('drivers', data)
     self.assertEqual(data['hostname'], 'rocky.rocks')
     self.assertTrue(data['alive'])
Пример #7
0
    def test_get_collection_custom_fields(self):
        obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
        obj_utils.create_test_conductor(self.context, hostname='stein.rocks')
        fields = 'hostname,alive'

        data = self.get_json(
            '/conductors?fields=%s' % fields,
            headers={api_base.Version.string: str(api_v1.max_version())})

        self.assertEqual(2, len(data['conductors']))
        for c in data['conductors']:
            self.assertItemsEqual(['hostname', 'alive', 'links'], c)
Пример #8
0
 def test_list(self):
     obj_utils.create_test_conductor(self.context, hostname='why care')
     obj_utils.create_test_conductor(self.context, hostname='why not')
     data = self.get_json(
         '/conductors',
         headers={api_base.Version.string: str(api_v1.max_version())})
     self.assertEqual(2, len(data['conductors']))
     for c in data['conductors']:
         self.assertIn('hostname', c)
         self.assertIn('conductor_group', c)
         self.assertIn('alive', c)
         self.assertNotIn('drivers', c)
     self.assertEqual(data['conductors'][0]['hostname'], 'why care')
     self.assertEqual(data['conductors'][1]['hostname'], 'why not')
Пример #9
0
 def test_list(self):
     obj_utils.create_test_conductor(self.context, hostname='why care')
     obj_utils.create_test_conductor(self.context, hostname='why not')
     data = self.get_json(
         '/conductors',
         headers={api_base.Version.string: str(api_v1.max_version())})
     self.assertEqual(2, len(data['conductors']))
     for c in data['conductors']:
         self.assertIn('hostname', c)
         self.assertIn('conductor_group', c)
         self.assertIn('alive', c)
         self.assertNotIn('drivers', c)
     self.assertEqual(data['conductors'][0]['hostname'], 'why care')
     self.assertEqual(data['conductors'][1]['hostname'], 'why not')
Пример #10
0
    def test_resume_allocations(self, mock_allocate):
        another_conductor = obj_utils.create_test_conductor(
            self.context, id=42, hostname='another-host')

        self._start_service()

        obj_utils.create_test_allocation(
            self.context,
            state='active',
            conductor_affinity=self.service.conductor.id)
        obj_utils.create_test_allocation(
            self.context,
            state='allocating',
            conductor_affinity=another_conductor.id)
        allocation = obj_utils.create_test_allocation(
            self.context,
            state='allocating',
            conductor_affinity=self.service.conductor.id)

        self.service._resume_allocations(self.context)

        mock_allocate.assert_called_once_with(self.context, mock.ANY)
        actual = mock_allocate.call_args[0][1]
        self.assertEqual(allocation.uuid, actual.uuid)
        self.assertIsInstance(allocation, objects.Allocation)
Пример #11
0
    def test_resume_allocations(self, mock_allocate):
        another_conductor = obj_utils.create_test_conductor(
            self.context, id=42, hostname='another-host')

        self._start_service()

        obj_utils.create_test_allocation(
            self.context,
            state='active',
            conductor_affinity=self.service.conductor.id)
        obj_utils.create_test_allocation(
            self.context,
            state='allocating',
            conductor_affinity=another_conductor.id)
        allocation = obj_utils.create_test_allocation(
            self.context,
            state='allocating',
            conductor_affinity=self.service.conductor.id)

        self.service._resume_allocations(self.context)

        mock_allocate.assert_called_once_with(self.context, mock.ANY)
        actual = mock_allocate.call_args[0][1]
        self.assertEqual(allocation.uuid, actual.uuid)
        self.assertIsInstance(allocation, objects.Allocation)
Пример #12
0
    def test_get_one_conductor_offline(self, mock_utcnow):
        self.config(heartbeat_timeout=10, group='conductor')

        _time = datetime.datetime(2000, 1, 1, 0, 0)
        mock_utcnow.return_value = _time

        obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')

        mock_utcnow.return_value = _time + datetime.timedelta(seconds=30)

        data = self.get_json(
            '/conductors/rocky.rocks',
            headers={api_base.Version.string: str(api_v1.max_version())})
        self.assertIn('hostname', data)
        self.assertIn('drivers', data)
        self.assertIn('conductor_group', data)
        self.assertIn('alive', data)
        self.assertIn('drivers', data)
        self.assertEqual(data['hostname'], 'rocky.rocks')
        self.assertFalse(data['alive'])
Пример #13
0
    def test_get_one_conductor_offline(self, mock_utcnow):
        self.config(heartbeat_timeout=10, group='conductor')

        _time = datetime.datetime(2000, 1, 1, 0, 0)
        mock_utcnow.return_value = _time

        obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')

        mock_utcnow.return_value = _time + datetime.timedelta(seconds=30)

        data = self.get_json(
            '/conductors/rocky.rocks',
            headers={api_base.Version.string: str(api_v1.max_version())})
        self.assertIn('hostname', data)
        self.assertIn('drivers', data)
        self.assertIn('conductor_group', data)
        self.assertIn('alive', data)
        self.assertIn('drivers', data)
        self.assertEqual(data['hostname'], 'rocky.rocks')
        self.assertFalse(data['alive'])
Пример #14
0
 def test_sort_key(self):
     conductors = []
     for id in range(5):
         hostname = uuidutils.generate_uuid()
         conductor = obj_utils.create_test_conductor(self.context,
                                                     hostname=hostname)
         conductors.append(conductor.hostname)
     data = self.get_json(
         '/conductors?sort_key=hostname',
         headers={api_base.Version.string: str(api_v1.max_version())})
     hosts = [n['hostname'] for n in data['conductors']]
     self.assertEqual(sorted(conductors), hosts)
Пример #15
0
 def test_sort_key(self):
     conductors = []
     for id in range(5):
         hostname = uuidutils.generate_uuid()
         conductor = obj_utils.create_test_conductor(self.context,
                                                     hostname=hostname)
         conductors.append(conductor.hostname)
     data = self.get_json(
         '/conductors?sort_key=hostname',
         headers={api_base.Version.string: str(api_v1.max_version())})
     hosts = [n['hostname'] for n in data['conductors']]
     self.assertEqual(sorted(conductors), hosts)
Пример #16
0
    def _test_links(self, public_url=None):
        cfg.CONF.set_override('public_endpoint', public_url, 'api')
        obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
        headers = {api_base.Version.string: str(api_v1.max_version())}
        data = self.get_json(
            '/conductors/rocky.rocks',
            headers=headers)
        self.assertIn('links', data)
        self.assertEqual(2, len(data['links']))
        self.assertIn('rocky.rocks', data['links'][0]['href'])
        for link in data['links']:
            bookmark = link['rel'] == 'bookmark'
            self.assertTrue(self.validate_link(link['href'], bookmark=bookmark,
                                               headers=headers))

        if public_url is not None:
            expected = [{'href': '%s/v1/conductors/rocky.rocks' % public_url,
                         'rel': 'self'},
                        {'href': '%s/conductors/rocky.rocks' % public_url,
                         'rel': 'bookmark'}]
            for i in expected:
                self.assertIn(i, data['links'])
Пример #17
0
    def _test_links(self, public_url=None):
        cfg.CONF.set_override('public_endpoint', public_url, 'api')
        obj_utils.create_test_conductor(self.context, hostname='rocky.rocks')
        headers = {api_base.Version.string: str(api_v1.max_version())}
        data = self.get_json(
            '/conductors/rocky.rocks',
            headers=headers)
        self.assertIn('links', data)
        self.assertEqual(2, len(data['links']))
        self.assertIn('rocky.rocks', data['links'][0]['href'])
        for l in data['links']:
            bookmark = l['rel'] == 'bookmark'
            self.assertTrue(self.validate_link(l['href'], bookmark=bookmark,
                                               headers=headers))

        if public_url is not None:
            expected = [{'href': '%s/v1/conductors/rocky.rocks' % public_url,
                         'rel': 'self'},
                        {'href': '%s/conductors/rocky.rocks' % public_url,
                         'rel': 'bookmark'}]
            for i in expected:
                self.assertIn(i, data['links'])
Пример #18
0
    def test_collection_links(self):
        conductors = []
        for id in range(5):
            hostname = uuidutils.generate_uuid()
            conductor = obj_utils.create_test_conductor(self.context,
                                                        hostname=hostname)
            conductors.append(conductor.hostname)
        data = self.get_json(
            '/conductors/?limit=3',
            headers={api_base.Version.string: str(api_v1.max_version())})
        self.assertEqual(3, len(data['conductors']))

        next_marker = data['conductors'][-1]['hostname']
        self.assertIn(next_marker, data['next'])
Пример #19
0
    def test_collection_links(self):
        conductors = []
        for id in range(5):
            hostname = uuidutils.generate_uuid()
            conductor = obj_utils.create_test_conductor(self.context,
                                                        hostname=hostname)
            conductors.append(conductor.hostname)
        data = self.get_json(
            '/conductors/?limit=3',
            headers={api_base.Version.string: str(api_v1.max_version())})
        self.assertEqual(3, len(data['conductors']))

        next_marker = data['conductors'][-1]['hostname']
        self.assertIn(next_marker, data['next'])
Пример #20
0
    def test_collection_links_custom_fields(self):
        cfg.CONF.set_override('max_limit', 3, 'api')
        conductors = []
        fields = 'hostname,alive'
        for id in range(5):
            hostname = uuidutils.generate_uuid()
            conductor = obj_utils.create_test_conductor(self.context,
                                                        hostname=hostname)
            conductors.append(conductor.hostname)
        data = self.get_json(
            '/conductors?fields=%s' % fields,
            headers={api_base.Version.string: str(api_v1.max_version())})
        self.assertEqual(3, len(data['conductors']))

        next_marker = data['conductors'][-1]['hostname']
        self.assertIn(next_marker, data['next'])
        self.assertIn('fields', data['next'])