public void ProposeDistributionFor() { var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null); var offlineInfo = CreateOfflineInfo(new Mock <IPersistenceInformation>().Object); var result = new DatasetActivationProposal { Endpoint = EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), IsAvailable = true, ActivationTime = new TimeSpan(0, 1, 0), TransferTime = new TimeSpan(0, 1, 0), PercentageOfAvailableDisk = 50, PercentageOfMaximumMemory = 50, PercentageOfPhysicalMemory = 50, }; var localDistributor = new Mock <ICalculateDistributionParameters>(); { localDistributor.Setup(l => l.ProposeForLocalMachine(It.IsAny <ExpectedDatasetLoad>())) .Returns(result); } var communicationLayer = new Mock <ICommunicationLayer>(); { communicationLayer.Setup(s => s.LocalConnectionFor(It.Is <ChannelType>(c => c == ChannelType.NamedPipe))) .Returns( new Tuple <EndpointId, Uri, Uri>( EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), new Uri("net.pipe://localhost/pipe"), new Uri("net.pipe://localhost/pipe/data"))); } var loader = new Mock <IDatasetActivator>(); var commandHub = new Mock <ISendCommandsToRemoteEndpoints>(); var notificationHub = new Mock <INotifyOfRemoteEndpointEvents>(); var uploads = new Mock <IStoreUploads>(); var distributor = new LocalDatasetDistributor( localDistributor.Object, loader.Object, commandHub.Object, notificationHub.Object, uploads.Object, (d, e, n) => { return(new DatasetOnlineInformation( d, e, n, commandHub.Object, notificationHub.Object, systemDiagnostics)); }, communicationLayer.Object, systemDiagnostics, new CurrentThreadTaskScheduler()); var request = new DatasetActivationRequest { DatasetToActivate = offlineInfo, ExpectedLoadPerMachine = new ExpectedDatasetLoad(), PreferredLocations = DistributionLocations.All, }; var plans = distributor.ProposeDistributionFor(request, new CancellationToken()); Assert.AreEqual(1, plans.Count()); var plan = plans.First(); Assert.IsTrue(ReferenceEquals(offlineInfo, plan.DistributionFor)); Assert.AreEqual(new NetworkIdentifier(result.Endpoint.OriginatesOnMachine()), plan.MachineToDistributeTo); Assert.IsTrue(ReferenceEquals(result, plan.Proposal)); }
public void ImplementPlan() { var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null); var filePath = @"c:\temp\myfile.txt"; var storage = new Mock<IPersistenceInformation>(); { storage.Setup(s => s.AsFile()) .Returns(new FileInfo(filePath)); } var offlineInfo = CreateOfflineInfo(storage.Object); var plan = CreateNewDistributionPlan(new DatasetActivationProposal(), offlineInfo, systemDiagnostics); var localDistributor = new Mock<ICalculateDistributionParameters>(); var datasetEndpoint = new EndpointId("OtherMachine:5678"); var loader = new Mock<IDatasetActivator>(); { loader.Setup(l => l.ActivateDataset(It.IsAny<EndpointId>(), It.IsAny<ChannelType>(), It.IsAny<Uri>())) .Returns(datasetEndpoint); } var commands = new Mock<IDatasetApplicationCommands>(); { commands.Setup(c => c.Load(It.IsAny<EndpointId>(), It.IsAny<UploadToken>())) .Returns( Task.Factory.StartNew( () => { }, new CancellationToken(), TaskCreationOptions.None, new CurrentThreadTaskScheduler())); } var commandHub = new Mock<ISendCommandsToRemoteEndpoints>(); { commandHub.Setup(h => h.HasCommandsFor(It.IsAny<EndpointId>())) .Returns(true); commandHub.Setup(h => h.HasCommandFor(It.IsAny<EndpointId>(), It.IsAny<Type>())) .Returns(true); commandHub.Setup(h => h.CommandsFor<IDatasetApplicationCommands>(It.IsAny<EndpointId>())) .Callback<EndpointId>(e => Assert.AreSame(datasetEndpoint, e)) .Returns(commands.Object); } var notifications = new Mock<IDatasetApplicationNotifications>(); var notificationHub = new Mock<INotifyOfRemoteEndpointEvents>(); { notificationHub.Setup(n => n.HasNotificationsFor(It.IsAny<EndpointId>())) .Returns(true); notificationHub.Setup(n => n.NotificationsFor<IDatasetApplicationNotifications>(It.IsAny<EndpointId>())) .Callback<EndpointId>(e => Assert.AreSame(datasetEndpoint, e)) .Returns(notifications.Object); } var communicationLayer = new Mock<ICommunicationLayer>(); { communicationLayer.Setup(s => s.LocalConnectionFor(It.Is<ChannelType>(c => c == ChannelType.NamedPipe))) .Returns( new Tuple<EndpointId, Uri, Uri>( EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), new Uri("net.pipe://localhost/pipe"), new Uri("net.pipe://localhost/pipe/data"))); } var uploads = new Mock<IStoreUploads>(); var distributor = new LocalDatasetDistributor( localDistributor.Object, loader.Object, commandHub.Object, notificationHub.Object, uploads.Object, (d, e, n) => { return new DatasetOnlineInformation( d, e, n, commandHub.Object, notificationHub.Object, systemDiagnostics); }, communicationLayer.Object, systemDiagnostics, new CurrentThreadTaskScheduler()); Action<int, string, bool> progress = (p, m, e) => { }; var result = distributor.ImplementPlan(plan, new CancellationToken(), progress); result.Wait(); Assert.AreSame(datasetEndpoint, result.Result.Endpoint); Assert.AreSame(plan.DistributionFor.Id, result.Result.Id); Assert.AreSame(plan.MachineToDistributeTo, result.Result.RunsOn); }
public void ImplementPlan() { var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null); var filePath = @"c:\temp\myfile.txt"; var storage = new Mock <IPersistenceInformation>(); { storage.Setup(s => s.AsFile()) .Returns(new FileInfo(filePath)); } var offlineInfo = CreateOfflineInfo(storage.Object); var plan = CreateNewDistributionPlan(new DatasetActivationProposal(), offlineInfo, systemDiagnostics); var localDistributor = new Mock <ICalculateDistributionParameters>(); var datasetEndpoint = new EndpointId("OtherMachine:5678"); var loader = new Mock <IDatasetActivator>(); { loader.Setup(l => l.ActivateDataset(It.IsAny <EndpointId>(), It.IsAny <ChannelType>(), It.IsAny <Uri>())) .Returns(datasetEndpoint); } var commands = new Mock <IDatasetApplicationCommands>(); { commands.Setup(c => c.Load(It.IsAny <EndpointId>(), It.IsAny <UploadToken>())) .Returns( Task.Factory.StartNew( () => { }, new CancellationToken(), TaskCreationOptions.None, new CurrentThreadTaskScheduler())); } var commandHub = new Mock <ISendCommandsToRemoteEndpoints>(); { commandHub.Setup(h => h.HasCommandsFor(It.IsAny <EndpointId>())) .Returns(true); commandHub.Setup(h => h.HasCommandFor(It.IsAny <EndpointId>(), It.IsAny <Type>())) .Returns(true); commandHub.Setup(h => h.CommandsFor <IDatasetApplicationCommands>(It.IsAny <EndpointId>())) .Callback <EndpointId>(e => Assert.AreSame(datasetEndpoint, e)) .Returns(commands.Object); } var notifications = new Mock <IDatasetApplicationNotifications>(); var notificationHub = new Mock <INotifyOfRemoteEndpointEvents>(); { notificationHub.Setup(n => n.HasNotificationsFor(It.IsAny <EndpointId>())) .Returns(true); notificationHub.Setup(n => n.NotificationsFor <IDatasetApplicationNotifications>(It.IsAny <EndpointId>())) .Callback <EndpointId>(e => Assert.AreSame(datasetEndpoint, e)) .Returns(notifications.Object); } var communicationLayer = new Mock <ICommunicationLayer>(); { communicationLayer.Setup(s => s.LocalConnectionFor(It.Is <ChannelType>(c => c == ChannelType.NamedPipe))) .Returns( new Tuple <EndpointId, Uri, Uri>( EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), new Uri("net.pipe://localhost/pipe"), new Uri("net.pipe://localhost/pipe/data"))); } var uploads = new Mock <IStoreUploads>(); var distributor = new LocalDatasetDistributor( localDistributor.Object, loader.Object, commandHub.Object, notificationHub.Object, uploads.Object, (d, e, n) => { return(new DatasetOnlineInformation( d, e, n, commandHub.Object, notificationHub.Object, systemDiagnostics)); }, communicationLayer.Object, systemDiagnostics, new CurrentThreadTaskScheduler()); Action <int, string, bool> progress = (p, m, e) => { }; var result = distributor.ImplementPlan(plan, new CancellationToken(), progress); result.Wait(); Assert.AreSame(datasetEndpoint, result.Result.Endpoint); Assert.AreSame(plan.DistributionFor.Id, result.Result.Id); Assert.AreSame(plan.MachineToDistributeTo, result.Result.RunsOn); }
public void ProposeDistributionFor() { var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null); var offlineInfo = CreateOfflineInfo(new Mock<IPersistenceInformation>().Object); var result = new DatasetActivationProposal { Endpoint = EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), IsAvailable = true, ActivationTime = new TimeSpan(0, 1, 0), TransferTime = new TimeSpan(0, 1, 0), PercentageOfAvailableDisk = 50, PercentageOfMaximumMemory = 50, PercentageOfPhysicalMemory = 50, }; var localDistributor = new Mock<ICalculateDistributionParameters>(); { localDistributor.Setup(l => l.ProposeForLocalMachine(It.IsAny<ExpectedDatasetLoad>())) .Returns(result); } var communicationLayer = new Mock<ICommunicationLayer>(); { communicationLayer.Setup(s => s.LocalConnectionFor(It.Is<ChannelType>(c => c == ChannelType.NamedPipe))) .Returns( new Tuple<EndpointId, Uri, Uri>( EndpointIdExtensions.CreateEndpointIdForCurrentProcess(), new Uri("net.pipe://localhost/pipe"), new Uri("net.pipe://localhost/pipe/data"))); } var loader = new Mock<IDatasetActivator>(); var commandHub = new Mock<ISendCommandsToRemoteEndpoints>(); var notificationHub = new Mock<INotifyOfRemoteEndpointEvents>(); var uploads = new Mock<IStoreUploads>(); var distributor = new LocalDatasetDistributor( localDistributor.Object, loader.Object, commandHub.Object, notificationHub.Object, uploads.Object, (d, e, n) => { return new DatasetOnlineInformation( d, e, n, commandHub.Object, notificationHub.Object, systemDiagnostics); }, communicationLayer.Object, systemDiagnostics, new CurrentThreadTaskScheduler()); var request = new DatasetActivationRequest { DatasetToActivate = offlineInfo, ExpectedLoadPerMachine = new ExpectedDatasetLoad(), PreferredLocations = DistributionLocations.All, }; var plans = distributor.ProposeDistributionFor(request, new CancellationToken()); Assert.AreEqual(1, plans.Count()); var plan = plans.First(); Assert.IsTrue(ReferenceEquals(offlineInfo, plan.DistributionFor)); Assert.AreEqual(new NetworkIdentifier(result.Endpoint.OriginatesOnMachine()), plan.MachineToDistributeTo); Assert.IsTrue(ReferenceEquals(result, plan.Proposal)); }