Ejemplo n.º 1
0
 public Bookmark(bool system, int version, byte[] state, byte[] screen)
 {
     System  = system;
     Version = version;
     State   = new MemoryBlob(state);
     Screen  = new MemoryBlob(screen);
 }
Ejemplo n.º 2
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.º 3
0
        private ValidationResult ValidateFrame(Frame frame)
        {
            FrameType type = frame.Type;

            byte[] extendedHeader = frame.ExtendedHeader;
            byte[] payload        = frame.Payload;

            switch (type)
            {
            case FrameType.MessageJSON:
                if (extendedHeader != null && extendedHeader.Length != Constants.FrameHeaderConstants.MessageJSON.ExtendedHeaderSizeInBytes)
                {
                    return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "MessageJson frame extended header is not {0}", Constants.FrameHeaderConstants.MessageJSON.ExtendedHeaderSizeInBytes)));
                }

                if (payload == null || payload.Length == 0)
                {
                    return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "MessageJson payload is empty")));
                }

                string messageJsonPayload = Encoding.UTF8.GetString(payload);
                return(ValidateJsonContent(messageJsonPayload));

            case FrameType.Chunk:
                if (extendedHeader == null || extendedHeader.Length != Constants.FrameHeaderConstants.Chunk.ExtendedHeaderSizeInBytes)
                {
                    return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "Chunk frame extended header length is not {0}", Constants.FrameHeaderConstants.Chunk.ExtendedHeaderSizeInBytes)));
                }

                string frameChunkIdFromPayload        = new MemoryBlob(payload).BlobId;
                string frameChunkIdFromExtendedHeader = Convert.ToBase64String(extendedHeader);

                if (!string.Equals(frameChunkIdFromExtendedHeader, frameChunkIdFromPayload))
                {
                    return(new ValidationResult(String.Format(
                                                    CultureInfo.CurrentCulture,
                                                    "ChunkId calculated from extendedHeader:'{0}' is different from chunkId calculated from payload:{1}",
                                                    frameChunkIdFromExtendedHeader,
                                                    frameChunkIdFromPayload)));
                }

                return(new ValidationResult());

            case FrameType.ChunkRange:
                //TODO: Add support for other frame types
                return(new ValidationResult());

            case FrameType.EndFrame:
                return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "Parsed frame list shouldn't include EndFrame")));

            default:
                return(new ValidationResult(string.Format(CultureInfo.CurrentCulture, "Unknown frame type: '{0}'", type.ToString())));
            }
        }
Ejemplo n.º 4
0
        public void MemoryBlob_ToArray_Succeed()
        {
            // Arrange
            byte[] bytes  = new byte[100];
            Random random = new Random((int)DateTime.Now.Millisecond);

            random.NextBytes(bytes);
            MemoryStream ms = new MemoryStream(bytes);

            // Act
            MemoryBlob memoryBlob = new MemoryBlob(ms);

            byte[] bytesRead = memoryBlob.ToArray();

            // Assert
            Assert.AreEqual((ulong)bytes.Length, memoryBlob.Length);
            CollectionAssert.AreEqual(bytes, bytesRead);
            ms.Dispose();
        }
Ejemplo n.º 5
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();
        }
Ejemplo n.º 6
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();
        }