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, [])
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)
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()
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)
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)
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')