public async Task Get_File_Rpc(long byteSize) { var addedIpfsHash = AddFileToDfs(byteSize, out var crcValue, out var stream); Stream fileStream = null; try { var nodePeerId = PeerIdHelper.GetPeerId("sender"); var rpcPeerId = PeerIdHelper.GetPeerId("recipient"); var peerSettings = Substitute.For <IPeerSettings>(); peerSettings.PeerId.Returns(rpcPeerId); var nodePeer = nodePeerId; var rpcPeer = rpcPeerId; var correlationId = CorrelationId.GenerateCorrelationId(); var fakeFileOutputPath = Path.GetTempFileName(); IDownloadFileInformation fileDownloadInformation = new DownloadFileTransferInformation(rpcPeer, nodePeer, _fakeContext.Channel, correlationId, fakeFileOutputPath, 0); var getFileFromDfsResponseHandler = new GetFileFromDfsResponseObserver(_logger, _fileDownloadFactory); var transferBytesHandler = new TransferFileBytesRequestObserver(_fileDownloadFactory, peerSettings, _logger); _fileDownloadFactory.RegisterTransfer(fileDownloadInformation); var getFileResponse = new GetFileFromDfsResponse { FileSize = (ulong)byteSize, ResponseCode = ByteString.CopyFrom((byte)FileTransferResponseCodeTypes.Successful.Id) }.ToProtocolMessage(nodePeer, correlationId); getFileResponse.SendToHandler(_fakeContext, getFileFromDfsResponseHandler); fileStream = await _dfsService.UnixFsApi.ReadFileAsync(addedIpfsHash.ToString()); IUploadFileInformation fileUploadInformation = new UploadFileTransferInformation( fileStream, rpcPeer, nodePeer, _fakeContext.Channel, correlationId); for (uint i = 0; i < fileUploadInformation.MaxChunk; i++) { var transferMessage = fileUploadInformation .GetUploadMessageDto(i); transferMessage.Content.SendToHandler(_fakeContext, transferBytesHandler); } await TaskHelper.WaitForAsync(() => fileDownloadInformation.IsCompleted, TimeSpan.FromSeconds(10)); Assert.AreEqual(crcValue, FileHelper.GetCrcValue(fileDownloadInformation.TempPath)); } finally { stream.Close(); fileStream?.Close(); } }
public void GetFileFromDfsResponse_Can_Get_Output() { //Arrange var getFileFromDfsResponse = new GetFileFromDfsResponse(); var commandContext = TestCommandHelpers.GenerateCliResponseCommandContext(_testScheduler); var getFileFromDfsCommand = new GetFileCommand(null, commandContext, Substitute.For <ILogger>()); //Act TestCommandHelpers.GenerateResponse(commandContext, getFileFromDfsResponse); _testScheduler.Start(); //Assert commandContext.UserOutput.Received(1).WriteLine(getFileFromDfsResponse.ToJsonString()); }