HdHomerunHostTests.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Net.Http;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using AutoFixture;
  6. using AutoFixture.AutoMoq;
  7. using Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun;
  8. using MediaBrowser.Model.LiveTv;
  9. using Moq;
  10. using Moq.Protected;
  11. using Xunit;
  12. namespace Jellyfin.Server.Implementations.Tests.LiveTv
  13. {
  14. public class HdHomerunHostTests
  15. {
  16. private const string TestIp = "http://192.168.1.182";
  17. private readonly Fixture _fixture;
  18. private readonly HdHomerunHost _hdHomerunHost;
  19. public HdHomerunHostTests()
  20. {
  21. const string BaseResourcePath = "Jellyfin.Server.Implementations.Tests.LiveTv.";
  22. var messageHandler = new Mock<HttpMessageHandler>();
  23. messageHandler.Protected()
  24. .Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
  25. .Returns<HttpRequestMessage, CancellationToken>(
  26. (m, _) =>
  27. {
  28. var resource = BaseResourcePath + m.RequestUri?.Segments[^1];
  29. var stream = typeof(HdHomerunHostTests).Assembly.GetManifestResourceStream(resource);
  30. if (stream == null)
  31. {
  32. throw new NullReferenceException("Resource doesn't exist: " + resource);
  33. }
  34. return Task.FromResult(new HttpResponseMessage()
  35. {
  36. Content = new StreamContent(stream)
  37. });
  38. });
  39. var http = new Mock<IHttpClientFactory>();
  40. http.Setup(x => x.CreateClient(It.IsAny<string>()))
  41. .Returns(new HttpClient(messageHandler.Object));
  42. _fixture = new Fixture();
  43. _fixture.Customize(new AutoMoqCustomization
  44. {
  45. ConfigureMembers = true
  46. }).Inject(http);
  47. _hdHomerunHost = _fixture.Create<HdHomerunHost>();
  48. }
  49. [Fact]
  50. public async Task GetModelInfo_Valid_Success()
  51. {
  52. var host = new TunerHostInfo()
  53. {
  54. Url = TestIp
  55. };
  56. var modelInfo = await _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None).ConfigureAwait(false);
  57. Assert.Equal("HDHomeRun PRIME", modelInfo.FriendlyName);
  58. Assert.Equal("HDHR3-CC", modelInfo.ModelNumber);
  59. Assert.Equal("hdhomerun3_cablecard", modelInfo.FirmwareName);
  60. Assert.Equal("20160630atest2", modelInfo.FirmwareVersion);
  61. Assert.Equal("FFFFFFFF", modelInfo.DeviceID);
  62. Assert.Equal("FFFFFFFF", modelInfo.DeviceAuth);
  63. Assert.Equal(3, modelInfo.TunerCount);
  64. Assert.Equal("http://192.168.1.182:80", modelInfo.BaseURL);
  65. Assert.Equal("http://192.168.1.182:80/lineup.json", modelInfo.LineupURL);
  66. }
  67. [Fact]
  68. public async Task GetModelInfo_EmptyUrl_ArgumentException()
  69. {
  70. var host = new TunerHostInfo()
  71. {
  72. Url = string.Empty
  73. };
  74. await Assert.ThrowsAsync<ArgumentException>(() => _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None));
  75. }
  76. [Fact]
  77. public async Task GetLineup_Valid_Success()
  78. {
  79. var host = new TunerHostInfo()
  80. {
  81. Url = TestIp
  82. };
  83. var channels = await _hdHomerunHost.GetLineup(host, CancellationToken.None).ConfigureAwait(false);
  84. Assert.Equal(6, channels.Count);
  85. Assert.Equal("4.1", channels[0].GuideNumber);
  86. Assert.Equal("WCMH-DT", channels[0].GuideName);
  87. Assert.True(channels[0].HD);
  88. Assert.True(channels[0].Favorite);
  89. Assert.Equal("http://192.168.1.111:5004/auto/v4.1", channels[0].URL);
  90. }
  91. [Fact]
  92. public async Task GetLineup_ImportFavoritesOnly_Success()
  93. {
  94. var host = new TunerHostInfo()
  95. {
  96. Url = TestIp,
  97. ImportFavoritesOnly = true
  98. };
  99. var channels = await _hdHomerunHost.GetLineup(host, CancellationToken.None).ConfigureAwait(false);
  100. Assert.Single(channels);
  101. Assert.Equal("4.1", channels[0].GuideNumber);
  102. Assert.Equal("WCMH-DT", channels[0].GuideName);
  103. Assert.True(channels[0].HD);
  104. Assert.True(channels[0].Favorite);
  105. Assert.Equal("http://192.168.1.111:5004/auto/v4.1", channels[0].URL);
  106. }
  107. [Fact]
  108. public async Task TryGetTunerHostInfo_Valid_Success()
  109. {
  110. var host = await _hdHomerunHost.TryGetTunerHostInfo(TestIp, CancellationToken.None).ConfigureAwait(false);
  111. Assert.Equal(_hdHomerunHost.Type, host.Type);
  112. Assert.Equal(TestIp, host.Url);
  113. Assert.Equal("HDHomeRun PRIME", host.FriendlyName);
  114. Assert.Equal("FFFFFFFF", host.DeviceId);
  115. Assert.Equal(3, host.TunerCount);
  116. }
  117. }
  118. }