af1152b001
Refactored all C# test files to use explicit namespace declarations and moved all using directives inside the namespace block for consistency. Updated assembly info and cache files to reflect the new build. Adjusted MvcTestingAppManifest.json to use fully qualified assembly names. No functional changes; all updates are related to code style, organization, and project metadata.
331 lines
11 KiB
C#
331 lines
11 KiB
C#
// <copyright file="HdHomerunManagerTests.cs" company="PlaceholderCompany">
|
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
// </copyright>
|
|
|
|
namespace Jellyfin.LiveTv.Tests
|
|
{
|
|
using System;
|
|
using System.Text;
|
|
using Jellyfin.LiveTv.TunerHosts.HdHomerun;
|
|
using Xunit;
|
|
|
|
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"));
|
|
}
|
|
}
|
|
}
|