コード例 #1
0
    def test_get_available_networks_dc_asset(self):
        rack, nets = self._generate_rack_with_networks()

        vm = VirtualServerFullFactory(parent=DataCenterAssetFullFactory(
            rack=rack))

        self.assertNetworksTheSame(nets, vm._get_available_networks())
コード例 #2
0
ファイル: test_api.py プロジェクト: wayneburlingame/ralph
 def setUp(self):
     super().setUp()
     self.cf = CustomField.objects.create(
         name='test_cf', use_as_configuration_variable=True)
     # is should be skipped in API
     self.bo_asset = BackOfficeAssetFactory(barcode='12345',
                                            hostname='host1')
     self.conf_module_1 = ConfigurationModuleFactory()
     self.conf_module_2 = ConfigurationModuleFactory(
         parent=self.conf_module_1, name='ralph')
     self.conf_class_1 = ConfigurationClassFactory(
         module=self.conf_module_2, class_name='cls1')
     self.dc_asset = DataCenterAssetFullFactory(
         service_env__service__name='test-service',
         service_env__service__uid='sc-123',
         service_env__environment__name='prod',
         configuration_path=self.conf_class_1,
     )
     self.dc_asset.update_custom_field('test_cf', 'abc')
     self.virtual = VirtualServerFullFactory(
         parent=self.dc_asset,
         configuration_path__module__name='ralph2',
         service_env__service__uid='sc-222',
         service_env__environment__name='some_env',
     )
     self.virtual.update_custom_field('test_cf', 'def')
     se = ServiceEnvironmentFactory(service__uid='sc-333')
     self.cloud_host = CloudHostFullFactory(
         configuration_path__module__name='ralph3',
         service_env=se,
         parent__service_env=se,
         hostname='aaaa',
         hypervisor=self.dc_asset)
     self.cloud_host.ip_addresses = ['10.20.30.40']
     self.cloud_host.update_custom_field('test_cf', 'xyz')
コード例 #3
0
    def test_get_available_networks_cloud_host(self):
        rack, nets = self._generate_rack_with_networks()

        vm = VirtualServerFullFactory(parent=CloudHostFactory(
            hypervisor=DataCenterAssetFullFactory(rack=rack)))

        self.assertNetworksTheSame(nets, vm._get_available_networks())
コード例 #4
0
 def test_changelist_view(self):
     DataCenterAssetFullFactory.create_batch(5)
     VirtualServerFullFactory.create_batch(5)
     CloudHostFullFactory.create_batch(4)
     ClusterFactory.create_batch(4)
     with self.assertNumQueries(19):
         result = self.client.get(
             reverse('admin:data_center_dchost_changelist'), )
     # DCAssets - 5
     # VirtualServer + hypervisors - 10
     # Cluster - 4
     # CloudHost + hypervisors - 8
     self.assertEqual(result.context_data['cl'].result_count, 27)
コード例 #5
0
ファイル: test_api.py プロジェクト: thorjeus/ralph
 def setUp(self):
     super().setUp()
     self.hypervisor = DataCenterAssetFactory()
     self.cloud_hypervisor = CloudHostFactory()
     self.cluster = ClusterFactory()
     self.type = VirtualServerType.objects.create(name='XEN')
     self.virtual_server = VirtualServerFullFactory(
         service_env__environment__name='some_env', )
     self.virtual_server.parent.service_env.service.uid = 's-12345'
     self.virtual_server.parent.service_env.service.save()
     self.virtual_server.service_env.service.business_owners = [self.user1]
     self.virtual_server.service_env.service.technical_owners = [self.user2]
     self.virtual_server.service_env.save()
     self.virtual_server2 = VirtualServerFullFactory()
     self.ip = IPAddressFactory(ethernet=EthernetFactory(
         base_object=self.virtual_server2))
コード例 #6
0
    def test_post_by_hostname_creates_scm_status_record(self):
        v_server = VirtualServerFullFactory()

        url = reverse(
            'scm-info-post',
            kwargs={'hostname': v_server.hostname}
        )

        data = {
            'last_checked': datetime.now().isoformat(),
            'check_result': SCMCheckResult.scm_ok.id
        }

        resp = self.client.post(url, data=data)

        self.assertEqual(resp.status_code, 201)
        self.assertEqual(
            resp.data.get('base_object'),
            v_server.baseobject_ptr_id
        )
        self.assertEqual(
            resp.data.get('check_result'),
            SCMCheckResult.scm_ok.raw
        )
        self.assertEqual(
            resp.data.get('last_checked'),
            data['last_checked']
        )
