blob: fd5f8e41605ba89b23644e71583153fc72af3e72 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
using System;
using System.IO;
using System.Threading.Tasks;
using Emby.Server.Implementations.IO;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Configuration;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Xunit;
namespace Jellyfin.Server.Implementations.Tests.IO;
public class FileRefresherTests
{
[Fact]
public async Task ProcessPathChanges_PathLookupThrows_StillRefreshesRemainingPaths()
{
var tempDir = Directory.CreateTempSubdirectory("filerefresher");
try
{
// Ordered so the failing path is dequeued first.
var failingPath = Path.Combine(tempDir.FullName, "failing", "episode.mkv");
var workingPath = Directory.CreateDirectory(Path.Combine(tempDir.FullName, "working")).FullName;
var workingItem = new Folder { Path = workingPath, Name = "working" };
var workingItemFound = new TaskCompletionSource();
var libraryManager = new Mock<ILibraryManager>(MockBehavior.Loose);
libraryManager.Setup(x => x.FindByPath(failingPath, null))
.Throws(new ObjectDisposedException("IServiceProvider"));
libraryManager.Setup(x => x.FindByPath(workingPath, null))
.Returns(workingItem)
.Callback(() => workingItemFound.TrySetResult());
var configurationManager = new Mock<IServerConfigurationManager>(MockBehavior.Loose);
configurationManager.Setup(x => x.Configuration)
.Returns(new ServerConfiguration { LibraryMonitorDelay = 1 });
using var refresher = new FileRefresher(
failingPath,
configurationManager.Object,
libraryManager.Object,
NullLogger.Instance);
refresher.AddPath(workingPath);
await workingItemFound.Task.WaitAsync(TimeSpan.FromSeconds(30), TestContext.Current.CancellationToken);
libraryManager.Verify(x => x.FindByPath(failingPath, null), Times.Once);
}
finally
{
tempDir.Delete(true);
}
}
}
|