public async Task TestIdenticalFiles() // Detects bug when attempting to overwrite a file with the same SHA256. { using (var oldDir = new TemporaryDirectory()) using (var newDir = new TemporaryDirectory()) using (var patchDir = new TemporaryDirectory()) using (var builder = new DirectoryPatchBuilder(new XdeltaPatchBuilder(XdeltaPatchSystemFactory.Preferred))) { File.WriteAllText(Path.Combine(oldDir.Path, "a"), DummyDataA); File.WriteAllText(Path.Combine(oldDir.Path, "b"), DummyDataA); File.WriteAllText(Path.Combine(newDir.Path, "a"), DummyDataB); File.WriteAllText(Path.Combine(newDir.Path, "b"), DummyDataB); await builder.CreatePatchAsync(oldDir.Path, newDir.Path, patchDir.Path); string instructionsString = File.ReadAllText(patchDir.Path + Path.DirectorySeparatorChar + "instructions.json"); var instructions = JsonConvert.DeserializeObject <List <FilePatchInstruction> >(instructionsString); Assert.AreEqual(2, instructions.Count); Assert.AreEqual("a", instructions[0].Path); Assert.AreEqual(GetStringHash(DummyDataA), instructions[0].OldHash); Assert.AreEqual(GetStringHash(DummyDataB), instructions[0].NewHash); Assert.IsTrue(File.Exists(patchDir.Path + Path.DirectorySeparatorChar + "full" + Path.DirectorySeparatorChar + instructions[0].NewHash)); Assert.AreEqual(instructions[0].HasDelta, File.Exists(patchDir.Path + Path.DirectorySeparatorChar + "delta" + Path.DirectorySeparatorChar + instructions[0].NewHash + "_from_" + instructions[0].OldHash)); Assert.AreEqual("b", instructions[1].Path); Assert.AreEqual(GetStringHash(DummyDataA), instructions[1].OldHash); Assert.AreEqual(GetStringHash(DummyDataB), instructions[1].NewHash); Assert.IsTrue(File.Exists(patchDir.Path + Path.DirectorySeparatorChar + "full" + Path.DirectorySeparatorChar + instructions[1].NewHash)); Assert.AreEqual(instructions[1].HasDelta, File.Exists(patchDir.Path + Path.DirectorySeparatorChar + "delta" + Path.DirectorySeparatorChar + instructions[1].NewHash + "_from_" + instructions[1].OldHash)); } }
public async Task TestEmpty() { using (var oldDir = new TemporaryDirectory()) using (var newDir = new TemporaryDirectory()) using (var patchDir = new TemporaryDirectory()) using (var builder = new DirectoryPatchBuilder(new XdeltaPatchBuilder(XdeltaPatchSystemFactory.Preferred))) { await builder.CreatePatchAsync(oldDir.Path, newDir.Path, patchDir.Path); string instructionsString = File.ReadAllText(patchDir.Path + Path.DirectorySeparatorChar + "instructions.json"); var instructions = JsonConvert.DeserializeObject <List <FilePatchInstruction> >(instructionsString); Assert.AreEqual(0, instructions.Count); } }
public async Task TestRemoved() { using (var oldDir = new TemporaryDirectory()) using (var newDir = new TemporaryDirectory()) using (var patchDir = new TemporaryDirectory()) using (var builder = new DirectoryPatchBuilder(new XdeltaPatchBuilder(XdeltaPatchSystemFactory.Preferred))) { File.WriteAllText(Path.Combine(oldDir.Path, "a"), DummyDataA); await builder.CreatePatchAsync(oldDir.Path, newDir.Path, patchDir.Path); string instructionsString = File.ReadAllText(patchDir.Path + Path.DirectorySeparatorChar + "instructions.json"); var instructions = JsonConvert.DeserializeObject <List <FilePatchInstruction> >(instructionsString); Assert.AreEqual(1, instructions.Count); Assert.AreEqual("a", instructions[0].Path); Assert.AreEqual(GetStringHash(DummyDataA), instructions[0].OldHash); Assert.AreEqual(null, instructions[0].NewHash); Assert.AreEqual(false, instructions[0].HasDelta); } }
public async Task TestUncompressible() { using (var oldDir = new TemporaryDirectory()) using (var newDir = new TemporaryDirectory()) using (var patchDir = new TemporaryDirectory()) using (var builder = new DirectoryPatchBuilder(new XdeltaPatchBuilder(XdeltaPatchSystemFactory.Preferred))) { File.WriteAllText(Path.Combine(oldDir.Path, "a"), "0"); File.WriteAllText(Path.Combine(newDir.Path, "a"), "1"); await builder.CreatePatchAsync(oldDir.Path, newDir.Path, patchDir.Path); string instructionsString = File.ReadAllText(patchDir.Path + Path.DirectorySeparatorChar + "instructions.json"); var instructions = JsonConvert.DeserializeObject <List <FilePatchInstruction> >(instructionsString); Assert.AreEqual(1, instructions.Count); Assert.AreEqual("a", instructions[0].Path); Assert.AreEqual(GetStringHash("0"), instructions[0].OldHash); Assert.AreEqual(GetStringHash("1"), instructions[0].NewHash); Assert.AreEqual(false, instructions[0].HasDelta); Assert.IsTrue(File.Exists(patchDir.Path + Path.DirectorySeparatorChar + "full" + Path.DirectorySeparatorChar + instructions[0].NewHash)); Assert.IsFalse(File.Exists(patchDir.Path + Path.DirectorySeparatorChar + "delta" + Path.DirectorySeparatorChar + instructions[0].NewHash + "_from_" + instructions[0].OldHash)); } }