コード例 #7
0
    def test_double_post_does_not_create_duplicate_scm_status_record(self):
        v_server = VirtualServerFullFactory()

        url = reverse(
            'scm-info-post',
            kwargs={'hostname': v_server.hostname}
        )

        data = {
            'last_checked': datetime.now().isoformat(),
            'check_result': SCMCheckResult.check_failed.id
        }

        resp = self.client.post(url, data=data)
        self.assertEqual(resp.status_code, 201)

        data = {
            'last_checked': datetime.now().isoformat(),
            'check_result': SCMCheckResult.check_failed.id
        }

        resp = self.client.post(url, data=data)
        self.assertEqual(resp.status_code, 200)

        self.assertEqual(
            len(SCMStatusCheck.objects.all()), 1
        )
コード例 #8
0
    def test_delete_non_existing_scm_status_record_returns_404(self):
        v_server = VirtualServerFullFactory()

        url = reverse(
            'scm-info-post',
            kwargs={'hostname': v_server.hostname}
        )

        resp = self.client.delete(url)
        self.assertEqual(resp.status_code, 404)
コード例 #9
0
 def test_changelist_virtualserver_location(self):
     VirtualServerFullFactory(parent=DataCenterAssetFullFactory(
         rack__name='Rack #1',
         rack__server_room__name='SR1',
         rack__server_room__data_center__name='DC1',
         hostname='s12345.mydc.net',
     ))
     result = self.client.get(
         reverse('admin:data_center_dchost_changelist'), )
     self.assertContains(result, 'DC1 / SR1 / Rack #1 / s12345.mydc.net')
コード例 #10
0
    def test_creating_scm_status_record_ignores_baseobject_id_in_data(self):
        v_server_1 = VirtualServerFullFactory()
        v_server_2 = VirtualServerFullFactory()

        url = reverse(
            'scm-info-post',
            kwargs={'hostname': v_server_1.hostname}
        )

        data = {
            'last_checked': datetime.now().isoformat(),
            'check_result': SCMCheckResult.check_failed.id,
            'base_object': v_server_2.baseobject_ptr_id
        }

        resp = self.client.post(url, data=data)
        self.assertEqual(resp.status_code, 201)

        self.assertEqual(
            resp.data.get('base_object'),
            v_server_1.baseobject_ptr_id
        )
コード例 #11
0
    def test_delete_scm_status_record(self):
        v_server = VirtualServerFullFactory()
        existing_scan = SCMStatusCheckFactory(
            base_object=v_server.baseobject_ptr,
            check_result=SCMCheckResult.scm_ok
        )

        url = reverse(
            'scm-info-post',
            kwargs={'hostname': v_server.hostname}
        )

        resp = self.client.delete(url)
        self.assertEqual(resp.status_code, 204)

        with self.assertRaises(ObjectDoesNotExist):
            SCMStatusCheck.objects.get(pk=existing_scan.pk)
コード例 #12
0
    def test_post_by_hostname_updates_scm_status_record(self):
        v_server = VirtualServerFullFactory()
        existing_scan = SCMStatusCheckFactory(
            base_object=v_server.baseobject_ptr,
            check_result=SCMCheckResult.scm_ok
        )

        url = reverse(
            'scm-info-post',
            kwargs={'hostname': v_server.hostname}
        )

        data = {
            'last_checked': datetime.now().isoformat(),
            'check_result': SCMCheckResult.check_failed.id
        }

        resp = self.client.post(url, data=data)
        self.assertEqual(resp.status_code, 200)

        updated_scan = SCMStatusCheck.objects.get(pk=existing_scan.pk)
        self.assertEqual(
            updated_scan.check_result,
            SCMCheckResult.check_failed
        )
        self.assertFalse(updated_scan.ok)
        self.assertEqual(
            resp.data.get('base_object'),
            existing_scan.base_object_id
        )
        self.assertEqual(
            resp.data.get('check_result'),
            SCMCheckResult.check_failed.raw
        )
        self.assertEqual(
            resp.data.get('last_checked'),
            data['last_checked']
        )
