Esempio n. 1
0
        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);
        }