public static void GenerateNupkgMetadataFile(string nupkgPath, string installPath, string hashPath, string nupkgMetadataPath) { ConcurrencyUtilities.ExecuteWithFileLocked(nupkgPath, action: () => { // make sure new hash file doesn't exists within File lock before actually creating it. if (!File.Exists(nupkgMetadataPath)) { var tempNupkgMetadataFilePath = Path.Combine(installPath, Path.GetRandomFileName()); using (var stream = File.Open(nupkgPath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var packageReader = new PackageArchiveReader(stream)) { // get hash of unsigned content of signed package var packageHash = packageReader.GetContentHashForSignedPackage(CancellationToken.None); // if null, then it's unsigned package so just read the existing sha512 file if (string.IsNullOrEmpty(packageHash)) { packageHash = File.ReadAllText(hashPath); } // write the new hash file var hashFile = new NupkgMetadataFile() { ContentHash = packageHash }; NupkgMetadataFileFormat.Write(tempNupkgMetadataFilePath, hashFile); File.Move(tempNupkgMetadataFilePath, nupkgMetadataPath); } } }); }
public void Equals_DifferentContentHash_ReturnsFalse() { Func <NupkgMetadataFile> getMetadataFile = () => { var metadataFile = new NupkgMetadataFile() { Version = 1, ContentHash = "tempContentHash" }; return(metadataFile); }; var self = getMetadataFile(); var other = getMetadataFile(); other.ContentHash = "contentHashChanged"; Assert.NotSame(self, other); Assert.NotEqual(self, other); }
public void Equals_DifferentSource_ReturnsFalse() { Func <NupkgMetadataFile> getMetadataFile = () => { var metadataFile = new NupkgMetadataFile() { Version = 2, ContentHash = "tempContentHash", Source = "https://source/v3/index.json" }; return(metadataFile); }; var self = getMetadataFile(); var other = getMetadataFile(); other.Source = "https://other/v3/index.json"; Assert.NotSame(self, other); Assert.NotEqual(self, other); }
public void NupkgMetadataFileFormat_Write() { var nupkgMetadataFileContent = @"{ ""version"": 1, ""contentHash"": ""NhfNp80eWq5ms7fMrjuRqpwhL1H56IVzXF9d+OIDcEfQ92m1DyE0c+ufUE1ogB09+sYLd58IO4eJ8jyn7AifbA=="" }"; NupkgMetadataFile metadataFile = null; using (var reader = new StringReader(nupkgMetadataFileContent)) { metadataFile = NupkgMetadataFileFormat.Read(reader, NullLogger.Instance, string.Empty); } using (var writer = new StringWriter()) { NupkgMetadataFileFormat.Write(writer, metadataFile); var output = JObject.Parse(writer.ToString()); var expected = JObject.Parse(nupkgMetadataFileContent); Assert.Equal(expected.ToString(), output.ToString()); } }
public void Equals_SameContents_ReturnsTrue(int fileVersion) { Func <NupkgMetadataFile> getMetadataFile = () => { var metadataFile = new NupkgMetadataFile() { Version = fileVersion, ContentHash = "tempContentHash" }; if (fileVersion >= 2) { metadataFile.Source = "https://source/v3/index.json"; } return(metadataFile); }; var self = getMetadataFile(); var other = getMetadataFile(); Assert.NotSame(self, other); Assert.Equal(self, other); }