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);
        }
Beispiel #2
0
        public AddFileToDfsRequestObserverTests()
        {
            _hashProvider     = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("blake2b-256"));
            _manualResetEvent = new ManualResetEvent(false);
            _senderIdentifier = PeerIdHelper.GetPeerId("sender");
            var peerSettings = _senderIdentifier.ToSubstitutedPeerSettings();

            _fakeDfs = Substitute.For <IDfs>();
            var logger = Substitute.For <ILogger>();

            _fakeContext                 = Substitute.For <IChannelHandlerContext>();
            _nodeFileTransferFactory     = Substitute.For <IDownloadFileTransferFactory>();
            _addFileToDfsRequestObserver = new AddFileToDfsRequestObserver(_fakeDfs,
                                                                           peerSettings,
                                                                           _nodeFileTransferFactory,
                                                                           logger);
        }