public void ReadDebPackageTest() { using (Stream stream = File.OpenRead("Deb/libplist3_1.12-3.1_amd64.deb")) { var package = DebPackageReader.Read(stream); Assert.Equal(new Version(2, 0), package.PackageFormatVersion); Assert.NotNull(package.ControlFile); Assert.Equal(13, package.ControlFile.Count); Assert.Equal("libplist3", package.ControlFile["Package"]); Assert.Equal("libplist", package.ControlFile["Source"]); Assert.Equal("1.12-3.1", package.ControlFile["Version"]); Assert.Equal("amd64", package.ControlFile["Architecture"]); stream.Seek(0, SeekOrigin.Begin); using (var payload = DebPackageReader.GetPayloadStream(stream)) using (var tarFile = new TarFile(payload, leaveOpen: true)) { while (tarFile.Read()) { var tarHeader = (TarHeader)tarFile.FileHeader; Assert.Equal(tarHeader.Checksum, tarHeader.ComputeChecksum()); if (tarHeader.TypeFlag != TarTypeFlag.RegType) { tarFile.Skip(); } else { var fname = tarFile.FileName; Assert.StartsWith("./", fname); fname = fname.Substring(2); if (!package.Md5Sums.TryGetValue(fname, out var sum)) { throw new Exception($"Checksum for {fname} not found"); } string hash; using (var fileStream = tarFile.Open()) using (var md5 = MD5.Create()) hash = BitConverter.ToString(md5.ComputeHash(fileStream)).Replace("-", string.Empty) .ToLower(); Assert.Equal(sum, hash); } } } } }
public void ReadDebPackageWithLargeFileNamesTest() { using (Stream stream = File.OpenRead("Deb/largefilename.deb")) { var package = DebPackageReader.Read(stream); Collection <string> fileNames = new Collection <string>(); stream.Seek(0, SeekOrigin.Begin); using (var payload = DebPackageReader.GetPayloadStream(stream)) using (var tarFile = new TarFile(payload, leaveOpen: true)) { while (tarFile.Read()) { fileNames.Add(tarFile.FileName); } } Assert.Equal( new string[] { "./", "./usr/", "./usr/lib/", "./usr/lib/mono/", "./usr/lib/mono/4.5/", "./usr/lib/mono/gac/", "./usr/lib/mono/gac/System.Runtime.InteropServices.RuntimeInformation/", "./usr/lib/mono/gac/System.Runtime.InteropServices.RuntimeInformation/4.0.0.0__b03f5f7f11d50a3a/", "./usr/lib/mono/gac/System.Runtime.InteropServices.RuntimeInformation/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.InteropServices.RuntimeInformation.dll", "./usr/share/", "./usr/share/doc/", "./usr/share/doc/libmono-system-runtime-interopservices-runtimeinformation4.0-cil/", "./usr/share/doc/libmono-system-runtime-interopservices-runtimeinformation4.0-cil/changelog.Debian.gz", "./usr/share/doc/libmono-system-runtime-interopservices-runtimeinformation4.0-cil/copyright", "./usr/lib/mono/4.5/System.Runtime.InteropServices.RuntimeInformation.dll" }, fileNames); } }