public void CreateChunkedFile() { Assert.False(File.Exists(_fileName)); var chunkedFile = new ChunkedFileStream(_fileName, 3, _chunksData, (buffer, offset, length) => null); Assert.True(File.Exists(_fileName)); chunkedFile.Dispose(); }
public void SaveValidFileSinglePass() { int chunk = 0; ChunkedFileStream.HashFunction hashFunction = (buffer, offset, length) => _chunksData.Chunks[chunk++].Hash; using (var chunkedFile = new ChunkedFileStream(_fileName, 3, _chunksData, hashFunction)) { Assert.AreEqual(0, chunkedFile.VerifiedLength); Assert.AreEqual(3, chunkedFile.RemainingLength); chunkedFile.Write(new byte[] { 1, 2, 3 }, 0, 3); Assert.AreEqual(3, chunkedFile.VerifiedLength); Assert.AreEqual(0, chunkedFile.RemainingLength); } }
public void SaveInvalidSecondPass() { int sequence = 0; ChunkedFileStream.HashFunction hashFunction = (buffer, offset, length) => { switch (sequence++) { case 0: return(_chunksData.Chunks[0].Hash); case 1: return(_invalidHash); case 2: return(_chunksData.Chunks[1].Hash); default: throw new IndexOutOfRangeException(sequence.ToString()); } }; using (var chunkedFile = new ChunkedFileStream(_fileName, 3, _chunksData, hashFunction)) { Assert.AreEqual(0, chunkedFile.VerifiedLength); Assert.AreEqual(3, chunkedFile.RemainingLength); chunkedFile.Write(new byte[] { 1, 2 }, 0, 2); Assert.AreEqual(2, chunkedFile.VerifiedLength); Assert.AreEqual(1, chunkedFile.RemainingLength); Assert.Throws <InvalidChunkDataException>(() => chunkedFile.Write(new byte[] { 3 }, 0, 1), "Should reject those bytes"); Assert.AreEqual(2, chunkedFile.VerifiedLength); Assert.AreEqual(1, chunkedFile.RemainingLength); chunkedFile.Write(new byte[] { 3 }, 0, 1); Assert.AreEqual(3, chunkedFile.VerifiedLength); Assert.AreEqual(0, chunkedFile.RemainingLength); } }
public void SaveValidFileTwoPasses() { int sequence = 0; ChunkedFileStream.HashFunction hashFunction = (buffer, offset, length) => _chunksData.Chunks[sequence++].Hash; using (var chunkedFile = new ChunkedFileStream(_fileName, 3, _chunksData, hashFunction)) { Assert.AreEqual(0, chunkedFile.VerifiedLength); Assert.AreEqual(3, chunkedFile.RemainingLength); chunkedFile.Write(new byte[] { 1, 2 }, 0, 2); Assert.AreEqual(2, chunkedFile.VerifiedLength); Assert.AreEqual(1, chunkedFile.RemainingLength); chunkedFile.Write(new byte[] { 3 }, 0, 1); Assert.AreEqual(3, chunkedFile.VerifiedLength); Assert.AreEqual(0, chunkedFile.RemainingLength); } Assert.AreEqual(3, new FileInfo(_fileName).Length); }