private async Task AddFileToDfs(long byteSize) { var fakeNode = Substitute.For <IRpcClient>(); var sender = PeerIdHelper.GetPeerId("sender"); var recipient = PeerIdHelper.GetPeerId("recipient"); var senderPeerId = sender; var peerSettings = senderPeerId.ToSubstitutedPeerSettings(); var recipientPeerId = recipient; var fileToTransfer = FileHelper.CreateRandomTempFile(byteSize); var addFileToDfsRequestHandler = new AddFileToDfsRequestObserver(_dfs, peerSettings, _nodeFileTransferFactory, _logger); var transferBytesRequestHandler = new TransferFileBytesRequestObserver(_nodeFileTransferFactory, peerSettings, _logger); var uniqueFileKey = CorrelationId.GenerateCorrelationId(); var crcValue = FileHelper.GetCrcValue(fileToTransfer); //Create a response object and set its return value var request = new AddFileToDfsRequest { Node = "node1", FileName = fileToTransfer, FileSize = (ulong)byteSize }.ToProtocolMessage(sender, uniqueFileKey); request.SendToHandler(_fakeContext, addFileToDfsRequestHandler); Assert.Single(_nodeFileTransferFactory.Keys); var fileTransferInformation = _nodeFileTransferFactory.GetFileTransferInformation(uniqueFileKey); Assert.True(fileTransferInformation.Initialised, "File transfer not initialised"); using (var fs = File.Open(fileToTransfer, FileMode.Open)) { var fileUploadInformation = new UploadFileTransferInformation(fs, senderPeerId, recipientPeerId, fakeNode.Channel, uniqueFileKey); for (uint i = 0; i < fileTransferInformation.MaxChunk; i++) { fileUploadInformation.GetUploadMessageDto(i).Content .SendToHandler(_fakeContext, transferBytesRequestHandler); } } Assert.True(fileTransferInformation.ChunkIndicatorsTrue()); await TaskHelper.WaitForAsync(() => fileTransferInformation.DfsHash != null, TimeSpan.FromSeconds(15)); Assert.NotNull(fileTransferInformation.DfsHash); long ipfsCrcValue; using (var ipfsStream = await _dfs.ReadAsync(fileTransferInformation.DfsHash)) { ipfsCrcValue = FileHelper.GetCrcValue(ipfsStream); } Assert.Equal(crcValue, ipfsCrcValue); }
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 TransferFileBytesRequestObserverTests() { _context = Substitute.For <IChannelHandlerContext>(); _context.Channel.Returns(Substitute.For <IChannel>()); _downloadFileTransferFactory = Substitute.For <IDownloadFileTransferFactory>(); var peerSettings = PeerIdHelper.GetPeerId("Test").ToSubstitutedPeerSettings(); _observer = new TransferFileBytesRequestObserver(_downloadFileTransferFactory, peerSettings, Substitute.For <ILogger>()); }