Beispiel #1
0
    def test_update_discovered_asset(self):
        asset = AssetDocument.get_or_create('10.0.0.1')
        self.assertEqual(asset.tags, [AssetStatus.DISCOVERED])
        self.assertEqual(1, Search().index(AssetDocument.Index.name).count())

        asset = AssetDocument(ip_address='10.0.0.1',
                              os='Windows',
                              id=1,
                              confidentiality_requirement='NOT_DEFINED',
                              integrity_requirement='NOT_DEFINED',
                              availability_requirement='NOT_DEFINED',
                              hostname='hostname_1')

        AssetDocument.create_or_update({asset.id: asset}, AssetConfigMock())
        thread_pool_executor.wait_for_all()

        self.assertEqual(1, Search().index(AssetDocument.Index.name).count())

        result = AssetDocument.search().filter(
            'term', ip_address='10.0.0.1').execute()
        uut = result.hits[0]

        self.assertEqual(uut.os, 'Windows')
        self.assertEqual(uut.ip_address, '10.0.0.1')
        self.assertEqual(uut.hostname, 'hostname_1')
        self.assertEqual(uut.tags, [])
Beispiel #2
0
    def test_update_discovered_asset(self):
        asset_tenant_1 = self.create_asset(self.config_tenant_1.name)
        discovered_asset = AssetDocument.get_or_create(
            asset_tenant_1.ip_address)

        cve = create_cve()
        create_vulnerability(discovered_asset, cve)

        self.assertEqual(1, Search().index(AssetDocument.Index.name).count())

        AssetDocument.create_or_update({asset_tenant_1.id: asset_tenant_1})
        thread_pool_executor.wait_for_all()

        self.assertEqual(1, Search().index(AssetDocument.Index.name).count())

        self.assertEqual(
            1,
            Search().index(VulnerabilityDocument.Index.name).count())

        result = VulnerabilityDocument.search().filter(
            'term', cve__id='CVE-2017-0002').execute()
        self.assertEqual(result.hits[0].asset.id, asset_tenant_1.id)
        self.assertEqual(result.hits[0].asset.ip_address,
                         asset_tenant_1.ip_address)
        self.assertEqual(result.hits[0].asset.confidentiality_requirement,
                         asset_tenant_1.confidentiality_requirement)
        self.assertEqual(result.hits[0].asset.availability_requirement,
                         asset_tenant_1.availability_requirement)
Beispiel #3
0
def _update_assets(config_id: int):
    config = Config.objects.filter(pk=config_id)

    if config.exists():
        config = config.first()

        try:
            config.set_status(Config.Status.IN_PROGRESS)
            client = RalphClient(config)
            parser = AssetsParser(config)
            LOGGER.info(F'Start loading data from Ralph: {config.name}')
            users = client.get_users()
            users = OwnerParser.parse(users)

            assets = client.get_data_center_assets()
            assets = parser.parse(assets, users)
            AssetDocument.create_or_update(assets, config)
            LOGGER.info(
                F'Finish loading data center assets from Ralph: {config.name}')

            assets = client.get_virtual_assets()
            assets = parser.parse(assets, users)
            AssetDocument.create_or_update(assets, config)
            LOGGER.info(
                F'Finish loading virtual assets from Ralph: {config.name}')
            LOGGER.info(F'Finish loading data from Ralph: {config.name}')

            config.set_status(Config.Status.SUCCESS)
        except Exception as ex:
            LOGGER.error(F'Error with loading data from Ralph: {ex}')
            config.set_status(status=Config.Status.ERROR, error_description=ex)
        finally:
            thread_pool_executor.wait_for_all()
Beispiel #4
0
    def test_delete_asset(self):
        asset_1 = self.create_asset(asset_id=1,
                                    ip_address='10.0.0.1',
                                    hostname='hostname_1')
        asset_2 = self.create_asset(asset_id=2,
                                    ip_address='10.0.0.2',
                                    hostname='hostname_2')

        self.assertEqual(2, Search().index(AssetDocument.Index.name).count())
        AssetDocument.create_or_update({asset_1.id: asset_1},
                                       AssetConfigMock())
        thread_pool_executor.wait_for_all()

        result = AssetDocument.search().filter(
            Q('match', tags=AssetStatus.DELETED)).execute()
        self.assertEqual(1, len(result.hits))
        self.assertEqual(result.hits[0].ip_address, asset_2.ip_address)
        self.assertEqual(result.hits[0].id, asset_2.id)
Beispiel #5
0
    def test_get_or_create_call_get_existing_asset(self):
        asset_1 = self.create_asset(asset_id=1,
                                    ip_address='10.0.0.1',
                                    hostname='hostname_1')
        self.create_asset(asset_id=2,
                          ip_address='10.0.0.2',
                          hostname='hostname_2')

        self.assertEqual(2, Search().index(AssetDocument.Index.name).count())
        AssetDocument.create_or_update({asset_1.id: asset_1},
                                       AssetConfigMock())

        asset_3 = AssetDocument.get_or_create('10.0.0.1')
        self.assertEqual(2, Search().index(AssetDocument.Index.name).count())

        self.assertEqual(asset_3.ip_address, asset_1.ip_address)
        self.assertEqual(asset_3.hostname, asset_1.hostname)
        self.assertEqual(asset_3.id, asset_1.id)
        self.assertEqual(asset_3.confidentiality_requirement,
                         asset_1.confidentiality_requirement)
        self.assertEqual(asset_3.integrity_requirement,
                         asset_1.integrity_requirement)
        self.assertEqual(asset_3.availability_requirement,
                         asset_1.availability_requirement)
Beispiel #6
0
    def test_update_asset(self):
        asset_tenant_1 = self.create_asset(self.config_tenant_1.name)
        asset_tenant_2 = self.create_asset(self.config_tenant_2.name)
        AssetDocument.create_or_update({asset_tenant_1.id: asset_tenant_1},
                                       self.config_tenant_1)
        AssetDocument.create_or_update({asset_tenant_2.id: asset_tenant_2},
                                       self.config_tenant_2)
        thread_pool_executor.wait_for_all()

        asset_tenant_1 = self.create_asset(self.config_tenant_1.name)
        asset_tenant_1.hostname = 'tenant-test'
        AssetDocument.create_or_update({asset_tenant_1.id: asset_tenant_1},
                                       self.config_tenant_1)
        thread_pool_executor.wait_for_all()

        result = AssetDocument.search(index='test.tenant.asset').filter(
            'term', ip_address='10.10.10.1').execute()
        self.assertEqual(1, len(result.hits))
        self.assertEqual(result.hits[0].ip_address, '10.10.10.1')
        self.assertEqual(result.hits[0].hostname, 'tenant-test')