InstallationManagerTests.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Net.Http;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using AutoFixture;
  8. using AutoFixture.AutoMoq;
  9. using Emby.Server.Implementations.Archiving;
  10. using Emby.Server.Implementations.Updates;
  11. using MediaBrowser.Model.IO;
  12. using MediaBrowser.Model.Updates;
  13. using Moq;
  14. using Moq.Protected;
  15. using Xunit;
  16. namespace Jellyfin.Server.Implementations.Tests.Updates
  17. {
  18. public class InstallationManagerTests
  19. {
  20. private readonly Fixture _fixture;
  21. private readonly InstallationManager _installationManager;
  22. public InstallationManagerTests()
  23. {
  24. var messageHandler = new Mock<HttpMessageHandler>();
  25. messageHandler.Protected()
  26. .Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
  27. .Returns<HttpRequestMessage, CancellationToken>(
  28. (m, _) =>
  29. {
  30. return Task.FromResult(new HttpResponseMessage()
  31. {
  32. Content = new StreamContent(File.OpenRead("Test Data/Updates/" + m.RequestUri?.Segments[^1]))
  33. });
  34. });
  35. var http = new Mock<IHttpClientFactory>();
  36. http.Setup(x => x.CreateClient(It.IsAny<string>()))
  37. .Returns(new HttpClient(messageHandler.Object));
  38. _fixture = new Fixture();
  39. _fixture.Customize(new AutoMoqCustomization
  40. {
  41. ConfigureMembers = true
  42. });
  43. _fixture.Inject(http);
  44. _fixture.Inject<IZipClient>(new ZipClient());
  45. _installationManager = _fixture.Create<InstallationManager>();
  46. }
  47. [Fact]
  48. public async Task GetPackages_Valid_Success()
  49. {
  50. PackageInfo[] packages = await _installationManager.GetPackages(
  51. "Jellyfin Stable",
  52. "https://repo.jellyfin.org/releases/plugin/manifest-stable.json",
  53. false);
  54. Assert.Equal(25, packages.Length);
  55. }
  56. [Fact]
  57. public async Task FilterPackages_NameOnly_Success()
  58. {
  59. PackageInfo[] packages = await _installationManager.GetPackages(
  60. "Jellyfin Stable",
  61. "https://repo.jellyfin.org/releases/plugin/manifest-stable.json",
  62. false);
  63. packages = _installationManager.FilterPackages(packages, "Anime").ToArray();
  64. Assert.Single(packages);
  65. }
  66. [Fact]
  67. public async Task FilterPackages_GuidOnly_Success()
  68. {
  69. PackageInfo[] packages = await _installationManager.GetPackages(
  70. "Jellyfin Stable",
  71. "https://repo.jellyfin.org/releases/plugin/manifest-stable.json",
  72. false);
  73. packages = _installationManager.FilterPackages(packages, id: new Guid("a4df60c5-6ab4-412a-8f79-2cab93fb2bc5")).ToArray();
  74. Assert.Single(packages);
  75. }
  76. [Fact]
  77. public async Task InstallPackage_InvalidChecksum_ThrowsInvalidDataException()
  78. {
  79. var packageInfo = new InstallationInfo()
  80. {
  81. Name = "Test",
  82. SourceUrl = "https://repo.jellyfin.org/releases/plugin/empty/empty.zip",
  83. Checksum = "InvalidChecksum"
  84. };
  85. await Assert.ThrowsAsync<InvalidDataException>(() => _installationManager.InstallPackage(packageInfo, CancellationToken.None)).ConfigureAwait(false);
  86. }
  87. [Fact]
  88. public async Task InstallPackage_Valid_Success()
  89. {
  90. var packageInfo = new InstallationInfo()
  91. {
  92. Name = "Test",
  93. SourceUrl = "https://repo.jellyfin.org/releases/plugin/empty/empty.zip",
  94. Checksum = "11b5b2f1a9ebc4f66d6ef19018543361"
  95. };
  96. var ex = await Record.ExceptionAsync(() => _installationManager.InstallPackage(packageInfo, CancellationToken.None)).ConfigureAwait(false);
  97. Assert.Null(ex);
  98. }
  99. }
  100. }