private static void RegisterDownloads(ContainerBuilder builder) { builder.Register( c => { var ctx = c.Resolve <IComponentContext>(); DownloadDataFromRemoteEndpoints func = (endpoint, token, filePath, timeout) => { var handler = ctx.Resolve <IDirectIncomingData>(); var result = handler.ForwardData(endpoint, filePath, timeout); var layer = ctx.Resolve <IProtocolLayer>(); var msg = new DataDownloadRequestMessage(layer.Id, token); var response = layer.SendMessageAndWaitForResponse( endpoint, msg, CommunicationConstants.DefaultMaximuNumberOfRetriesForMessageSending, timeout); return(Task <FileInfo> .Factory.StartNew( () => { Task.WaitAll(result, response); return result.Result; })); }; return(func); }) .SingleInstance(); }
public void Invoke() { var uploads = new WaitingUploads(); var layer = new Mock <IProtocolLayer>(); { layer.Setup(l => l.Id) .Returns(new EndpointId("other")); layer.Setup(l => l.SendMessageTo(It.IsAny <EndpointId>(), It.IsAny <ICommunicationMessage>(), It.IsAny <int>())) .Callback <EndpointId, ICommunicationMessage, int>( (e, m, r) => { Assert.IsInstanceOf <SuccessMessage>(m); }) .Verifiable(); layer.Setup(l => l.UploadData( It.IsAny <EndpointId>(), It.IsAny <string>(), It.IsAny <CancellationToken>(), It.IsAny <TaskScheduler>(), It.IsAny <int>())) .Returns(Task.Factory.StartNew( () => { }, new CancellationToken(), TaskCreationOptions.None, new CurrentThreadTaskScheduler())) .Verifiable(); } var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null); var action = new DataDownloadProcessAction( uploads, layer.Object, systemDiagnostics, new CurrentThreadTaskScheduler()); var path = @"c:\temp\myfile.txt"; var token = uploads.Register(path); var msg = new DataDownloadRequestMessage( EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), token); action.Invoke(msg); Assert.IsFalse(uploads.HasRegistration(token)); layer.Verify(l => l.SendMessageTo(It.IsAny <EndpointId>(), It.IsAny <ICommunicationMessage>(), It.IsAny <int>()), Times.Once()); layer.Verify( l => l.UploadData( It.IsAny <EndpointId>(), It.IsAny <string>(), It.IsAny <CancellationToken>(), It.IsAny <TaskScheduler>(), It.IsAny <int>()), Times.Once()); }
public void FromMessage() { var translator = new DownloadRequestConverter(); var msg = new DataDownloadRequestMessage(new EndpointId("a"), new UploadToken()); var data = translator.FromMessage(msg); Assert.IsInstanceOf(typeof(DownloadRequestData), data); Assert.AreSame(msg.Id, data.Id); Assert.AreSame(msg.Sender, data.Sender); Assert.AreSame(msg.InResponseTo, data.InResponseTo); Assert.AreSame(msg.Token, ((DownloadRequestData)data).Token); }