def test_scanpipe_pipes_scancode_virtual_codebase(self): project = Project.objects.create(name="asgiref") input_location = self.data_location / "asgiref-3.3.0_scan.json" virtual_codebase = scancode.get_virtual_codebase( project, input_location) self.assertEqual(19, len(virtual_codebase.resources.keys())) scancode.create_codebase_resources(project, virtual_codebase) scancode.create_discovered_packages(project, virtual_codebase) self.assertEqual(18, CodebaseResource.objects.count()) self.assertEqual(1, DiscoveredPackage.objects.count()) # Make sure the root is not created as a CodebaseResource, walk(skip_root=True) self.assertFalse( CodebaseResource.objects.filter(path="codebase").exists()) # Make sure the root is properly stripped, see `.get_path(strip_root=True)` self.assertFalse( CodebaseResource.objects.filter( path__startswith="codebase").exists()) # Make sure the detected package is properly assigned to its codebase resource package = DiscoveredPackage.objects.get() expected = "asgiref-3.3.0-py3-none-any.whl" self.assertEqual(expected, package.codebase_resources.get().path) # The functions can be called again and existing objects are skipped scancode.create_codebase_resources(project, virtual_codebase) scancode.create_discovered_packages(project, virtual_codebase) self.assertEqual(18, CodebaseResource.objects.count()) self.assertEqual(1, DiscoveredPackage.objects.count())
def test_scanpipe_pipes_scancode_create_codebase_resources_inject_policy( self): project = Project.objects.create(name="asgiref") input_location = self.data_location / "asgiref-3.3.0_scan.json" virtual_codebase = scancode.get_virtual_codebase( project, input_location) scanpipe_app.license_policies_index = license_policies_index scancode.create_codebase_resources(project, virtual_codebase) resources = project.codebaseresources resource1 = resources.get( path__endswith="asgiref-3.3.0.dist-info/LICENSE") self.assertEqual("bsd-new", resource1.licenses[0]["key"]) self.assertNotIn("bsd-new", license_policies_index) self.assertIsNone(resource1.licenses[0]["policy"]) resource2 = resources.get(path__endswith="asgiref/timeout.py") self.assertEqual("apache-2.0", resource2.licenses[0]["key"]) expected = { "label": "Approved License", "color_code": "#008000", "license_key": "apache-2.0", "compliance_alert": "", } self.assertEqual(expected, resource2.licenses[0]["policy"])
def build_inventory_from_scan(self): """ Process the JSON scan to populate resources and packages. """ project = self.project scanned_codebase = scancode.get_virtual_codebase(project, self.input_location) scancode.create_codebase_resources(project, scanned_codebase) scancode.create_discovered_packages(project, scanned_codebase)
def test_scanpipe_pipes_scancode_virtual_codebase(self): project = Project.objects.create(name="asgiref") input_location = self.data_location / "asgiref-3.3.0_scan.json" virtual_codebase = scancode.get_virtual_codebase(project, input_location) self.assertEqual(19, len(virtual_codebase.resources.keys())) scancode.create_codebase_resources(project, virtual_codebase) scancode.create_discovered_packages(project, virtual_codebase) self.assertEqual(19, CodebaseResource.objects.count()) self.assertEqual(1, DiscoveredPackage.objects.count()) # The functions can be called again and existing objects are skipped scancode.create_codebase_resources(project, virtual_codebase) scancode.create_discovered_packages(project, virtual_codebase) self.assertEqual(19, CodebaseResource.objects.count()) self.assertEqual(1, DiscoveredPackage.objects.count())
def test_scanpipe_pipes_codebase_get_tree(self): fixtures = self.data_location / "asgiref-3.3.0_fixtures.json" call_command("loaddata", fixtures, **{"verbosity": 0}) project = Project.objects.get(name="asgiref") scan_results = self.data_location / "asgiref-3.3.0_scan.json" virtual_codebase = scancode.get_virtual_codebase(project, scan_results) project_codebase = codebase.ProjectCodebase(project) fields = ["name", "path"] virtual_tree = codebase.get_tree( virtual_codebase.root, fields, codebase=virtual_codebase ) project_tree = codebase.get_tree(project_codebase.root, fields) with open(self.data_location / "asgiref-3.3.0_tree.json") as f: expected = json.loads(f.read()) self.assertEqual(expected, project_tree) self.assertEqual(expected, virtual_tree)