public Bookmark(bool system, int version, byte[] state, byte[] screen) { System = system; Version = version; State = new MemoryBlob(state); Screen = new MemoryBlob(screen); }
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))); }
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()))); } }
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(); }
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(); }
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(); }