public override Task<SynchronizationReport> PerformAsync(RavenFileSystemClient.SynchronizationClient destination) { AssertLocalFileExistsAndIsNotConflicted(FileMetadata); var conflict = CheckConflictWithDestination(FileMetadata, destinationMetadata, ServerInfo.FileSystemUrl); if (conflict != null) return ApplyConflictOnDestinationAsync(conflict, destination, ServerInfo.FileSystemUrl, log); return destination.UpdateMetadataAsync(FileName, FileMetadata, ServerInfo); }
public async Task NotificationReceivedWhenFileUpdated() { await client.UploadAsync("abc.txt", new MemoryStream()); var notificationTask = client.Changes().ForFolder("/") .Timeout(TimeSpan.FromSeconds(2)) .Take(1).ToTask(); await client.UpdateMetadataAsync("abc.txt", new RavenJObject { { "MyMetadata", "MyValue" } }); var fileChange = await notificationTask; Assert.Equal("/abc.txt", fileChange.File); Assert.Equal(FileChangeAction.Update, fileChange.Action); }
public async Task NotificationsAreReceivedOnSourceWhenSynchronizationsAreStartedAndFinished() { // content update await source.UploadAsync("test.bin", new MemoryStream(new byte[] { 1, 2, 3 })); var notificationTask = source.Changes().ForSynchronization() .Where(s => s.SynchronizationDirection == SynchronizationDirection.Outgoing) .Timeout(TimeSpan.FromSeconds(20)).Take(2).ToArray(). ToTask(); var report = await source.Synchronization.StartAsync("test.bin", destination); Assert.Null(report.Exception); var synchronizationUpdates = await notificationTask; Assert.Equal(SynchronizationAction.Start, synchronizationUpdates[0].Action); Assert.Equal("test.bin", synchronizationUpdates[0].FileName); Assert.Equal(SynchronizationType.ContentUpdate, synchronizationUpdates[0].Type); Assert.Equal(SynchronizationAction.Finish, synchronizationUpdates[1].Action); Assert.Equal("test.bin", synchronizationUpdates[1].FileName); Assert.Equal(SynchronizationType.ContentUpdate, synchronizationUpdates[1].Type); // metadata update await source.UpdateMetadataAsync("test.bin", new RavenJObject { { "key", "value" } }); notificationTask = source.Changes().ForSynchronization() .Where(s => s.SynchronizationDirection == SynchronizationDirection.Outgoing) .Timeout(TimeSpan.FromSeconds(20)) .Take(2).ToArray() .ToTask(); report = await source.Synchronization.StartAsync("test.bin", destination); Assert.Null(report.Exception); synchronizationUpdates = await notificationTask; Assert.Equal(SynchronizationAction.Start, synchronizationUpdates[0].Action); Assert.Equal("test.bin", synchronizationUpdates[0].FileName); Assert.Equal(SynchronizationType.MetadataUpdate, synchronizationUpdates[0].Type); Assert.Equal(SynchronizationAction.Finish, synchronizationUpdates[1].Action); Assert.Equal("test.bin", synchronizationUpdates[1].FileName); Assert.Equal(SynchronizationType.MetadataUpdate, synchronizationUpdates[1].Type); // rename update await source.RenameAsync("test.bin", "rename.bin"); notificationTask = source.Changes().ForSynchronization() .Where(s => s.SynchronizationDirection == SynchronizationDirection.Outgoing) .Timeout(TimeSpan.FromSeconds(20)) .Take(2).ToArray() .ToTask(); report = await source.Synchronization.StartAsync("test.bin", destination); Assert.Null(report.Exception); synchronizationUpdates = await notificationTask; Assert.Equal(SynchronizationAction.Start, synchronizationUpdates[0].Action); Assert.Equal("test.bin", synchronizationUpdates[0].FileName); Assert.Equal(SynchronizationType.Rename, synchronizationUpdates[0].Type); Assert.Equal(SynchronizationAction.Finish, synchronizationUpdates[1].Action); Assert.Equal("test.bin", synchronizationUpdates[1].FileName); Assert.Equal(SynchronizationType.Rename, synchronizationUpdates[1].Type); // delete update await source.DeleteAsync("rename.bin"); notificationTask = source.Changes().ForSynchronization() .Where(s => s.SynchronizationDirection == SynchronizationDirection.Outgoing) .Timeout(TimeSpan.FromSeconds(20)) .Take(2).ToArray() .ToTask(); report = await source.Synchronization.StartAsync("rename.bin", destination); Assert.Null(report.Exception); synchronizationUpdates = await notificationTask; Assert.Equal(SynchronizationAction.Start, synchronizationUpdates[0].Action); Assert.Equal("rename.bin", synchronizationUpdates[0].FileName); Assert.Equal(SynchronizationType.Delete, synchronizationUpdates[0].Type); Assert.Equal(SynchronizationAction.Finish, synchronizationUpdates[1].Action); Assert.Equal("rename.bin", synchronizationUpdates[1].FileName); Assert.Equal(SynchronizationType.Delete, synchronizationUpdates[1].Type); }