Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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));
                }
        }
Ejemplo n.º 7
0
        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));
                }
        }
Ejemplo n.º 8
0
        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();
        }