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 ValidateGetChunkedFileResponse(IResponseData data) { data.ResponseStream.Seek(0, SeekOrigin.Begin); if (data.ResponseStream == null || data.ResponseStream.Length == 0) { return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "ResponseData.ResponseStream is null or empty"))); } List <Frame> outputFrames = FrameProtocolParser.ParseStream(data.ResponseStream); data.ResponseStream.Seek(0, SeekOrigin.Begin); if (outputFrames == null || outputFrames.Count < 1) { return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "Parsed outputFrameList is null or empty"))); } if (outputFrames[0].Type != FrameType.MessageJSON) { return(new ValidationResult(String.Format(CultureInfo.CurrentCulture, "The first frame is not MessageJson type"))); } for (int i = 0; i < outputFrames.Count; i++) { Frame outputFrame = outputFrames[i]; ValidationResult frameValidation = ValidateFrame(outputFrame); if (frameValidation.HasFailures) { return(frameValidation); } switch (outputFrame.Type) { case FrameType.MessageJSON: // Enrich HostBlobIdsPerStreamId with chunk ids of the file from download, keyed by stream id PopulateMessageFrame(outputFrame); break; case FrameType.Chunk: // Enrich HostBlobs with delta blobs of the file from download PopulateHostFileChunkIdToBlobMapping(outputFrame); break; default: break; } } if (this.ExpectedHostBlobsCount != null && this.ExpectedHostBlobsCount.Value != HostBlobs.Count) { return(new ValidationResult($"{nameof(ExpectedHostBlobsCount)}: '{ExpectedHostBlobsCount.Value}' not equal to {nameof(HostBlobs)}.Count: '{HostBlobs.Count}'")); } return(new ValidationResult()); }
public void FrameProtocol_RoundTripOfOneMessageFrame_Success() { // Arrange GetChunkedFileRequestMessage request = CreateGetChunkedFileRequestMessage(); // Act // Build a request stream from GetChunkedFile message frame FrameProtocolBuilder builder = new FrameProtocolBuilder(); builder.AddFrame(request); var inputStream = builder.CreateStream(); // Parse the request stream into WopiFrame List <Frame> frameList = FrameProtocolParser.ParseStream(inputStream); // Assert Assert.AreEqual(1, frameList.Count); Assert.IsNotNull(frameList[0].Payload); Assert.IsNull(frameList[0].ExtendedHeader); GetChunkedFileRequestMessage requestDecoded = JsonMessageSerializer.Instance.DeSerialize <GetChunkedFileRequestMessage>(new MemoryStream(frameList[0].Payload)); Assert.AreEqual(request.ToString(), requestDecoded.ToString()); }