103 lines
4.4 KiB
C#
103 lines
4.4 KiB
C#
using AyCode.Core.Extensions;
|
|
using AyCode.Services.SignalRs;
|
|
|
|
namespace AyCode.Services.Tests.SignalRs;
|
|
|
|
[TestClass]
|
|
public class PostJsonDataMessageTests
|
|
{
|
|
[TestMethod]
|
|
public void Debug_ParameterBinary_RoundTrip_ForInt()
|
|
{
|
|
var parameters = new object[] { 42 };
|
|
Console.WriteLine($"Parameters: [{string.Join(", ", parameters)}]");
|
|
|
|
var bytes = SignalRSerializationHelper.SerializeParametersToBinary(parameters);
|
|
Console.WriteLine($"Binary bytes: {bytes.Length}");
|
|
|
|
// Simulate server deserialization with known target types
|
|
var paramInfos = typeof(PostJsonDataMessageTests)
|
|
.GetMethod(nameof(DummyIntMethod))!.GetParameters();
|
|
var deserialized = SignalRSerializationHelper.DeserializeParametersFromBinary(bytes, paramInfos);
|
|
|
|
Assert.IsNotNull(deserialized);
|
|
Assert.AreEqual(1, deserialized.Length);
|
|
Assert.AreEqual(42, deserialized[0]);
|
|
}
|
|
|
|
[TestMethod]
|
|
[DataRow(42)]
|
|
[DataRow("45")]
|
|
[DataRow(true)]
|
|
public void ParameterBinary_FullRoundTrip_AnyParameter(object testValue)
|
|
{
|
|
Console.WriteLine("=== Step 1: Client creates object[] ===");
|
|
var parameters = new[] { testValue };
|
|
|
|
Console.WriteLine("\n=== Step 2: Binary serialization ===");
|
|
var bytes = SignalRSerializationHelper.SerializeParametersToBinary(parameters);
|
|
Console.WriteLine($"Binary bytes: {bytes.Length}");
|
|
|
|
Console.WriteLine("\n=== Step 3: Server deserializes with target type ===");
|
|
var paramInfos = new[] { GetParamInfoForType(testValue.GetType()) };
|
|
var serverParams = SignalRSerializationHelper.DeserializeParametersFromBinary(bytes, paramInfos);
|
|
|
|
Console.WriteLine($"Server params[0]: '{serverParams[0]}' (type: {serverParams[0]?.GetType().Name})");
|
|
|
|
Console.WriteLine("\n=== Step 4: Service method uses parameter ===");
|
|
var serviceResult = $"{serverParams![0]}";
|
|
Console.WriteLine($"Service result: '{serviceResult}'");
|
|
|
|
Console.WriteLine("\n=== Step 5: Server creates response ===");
|
|
var response = new SignalResponseDataMessage(100, SignalResponseStatus.Success, serviceResult, AyCode.Core.Serializers.Binaries.AcBinarySerializerOptions.Default);
|
|
|
|
Console.WriteLine("\n=== Step 6: Response Binary ===");
|
|
var responseBytes = response.ToBinary();
|
|
|
|
Console.WriteLine("\n=== Step 7: Client deserializes response ===");
|
|
var clientResponse = responseBytes.BinaryTo<SignalResponseDataMessage>();
|
|
|
|
Console.WriteLine("\n=== Step 8: Client deserializes to string ===");
|
|
var finalResult = clientResponse?.GetResponseData<string>();
|
|
Console.WriteLine($"Final result: '{finalResult}'");
|
|
Assert.AreEqual(testValue.ToString(), finalResult);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ParameterBinary_MultipleParams_RoundTrip()
|
|
{
|
|
var guid = Guid.NewGuid();
|
|
var parameters = new object[] { 42, "hello", true, guid };
|
|
|
|
var bytes = SignalRSerializationHelper.SerializeParametersToBinary(parameters);
|
|
|
|
var paramInfos = typeof(PostJsonDataMessageTests)
|
|
.GetMethod(nameof(DummyMultiMethod))!.GetParameters();
|
|
var deserialized = SignalRSerializationHelper.DeserializeParametersFromBinary(bytes, paramInfos);
|
|
|
|
Assert.IsNotNull(deserialized);
|
|
Assert.AreEqual(4, deserialized.Length);
|
|
Assert.AreEqual(42, deserialized[0]);
|
|
Assert.AreEqual("hello", deserialized[1]);
|
|
Assert.AreEqual(true, deserialized[2]);
|
|
Assert.AreEqual(guid, deserialized[3]);
|
|
}
|
|
|
|
// Dummy methods for ParameterInfo extraction
|
|
public static void DummyIntMethod(int value) { }
|
|
public static void DummyMultiMethod(int a, string b, bool c, Guid d) { }
|
|
|
|
private static System.Reflection.ParameterInfo GetParamInfoForType(Type type)
|
|
{
|
|
// Find a dummy method with the matching parameter type
|
|
if (type == typeof(int)) return typeof(PostJsonDataMessageTests).GetMethod(nameof(DummyInt))!.GetParameters()[0];
|
|
if (type == typeof(string)) return typeof(PostJsonDataMessageTests).GetMethod(nameof(DummyString))!.GetParameters()[0];
|
|
if (type == typeof(bool)) return typeof(PostJsonDataMessageTests).GetMethod(nameof(DummyBool))!.GetParameters()[0];
|
|
throw new NotSupportedException($"No dummy method for type {type.Name}");
|
|
}
|
|
|
|
public static void DummyInt(int v) { }
|
|
public static void DummyString(string v) { }
|
|
public static void DummyBool(bool v) { }
|
|
}
|