public void FrameProtocol_RoundTripOfMultiFrames_Success() { // Arrange GetChunkedFileRequestMessage request = CreateGetChunkedFileRequestMessage(); // Act // Build a request stream from a message frame and a chunk frame var builder = new FrameProtocolBuilder(); IBlob blob1 = new MemoryBlob(Encoding.UTF8.GetBytes("Blob1")); IBlob blob2 = new MemoryBlob(Encoding.UTF8.GetBytes("Blob2")); builder.AddFrame(request); builder.AddFrame(blob1); builder.AddFrame(blob2); var inputStream = builder.CreateStream(); // Parse the request stream into multiple WopiFrame List <Frame> frameList = FrameProtocolParser.ParseStream(inputStream); // Assert Assert.AreEqual(3, frameList.Count); Assert.IsNotNull(frameList[0].Payload); Assert.IsNull(frameList[0].ExtendedHeader); Assert.IsNotNull(frameList[1].Payload); Assert.IsNotNull(frameList[1].ExtendedHeader); Assert.AreEqual(blob1.BlobId, System.Convert.ToBase64String(frameList[1].ExtendedHeader)); var spookyHash = new SpookyHash(); Assert.AreEqual(blob1.BlobId, spookyHash.CalculateHash(frameList[1].Payload)); Assert.IsNotNull(frameList[2].Payload); Assert.IsNotNull(frameList[2].ExtendedHeader); Assert.AreEqual(blob2.BlobId, System.Convert.ToBase64String(frameList[2].ExtendedHeader)); Assert.AreEqual(blob2.BlobId, spookyHash.CalculateHash(new MemoryStream(frameList[2].Payload))); }
public void FullFileChunkProcessor_StreamToBlobs_SucceedOnNonEmptyStream() { // Arrange string alreadyExistingContent = "SomeRandomText"; byte[] bytes = Encoding.UTF8.GetBytes(alreadyExistingContent); SpookyHash spookyHash = new SpookyHash(); string hashString = spookyHash.CalculateHash(bytes); using (MemoryStream ms = new MemoryStream(bytes)) { string[] blobIds; IReadOnlyDictionary <string, IBlob> blobs = new Dictionary <string, IBlob>(); IChunkProcessor chunkProcessor = CreateFullFileChunkProcessor(); IBlobAllocator allocator = CreateBlobAllocator(); // Act chunkProcessor.StreamToBlobs(ms, allocator, out blobIds, out blobs); // Assert Assert.AreEqual(1, blobIds.Length); Assert.AreEqual(1, blobs.Count); Assert.AreEqual((ulong)bytes.Length, blobs[blobIds[0]].Length); Assert.AreEqual(hashString, blobs[blobIds[0]].BlobId); } }
public void CreateBlobWithInputBytes() { byte[] bytes = { 0, 1, 2, 3, 4 }; SpookyHash spookyHash = new SpookyHash(); BlobAllocator allocator = new BlobAllocator(); IBlob blob = allocator.CreateBlob(bytes); Assert.AreEqual((ulong)5, blob.Length); Assert.AreEqual(spookyHash.CalculateHash(bytes), blob.BlobId); }
public void MemoryBlob_GetStream_Succeed() { // Arrange byte[] bytes = new byte[1000]; Random random = new Random((int)DateTime.Now.Millisecond); random.NextBytes(bytes); MemoryStream ms = new MemoryStream(bytes); SpookyHash spookyHash = new SpookyHash(); // Act MemoryBlob memoryBlob = new MemoryBlob(ms); Stream stream = memoryBlob.GetStream(); // Assert Assert.IsNotNull(stream); Assert.AreEqual(spookyHash.CalculateHash(bytes), spookyHash.CalculateHash(stream)); stream.Dispose(); ms.Dispose(); }
public void CreateBlobWithInputSubStream() { byte[] bytes = { 0, 1, 2, 3, 4 }; SpookyHash spookyHash = new SpookyHash(); using (MemoryStream ms = new MemoryStream(bytes)) { BlobAllocator allocator = new BlobAllocator(); IBlob blob = allocator.CreateBlob(ms, 4); Assert.AreEqual((ulong)4, blob.Length); Assert.AreEqual(spookyHash.CalculateHash(new byte[] { 0, 1, 2, 3 }), blob.BlobId); } }
public void SingleEmptyFileElement() { XElement definition = new XElement("Resources", BuildFileElement(id: "ZeroByteFile", name: "ZeroByteFile.wopitest", filePath: "ZeroByteFile.wopitest") ); IResourceManager resourceManager = new ResourceManagerFactory().GetResourceManager(definition); SpookyHash spookyHash = new SpookyHash(); using (MemoryStream ms = new MemoryStream()) using (StreamWriter sw = new StreamWriter(ms)) { sw.Write(String.Empty); sw.Flush(); Assert.AreEqual(resourceManager.GetFileName("ZeroByteFile"), "ZeroByteFile.wopitest"); Assert.AreEqual(spookyHash.CalculateHash(resourceManager.GetContentStream("ZeroByteFile")), spookyHash.CalculateHash(ms)); } }
public void SingleNonEmptyFileElement() { XElement definition = new XElement("Resources", BuildFileElement(id: "WordBlankDocument", name: "WordBlankDocument.docx", filePath: "WordBlankDocument.docx") ); IResourceManager resourceManager = new ResourceManagerFactory().GetResourceManager(definition); SpookyHash spookyHash = new SpookyHash(); using (MemoryStream ms = new MemoryStream()) using (StreamWriter sw = new StreamWriter(ms)) { sw.Write("WordBlankDocument" + "WordBlankDocument.docx" + "WordBlankDocument.docx"); sw.Flush(); Assert.AreEqual(resourceManager.GetFileName("WordBlankDocument"), "WordBlankDocument.docx"); Assert.AreEqual(spookyHash.CalculateHash(resourceManager.GetContentStream("WordBlankDocument")), spookyHash.CalculateHash(ms)); } }
public void CreateMemoryBlob_Succeed() { // Arrange byte[] bytes = new byte[100000]; Random random = new Random((int)DateTime.Now.Millisecond); random.NextBytes(bytes); MemoryStream ms = new MemoryStream(bytes); SpookyHash spookyHash = new SpookyHash(); // Act MemoryBlob memoryBlob = new MemoryBlob(ms); // Assert Assert.IsNotNull(memoryBlob); Assert.AreEqual((ulong)bytes.Length, memoryBlob.Length); Assert.AreEqual(spookyHash.CalculateHash(ms), memoryBlob.BlobId); ms.Dispose(); }