2
0
Эх сурвалжийг харах

Add tests for HdHomerunHost.GetModelInfo

Bond_009 4 жил өмнө
parent
commit
7027561e19

+ 42 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/DiscoverResponse.cs

@@ -0,0 +1,42 @@
+#pragma warning disable CS1591
+
+using System;
+
+namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
+{
+    public class DiscoverResponse
+    {
+        public string FriendlyName { get; set; }
+
+        public string ModelNumber { get; set; }
+
+        public string FirmwareName { get; set; }
+
+        public string FirmwareVersion { get; set; }
+
+        public string DeviceID { get; set; }
+
+        public string DeviceAuth { get; set; }
+
+        public string BaseURL { get; set; }
+
+        public string LineupURL { get; set; }
+
+        public int TunerCount { get; set; }
+
+        public bool SupportsTranscoding
+        {
+            get
+            {
+                var model = ModelNumber ?? string.Empty;
+
+                if (model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1)
+                {
+                    return true;
+                }
+
+                return false;
+            }
+        }
+    }
+}

+ 2 - 38
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -111,7 +111,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             }).Cast<ChannelInfo>().ToList();
         }
 
-        private async Task<DiscoverResponse> GetModelInfo(TunerHostInfo info, bool throwAllExceptions, CancellationToken cancellationToken)
+        internal async Task<DiscoverResponse> GetModelInfo(TunerHostInfo info, bool throwAllExceptions, CancellationToken cancellationToken)
         {
             var cacheKey = info.Id;
 
@@ -129,7 +129,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             try
             {
                 using var response = await _httpClientFactory.CreateClient(NamedClient.Default)
-                    .GetAsync(string.Format(CultureInfo.InvariantCulture, "{0}/discover.json", GetApiUrl(info)), HttpCompletionOption.ResponseHeadersRead, cancellationToken)
+                    .GetAsync(GetApiUrl(info) + "/discover.json", HttpCompletionOption.ResponseHeadersRead, cancellationToken)
                     .ConfigureAwait(false);
                 await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
                 var discoverResponse = await JsonSerializer.DeserializeAsync<DiscoverResponse>(stream, cancellationToken: cancellationToken)
@@ -678,42 +678,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             }
         }
 
