123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- using System;
- using System.Text;
- using Jellyfin.LiveTv.TunerHosts.HdHomerun;
- using Xunit;
- namespace Jellyfin.LiveTv.Tests
- {
- public class HdHomerunManagerTests
- {
- [Fact]
- public void WriteNullTerminatedString_Empty_Success()
- {
- ReadOnlySpan<byte> expected = stackalloc byte[]
- {
- 1, 0
- };
- Span<byte> buffer = stackalloc byte[128];
- int len = HdHomerunManager.WriteNullTerminatedString(buffer, string.Empty);
- Assert.Equal(
- Convert.ToHexString(expected),
- Convert.ToHexString(buffer.Slice(0, len)));
- }
- [Fact]
- public void WriteNullTerminatedString_Valid_Success()
- {
- ReadOnlySpan<byte> expected = stackalloc byte[]
- {
- 10, (byte)'T', (byte)'h', (byte)'e', (byte)' ', (byte)'q', (byte)'u', (byte)'i', (byte)'c', (byte)'k', 0
- };
- Span<byte> buffer = stackalloc byte[128];
- int len = HdHomerunManager.WriteNullTerminatedString(buffer, "The quick");
- Assert.Equal(
- Convert.ToHexString(expected),
- Convert.ToHexString(buffer.Slice(0, len)));
- }
- [Fact]
- public void WriteGetMessage_Valid_Success()
- {
- ReadOnlySpan<byte> expected = stackalloc byte[]
- {
- 0, 4,
- 0, 12,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 0xc0, 0xc9, 0x87, 0x33
- };
- Span<byte> buffer = stackalloc byte[128];
- int len = HdHomerunManager.WriteGetMessage(buffer, 0, "N");
- Assert.Equal(
- Convert.ToHexString(expected),
- Convert.ToHexString(buffer.Slice(0, len)));
- }
- [Fact]
- public void WriteSetMessage_NoLockKey_Success()
- {
- ReadOnlySpan<byte> expected = stackalloc byte[]
- {
- 0, 4,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0xa9, 0x49, 0xd0, 0x68
- };
- Span<byte> buffer = stackalloc byte[128];
- int len = HdHomerunManager.WriteSetMessage(buffer, 0, "N", "value", null);
- Assert.Equal(
- Convert.ToHexString(expected),
- Convert.ToHexString(buffer.Slice(0, len)));
- }
- [Fact]
- public void WriteSetMessage_LockKey_Success()
- {
- ReadOnlySpan<byte> expected = stackalloc byte[]
- {
- 0, 4,
- 0, 26,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 21,
- 4, 0x00, 0x01, 0x38, 0xd5,
- 0x8e, 0xb6, 0x06, 0x82
- };
- Span<byte> buffer = stackalloc byte[128];
- int len = HdHomerunManager.WriteSetMessage(buffer, 0, "N", "value", 80085);
- Assert.Equal(
- Convert.ToHexString(expected),
- Convert.ToHexString(buffer.Slice(0, len)));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_Valid_Success()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x7d, 0xa3, 0xa3, 0xf3
- };
- Assert.True(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out var value));
- Assert.Equal("value", Encoding.UTF8.GetString(value));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_InvalidCrc_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x7d, 0xa3, 0xa3, 0xf4
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_InvalidPacketType_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 4,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0xa9, 0x49, 0xd0, 0x68
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_InvalidPacket_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 0x7d, 0xa3, 0xa3
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_TooSmallMessageLength_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 19,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x25, 0x25, 0x44, 0x9a
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_TooLargeMessageLength_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 21,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0xe3, 0x20, 0x79, 0x6c
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_TooLargeNameLength_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 20, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0xe1, 0x8e, 0x9c, 0x74
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_InvalidGetSetNameTag_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 4,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0xee, 0x05, 0xe7, 0x12
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_InvalidGetSetValueTag_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 3,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x64, 0xaa, 0x66, 0xf9
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void TryGetReturnValueOfGetSet_TooLargeValueLength_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 7, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0xc9, 0xa8, 0xd4, 0x55
- };
- Assert.False(HdHomerunManager.TryGetReturnValueOfGetSet(packet, out _));
- }
- [Fact]
- public void VerifyReturnValueOfGetSet_Valid_True()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x7d, 0xa3, 0xa3, 0xf3
- };
- Assert.True(HdHomerunManager.VerifyReturnValueOfGetSet(packet, "value"));
- }
- [Fact]
- public void VerifyReturnValueOfGetSet_WrongValue_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 5,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x7d, 0xa3, 0xa3, 0xf3
- };
- Assert.False(HdHomerunManager.VerifyReturnValueOfGetSet(packet, "none"));
- }
- [Fact]
- public void VerifyReturnValueOfGetSet_InvalidPacket_False()
- {
- ReadOnlySpan<byte> packet = new byte[]
- {
- 0, 4,
- 0, 20,
- 3,
- 10, (byte)'/', (byte)'t', (byte)'u', (byte)'n', (byte)'e', (byte)'r', (byte)'0', (byte)'/', (byte)'N', 0,
- 4,
- 6, (byte)'v', (byte)'a', (byte)'l', (byte)'u', (byte)'e', 0,
- 0x7d, 0xa3, 0xa3, 0xf3
- };
- Assert.False(HdHomerunManager.VerifyReturnValueOfGetSet(packet, "value"));
- }
- }
- }
|