コード例 #13
0
ファイル: test_api.py プロジェクト: wayneburlingame/ralph
class DCHostAPITests(RalphAPITestCase):
    def setUp(self):
        super().setUp()
        self.cf = CustomField.objects.create(
            name='test_cf', use_as_configuration_variable=True)
        # is should be skipped in API
        self.bo_asset = BackOfficeAssetFactory(barcode='12345',
                                               hostname='host1')
        self.conf_module_1 = ConfigurationModuleFactory()
        self.conf_module_2 = ConfigurationModuleFactory(
            parent=self.conf_module_1, name='ralph')
        self.conf_class_1 = ConfigurationClassFactory(
            module=self.conf_module_2, class_name='cls1')
        self.dc_asset = DataCenterAssetFullFactory(
            service_env__service__name='test-service',
            service_env__service__uid='sc-123',
            service_env__environment__name='prod',
            configuration_path=self.conf_class_1,
        )
        self.dc_asset.update_custom_field('test_cf', 'abc')
        self.virtual = VirtualServerFullFactory(
            parent=self.dc_asset,
            configuration_path__module__name='ralph2',
            service_env__service__uid='sc-222',
            service_env__environment__name='some_env',
        )
        self.virtual.update_custom_field('test_cf', 'def')
        se = ServiceEnvironmentFactory(service__uid='sc-333')
        self.cloud_host = CloudHostFullFactory(
            configuration_path__module__name='ralph3',
            service_env=se,
            parent__service_env=se,
            hostname='aaaa',
            hypervisor=self.dc_asset)
        self.cloud_host.ip_addresses = ['10.20.30.40']
        self.cloud_host.update_custom_field('test_cf', 'xyz')

    def test_get_dc_hosts_list(self):
        url = reverse('dchost-list')
        with self.assertNumQueries(12):
            response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 3)

    def test_filter_by_type_dc_asset(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'object_type': 'datacenterasset'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)
        dca = response.data['results'][0]
        self.assertEqual(dca['hostname'], self.dc_asset.hostname)
        self.assertEqual(len(dca['ethernet']), 3)
        self.assertEqual(len(dca['ipaddresses']), 2)
        self.assertCountEqual(dca['tags'], ['abc, cde', 'xyz'])
        self.assertEqual(dca['configuration_path']['module']['name'], 'ralph')
        self.assertEqual(dca['service_env']['service_uid'], 'sc-123')
        self.assertEqual(dca['object_type'], 'datacenterasset')
        self.assertEqual(dca['custom_fields'], {'test_cf': 'abc'})
        self.assertEqual(dca['configuration_variables'], {'test_cf': 'abc'})

    def test_filter_by_type_virtual(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'object_type': 'virtualserver'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)
        virt = response.data['results'][0]
        self.assertEqual(virt['hostname'], self.virtual.hostname)
        self.assertEqual(len(virt['ethernet']), 2)
        self.assertEqual(len(virt['ipaddresses']), 1)
        self.assertCountEqual(virt['tags'], ['abc, cde', 'xyz'])
        self.assertEqual(virt['configuration_path']['module']['name'],
                         'ralph2')
        self.assertEqual(virt['service_env']['service_uid'], 'sc-222')
        self.assertEqual(virt['object_type'], 'virtualserver')
        self.assertEqual(virt['custom_fields'], {'test_cf': 'def'})
        self.assertEqual(virt['configuration_variables'], {'test_cf': 'def'})

    def test_filter_by_type_cloudhost(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'object_type': 'cloudhost'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)
        cloud = response.data['results'][0]
        self.assertEqual(cloud['hostname'], self.cloud_host.hostname)
        self.assertCountEqual(cloud['tags'], ['abc, cde', 'xyz'])
        self.assertEqual(cloud['configuration_path']['module']['name'],
                         'ralph3')
        self.assertEqual(cloud['service_env']['service_uid'], 'sc-333')
        self.assertEqual(cloud['object_type'], 'cloudhost')
        self.assertEqual(len(cloud['ethernet']), 1)
        self.assertEqual(len(cloud['ipaddresses']), 1)
        self.assertEqual(cloud['custom_fields'], {'test_cf': 'xyz'})
        self.assertEqual(cloud['configuration_variables'], {'test_cf': 'xyz'})

    def test_filter_by_hostname(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'hostname': 'aaaa'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_name(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'name': 'aaaa'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_service_uid(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'service': 'sc-222'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_ip(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'ip': '10.20.30.40'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_configuration_path(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'configuration_path': 'ralph/cls1'}))
        response = self.client.get(url, format='json')
        self.assertEqual(len(response.data['results']), 1)
        self.assertEqual(response.data['results'][0]['id'], self.dc_asset.id)

    def test_filter_by_configuration_path_module_name(self):
        url = '{}?{}'.format(
            reverse('dchost-list'),
            urlencode({'configuration_path__module__name': 'ralph'}))
        response = self.client.get(url, format='json')
        self.assertEqual(len(response.data['results']), 1)
        self.assertEqual(response.data['results'][0]['id'], self.dc_asset.id)

    def test_filter_by_env_name(self):
        url = '{}?{}'.format(reverse('dchost-list'),
                             urlencode({'env': 'some_env'}))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)
コード例 #14
0
 def setUp(self):
     self.vs = VirtualServerFullFactory()
     self.custom_field_str = CustomField.objects.create(
         name='test str', type=CustomFieldTypes.STRING, default_value='xyz')
コード例 #15
0
ファイル: test_api.py プロジェクト: thorjeus/ralph
class VirtualServerAPITestCase(RalphAPITestCase):
    def setUp(self):
        super().setUp()
        self.hypervisor = DataCenterAssetFactory()
        self.cloud_hypervisor = CloudHostFactory()
        self.cluster = ClusterFactory()
        self.type = VirtualServerType.objects.create(name='XEN')
        self.virtual_server = VirtualServerFullFactory(
            service_env__environment__name='some_env', )
        self.virtual_server.parent.service_env.service.uid = 's-12345'
        self.virtual_server.parent.service_env.service.save()
        self.virtual_server.service_env.service.business_owners = [self.user1]
        self.virtual_server.service_env.service.technical_owners = [self.user2]
        self.virtual_server.service_env.save()
        self.virtual_server2 = VirtualServerFullFactory()
        self.ip = IPAddressFactory(ethernet=EthernetFactory(
            base_object=self.virtual_server2))

    def test_get_virtual_server_list(self):
        url = reverse('virtualserver-list')
        with self.assertNumQueries(13):
            response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 2)

    def test_get_virtual_server_details(self):
        url = reverse('virtualserver-detail', args=(self.virtual_server.id, ))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['hostname'],
                         self.virtual_server.hostname)
        self.assertEqual(len(response.data['ethernet']), 2)
        self.assertCountEqual([
            eth['ipaddress']['address']
            for eth in response.data['ethernet'] if eth['ipaddress']
        ], self.virtual_server.ipaddresses.values_list('address', flat=True))
        self.assertEqual(len(response.data['memory']), 2)
        self.assertEqual(response.data['memory'][0]['speed'], 1600)
        self.assertEqual(response.data['memory'][0]['size'], 8192)
        self.assertEqual(response.data['business_owners'][0]['username'],
                         'user1')
        self.assertEqual(response.data['technical_owners'][0]['username'],
                         'user2')

    def test_create_virtual_server(self):
        virtual_server_count = VirtualServer.objects.count()
        url = reverse('virtualserver-list')
        data = {
            'hostname': 's1234.local',
            'type': self.type.id,
            'sn': '143ed36a-3e86-457d-9e19-3dcfe4d5ed26',
            'hypervisor': self.hypervisor.id,
        }
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(VirtualServer.objects.count(),
                         virtual_server_count + 1)
        virtual_server = VirtualServer.objects.get(pk=response.data['id'])
        self.assertEqual(virtual_server.hostname, data['hostname'])
        self.assertEqual(virtual_server.parent.id, self.hypervisor.id)
        self.assertEqual(virtual_server.sn, data['sn'])

    def test_create_virtual_server_with_cloud_host_as_parent(self):
        virtual_server_count = VirtualServer.objects.count()
        url = reverse('virtualserver-list')
        data = {
            'hostname': 's1234.local',
            'type': self.type.id,
            'sn': '143ed36a-3e86-457d-9e19-3dcfe4d5ed26',
            'hypervisor': self.cloud_hypervisor.id,
        }
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(VirtualServer.objects.count(),
                         virtual_server_count + 1)
        virtual_server = VirtualServer.objects.get(pk=response.data['id'])
        self.assertEqual(virtual_server.hostname, data['hostname'])
        self.assertEqual(virtual_server.parent.id, self.cloud_hypervisor.id)
        self.assertEqual(virtual_server.sn, data['sn'])

    def test_patch_virtual_server(self):
        url = reverse('virtualserver-detail', args=(self.virtual_server.id, ))
        data = {'hostname': 's111111.local'}
        response = self.client.patch(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.virtual_server.refresh_from_db()
        self.assertEqual(self.virtual_server.hostname, 's111111.local')

    def test_filter_by_configuration_path(self):
        url = reverse('virtualserver-list') + '?configuration_path={}'.format(
            self.virtual_server.configuration_path.path, )
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_hostname(self):
        url = reverse('virtualserver-list') + '?hostname={}'.format(
            self.virtual_server.hostname, )
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_ip_address(self):
        url = reverse('virtualserver-list') + '?ip={}'.format(
            self.ip.address, )
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_service_uid(self):
        url = reverse('virtualserver-list') + '?service={}'.format(
            self.virtual_server.service_env.service.uid, )
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_service_uid2(self):
        url = (reverse('virtualserver-list') +
               '?service_env__service__uid={}'.format(
                   self.virtual_server.service_env.service.uid, ))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_service_id(self):
        url = (reverse('virtualserver-list') +
               '?service_env__service__id={}'.format(
                   self.virtual_server.service_env.service.id, ))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_service_name(self):
        url = reverse('virtualserver-list') + '?service={}'.format(
            self.virtual_server.service_env.service.name, )
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_service_name2(self):
        url = (reverse('virtualserver-list') +
               '?service_env__service__name={}'.format(
                   self.virtual_server.service_env.service.name, ))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_env_name(self):
        url = reverse('virtualserver-list') + '?env=some_env'
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)

    def test_filter_by_hypervisor_service(self):
        url = reverse('virtualserver-list') + '?hypervisor_service=s-12345'
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'], 1)
        self.assertEqual(response.data['results'][0]['id'],
                         self.virtual_server.id)