-        public class DiscoverResponse
-        {
-            public string FriendlyName { get; set; }
-
-            public string ModelNumber { get; set; }
-
-            public string FirmwareName { get; set; }
-
-            public string FirmwareVersion { get; set; }
-
-            public string DeviceID { get; set; }
-
-            public string DeviceAuth { get; set; }
-
-            public string BaseURL { get; set; }
-
-            public string LineupURL { get; set; }
-
-            public int TunerCount { get; set; }
-
-            public bool SupportsTranscoding
-            {
-                get
-                {
-                    var model = ModelNumber ?? string.Empty;
-
-                    if (model.IndexOf("hdtc", StringComparison.OrdinalIgnoreCase) != -1)
-                    {
-                        return true;
-                    }
-
-                    return false;
-                }
-            }
-        }
-
         public async Task<List<TunerHostInfo>> DiscoverDevices(int discoveryDurationMs, CancellationToken cancellationToken)
         {
             lock (_modelCache)

+ 2 - 0
Emby.Server.Implementations/Properties/AssemblyInfo.cs

@@ -1,5 +1,6 @@
 using System.Reflection;
 using System.Resources;
+using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
 // General Information about an assembly is controlled through the following
@@ -14,6 +15,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 [assembly: NeutralResourcesLanguage("en")]
+[assembly: InternalsVisibleTo("Jellyfin.Server.Implementations.Tests")]
 
 // Setting ComVisible to false makes the types in this assembly not visible
 // to COM components.  If you need to access a type in this assembly from

+ 4 - 0
tests/Jellyfin.Server.Implementations.Tests/Jellyfin.Server.Implementations.Tests.csproj

@@ -35,6 +35,10 @@
     <ProjectReference Include="..\..\Emby.Server.Implementations\Emby.Server.Implementations.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <EmbeddedResource Include="LiveTv\discover.json" />
+  </ItemGroup>
+
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>

+ 77 - 0
tests/Jellyfin.Server.Implementations.Tests/LiveTv/HdHomerunHostTests.cs

@@ -0,0 +1,77 @@
+using System;
+using System.Net;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using AutoFixture;
+using AutoFixture.AutoMoq;
+using Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun;
+using MediaBrowser.Model.LiveTv;
+using Moq;
+using Moq.Protected;
+using Xunit;
+
+namespace Jellyfin.Server.Implementations.Tests.LiveTv
+{
+    public class HdHomerunHostTests
+    {
+        private const string TestIp = "http://192.168.1.182";
+
+        private readonly Fixture _fixture;
+        private readonly HdHomerunHost _hdHomerunHost;
+
+        public HdHomerunHostTests()
+        {
+            const string ResourceName = "Jellyfin.Server.Implementations.Tests.LiveTv.discover.json";
+
+            var messageHandler = new Mock<HttpMessageHandler>();
+            messageHandler.Protected().Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
+                .Returns(
+                    () => Task.FromResult(new HttpResponseMessage()
+                    {
+                        Content = new StreamContent(typeof(HdHomerunHostTests).Assembly.GetManifestResourceStream(ResourceName)!)
+                    }));
+
+            var http = new Mock<IHttpClientFactory>();
+            http.Setup(x => x.CreateClient(It.IsAny<string>()))
+                .Returns(new HttpClient(messageHandler.Object));
+            _fixture = new Fixture();
+            _fixture.Customize(new AutoMoqCustomization
+            {
+                ConfigureMembers = true
+            }).Inject(http);
+            _hdHomerunHost = _fixture.Create<HdHomerunHost>();
+        }
+
+        [Fact]
+        public async Task GetModelInfo_Valid_Success()
+        {
+            var host = new TunerHostInfo()
+            {
+                Url = TestIp
+            };
+
+            var modelInfo = await _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None).ConfigureAwait(false);
+            Assert.Equal("HDHomeRun PRIME", modelInfo.FriendlyName);
+            Assert.Equal("HDHR3-CC", modelInfo.ModelNumber);
+            Assert.Equal("hdhomerun3_cablecard", modelInfo.FirmwareName);
+            Assert.Equal("20160630atest2", modelInfo.FirmwareVersion);
+            Assert.Equal("FFFFFFFF", modelInfo.DeviceID);
+            Assert.Equal("FFFFFFFF", modelInfo.DeviceAuth);
+            Assert.Equal(3, modelInfo.TunerCount);
+            Assert.Equal("http://192.168.1.182:80", modelInfo.BaseURL);
+            Assert.Equal("http://192.168.1.182:80/lineup.json", modelInfo.LineupURL);
+        }
+
+        [Fact]
+        public async Task GetModelInfo_EmptyUrl_ArgumentException()
+        {
+            var host = new TunerHostInfo()
+            {
+                Url = string.Empty
+            };
+
+            await Assert.ThrowsAsync<ArgumentException>(() => _hdHomerunHost.GetModelInfo(host, true, CancellationToken.None));
+        }
+    }
+}

+ 1 - 0
tests/Jellyfin.Server.Implementations.Tests/LiveTv/discover.json

@@ -0,0 +1 @@
+{"FriendlyName":"HDHomeRun PRIME","ModelNumber":"HDHR3-CC","FirmwareName":"hdhomerun3_cablecard","FirmwareVersion":"20160630atest2","DeviceID":"FFFFFFFF","DeviceAuth":"FFFFFFFF","TunerCount":3,"ConditionalAccess":1,"BaseURL":"http://192.168.1.182:80","LineupURL":"http://192.168.1.182:80/lineup.json"}