HdHomerunHostTests.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using System;
  2. using System.IO;
  3. using System.Net.Http;
  4. using System.Text.Json;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using AutoFixture;
  8. using AutoFixture.AutoMoq;
  9. using Jellyfin.LiveTv.TunerHosts.HdHomerun;
  10. using MediaBrowser.Model.LiveTv;
  11. using Moq;
  12. using Moq.Protected;
  13. using Xunit;
  14. namespace Jellyfin.LiveTv.Tests
  15. {
  16. public class HdHomerunHostTests
  17. {
  18. private readonly Fixture _fixture;
  19. private readonly HdHomerunHost _hdHomerunHost;
  20. public HdHomerunHostTests()
  21. {
  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. return Task.FromResult(new HttpResponseMessage()
  29. {
  30. Content = new StreamContent(File.OpenRead(Path.Combine("Test Data/LiveTv", m.RequestUri!.Host, m.RequestUri.Segments[^1])))
  31. });
  32. });
  33. var http = new Mock<IHttpClientFactory>();
  34. http.Setup(x => x.CreateClient(It.IsAny<string>()))
  35. .Returns(new HttpClient(messageHandler.Object));
  36. _fixture = new Fixture();
  37. _fixture.Customize(new AutoMoqCustomization
  38. {
  39. ConfigureMembers = true
  40. }).Inject(http);
  41. _hdHomerunHost = _fixture.Create<HdHomerunHost>();
  42. }
  43. [Fact]
  44. public async Task GetModelInfo_Valid_Success()
  45. {
  46. var host = new TunerHostInfo()
  47. {
  48. Url = "192.168.1.182"
  49. };
  50. var modelInfo = await _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None);
  51. Assert.Equal("HDHomeRun PRIME", modelInfo.FriendlyName);
  52. Assert.Equal("HDHR3-CC", modelInfo.ModelNumber);
  53. Assert.Equal("hdhomerun3_cablecard", modelInfo.FirmwareName);
  54. Assert.Equal("20160630atest2", modelInfo.FirmwareVersion);
  55. Assert.Equal("FFFFFFFF", modelInfo.DeviceID);
  56. Assert.Equal("FFFFFFFF", modelInfo.DeviceAuth);
  57. Assert.Equal(3, modelInfo.TunerCount);
  58. Assert.Equal("http://192.168.1.182:80", modelInfo.BaseURL);
  59. Assert.Equal("http://192.168.1.182:80/lineup.json", modelInfo.LineupURL);
  60. }
  61. [Fact]
  62. public async Task GetModelInfo_Legacy_Success()
  63. {
  64. var host = new TunerHostInfo()
  65. {
  66. Url = "10.10.10.100"
  67. };
  68. var modelInfo = await _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None);
  69. Assert.Equal("HDHomeRun DUAL", modelInfo.FriendlyName);
  70. Assert.Equal("HDHR3-US", modelInfo.ModelNumber);
  71. Assert.Equal("hdhomerun3_atsc", modelInfo.FirmwareName);
  72. Assert.Equal("20200225", modelInfo.FirmwareVersion);
  73. Assert.Equal("10xxxxx5", modelInfo.DeviceID);
  74. Assert.Null(modelInfo.DeviceAuth);
  75. Assert.Equal(2, modelInfo.TunerCount);
  76. Assert.Equal("http://10.10.10.100:80", modelInfo.BaseURL);
  77. Assert.Null(modelInfo.LineupURL);
  78. }
  79. [Fact]
  80. public async Task GetModelInfo_EmptyUrl_ArgumentException()
  81. {
  82. var host = new TunerHostInfo()
  83. {
  84. Url = string.Empty
  85. };
  86. await Assert.ThrowsAsync<ArgumentException>(() => _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None));
  87. }
  88. [Fact]
  89. public async Task GetLineup_Valid_Success()
  90. {
  91. var host = new TunerHostInfo()
  92. {
  93. Url = "192.168.1.182"
  94. };
  95. var channels = await _hdHomerunHost.GetLineup(host, CancellationToken.None);
  96. Assert.Equal(6, channels.Count);
  97. Assert.Equal("4.1", channels[0].GuideNumber);
  98. Assert.Equal("WCMH-DT", channels[0].GuideName);
  99. Assert.True(channels[0].HD);
  100. Assert.True(channels[0].Favorite);
  101. Assert.Equal("http://192.168.1.111:5004/auto/v4.1", channels[0].URL);
  102. }
  103. [Fact]
  104. public async Task GetLineup_Legacy_Success()
  105. {
  106. var host = new TunerHostInfo()
  107. {
  108. Url = "10.10.10.100"
  109. };
  110. // Placeholder json is invalid, just need to make sure we can reach it
  111. await Assert.ThrowsAsync<JsonException>(() => _hdHomerunHost.GetLineup(host, CancellationToken.None));
  112. }
  113. [Fact]
  114. public async Task GetLineup_ImportFavoritesOnly_Success()
  115. {
  116. var host = new TunerHostInfo()
  117. {
  118. Url = "192.168.1.182",
  119. ImportFavoritesOnly = true
  120. };
  121. var channels = await _hdHomerunHost.GetLineup(host, CancellationToken.None);
  122. Assert.Single(channels);
  123. Assert.Equal("4.1", channels[0].GuideNumber);
  124. Assert.Equal("WCMH-DT", channels[0].GuideName);
  125. Assert.True(channels[0].HD);
  126. Assert.True(channels[0].Favorite);
  127. Assert.Equal("http://192.168.1.111:5004/auto/v4.1", channels[0].URL);
  128. }
  129. [Fact]
  130. public async Task TryGetTunerHostInfo_Valid_Success()
  131. {
  132. var host = await _hdHomerunHost.TryGetTunerHostInfo("192.168.1.182", CancellationToken.None);
  133. Assert.Equal(_hdHomerunHost.Type, host.Type);
  134. Assert.Equal("192.168.1.182", host.Url);
  135. Assert.Equal("HDHomeRun PRIME", host.FriendlyName);
  136. Assert.Equal("FFFFFFFF", host.DeviceId);
  137. Assert.Equal(3, host.TunerCount);
  138. }
  139. }
  140. }