def test_generate_lockfile(rule_runner: RuleRunner) -> None: artifacts = ArtifactRequirements([ ArtifactRequirement(Coordinate("org.hamcrest", "hamcrest-core", "1.3")) ]) result = rule_runner.request( GenerateLockfileResult, [ GenerateJvmLockfile(artifacts=artifacts, resolve_name="test", lockfile_dest="lock.txt") ], ) digest_contents = rule_runner.request(DigestContents, [result.digest]) assert len(digest_contents) == 1 expected = CoursierResolvedLockfile( entries=(CoursierLockfileEntry( coord=Coordinate( group="org.hamcrest", artifact="hamcrest-core", version="1.3", ), file_name="org.hamcrest_hamcrest-core_1.3.jar", direct_dependencies=Coordinates([]), dependencies=Coordinates([]), file_digest=FileDigest( fingerprint= "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", serialized_bytes_length=45024, ), ), ), metadata=JVMLockfileMetadata.new(artifacts), ) assert CoursierResolvedLockfile.from_serialized( digest_contents[0].content) == expected
def jvm_lockfile(self, request) -> JVMLockfileFixture: mark = request.node.get_closest_marker("jvm_lockfile") definition = JVMLockfileFixtureDefinition.from_kwargs(mark.kwargs) # Load the lockfile. lockfile_path = request.node.path.parent / definition.lockfile_rel_path lockfile_contents = lockfile_path.read_bytes() lockfile = CoursierResolvedLockfile.from_serialized(lockfile_contents) # Check the lockfile's requirements against the requirements in the lockfile. # Fail the test if the lockfile needs to be regenerated. artifact_reqs = ArtifactRequirements([ ArtifactRequirement(coordinate) for coordinate in definition.coordinates ]) if not lockfile.metadata: raise ValueError( f"Expected JVM lockfile {definition.lockfile_rel_path} to have metadata." ) if not lockfile.metadata.is_valid_for(artifact_reqs, LockfileContext.TOOL): raise ValueError( f"Lockfile fixture {definition.lockfile_rel_path} is not valid. " "Please re-generate it using: " f"{bin_name()} internal-generate-test-lockfile-fixtures ::") return JVMLockfileFixture(lockfile, lockfile_contents.decode(), artifact_reqs)