diff --git a/Presentation/Nop.Web/App_Data/appsettings.json b/Presentation/Nop.Web/App_Data/appsettings.json
index 3fe7c34..3081cc3 100644
--- a/Presentation/Nop.Web/App_Data/appsettings.json
+++ b/Presentation/Nop.Web/App_Data/appsettings.json
@@ -1,6 +1,6 @@
{
"ConnectionStrings": {
- "ConnectionString": "Data Source=195.26.231.218;Initial Catalog=FruitBank_DEV;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=v6f_?xNfg9N1;Trust Server Certificate=True",
+ "ConnectionString": "Data Source=195.26.231.218;Initial Catalog=FruitBank_PROD;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=v6f_?xNfg9N1;Trust Server Certificate=True",
"DataProvider": "sqlserver",
"SQLCommandTimeout": null,
"WithNoLock": false
diff --git a/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientSandbox.cs b/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientSandbox.cs
index 7b33e03..03e2970 100644
--- a/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientSandbox.cs
+++ b/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientSandbox.cs
@@ -1,6 +1,5 @@
using AyCode.Core.Loggers;
using AyCode.Services.SignalRs;
-using Mango.Sandbox.EndPoints;
namespace Mango.Sandbox.EndPoints.Tests;
@@ -15,12 +14,15 @@ public class SignalRClientSandbox : AcSignalRClientBase
{
}
- protected override SignalResponseJsonMessage DeserializeResponseMsgPack(byte[] messageBytes)
- {
- var responseJsonMessage = base.DeserializeResponseMsgPack(messageBytes);
- Console.WriteLine(responseJsonMessage.ResponseDataJson);
- return responseJsonMessage;
- }
+ //protected override ISignalResponseMessage DeserializeResponseMessage(byte[] messageBytes)
+ //{
+ // var responseMessage = base.DeserializeResponseMessage(messageBytes);
+ // if (responseMessage is SignalResponseJsonMessage jsonMessage)
+ // {
+ // Console.WriteLine(jsonMessage.ResponseData);
+ // }
+ // return responseMessage;
+ //}
protected override Task MessageReceived(int messageTag, byte[] messageBytes)
{
diff --git a/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientToEndpointTest.cs b/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientToEndpointTest.cs
index 0ba373e..73f4b86 100644
--- a/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientToEndpointTest.cs
+++ b/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalRClientToEndpointTest.cs
@@ -454,4 +454,49 @@ public class SignalRClientToEndpointTest
}
#endregion
+
+ #region Binary Serialization Tesztek - AcBinaryDeserializationException reprodukálása
+
+ ///
+ /// Reprodukálja a GetMeasuringUsers hibát: AcBinaryDeserializationException: Invalid interned string index
+ /// A hiba akkor jelentkezik, amikor a szerver Binary formátumban küldi a választ (List),
+ /// de a kliens deszerializálásnál az interned string index hibás.
+ ///
+ [TestMethod]
+ public async Task GetAllAsync_CustomerDtoList_BinaryDeserialization_ThrowsInternedStringIndexError()
+ {
+ // Act - GetAllAsync>(tag)
+ // Ez a hÃvás a GetMeasuringUsers-höz hasonló forgatókönyvet reprodukál
+ var result = await _client.GetAllAsync>(TestSignalRTags.GetCustomerDtoList);
+
+ // Assert
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result.Count > 0, "Should return at least one CustomerDto");
+
+ // Ellenőrizzük, hogy minden CustomerDto megfelelően deszerializálódott
+ foreach (var dto in result)
+ {
+ Assert.IsTrue(dto.Id > 0, $"CustomerDto.Id should be > 0, got {dto.Id}");
+ Assert.IsFalse(string.IsNullOrEmpty(dto.Username), "CustomerDto.Username should not be empty");
+ Assert.IsFalse(string.IsNullOrEmpty(dto.Email), "CustomerDto.Email should not be empty");
+ Console.WriteLine($"[GetAllAsync_CustomerDtoList] Id={dto.Id}, Username={dto.Username}, Email={dto.Email}, FullName={dto.FullName}");
+ }
+ }
+
+ ///
+ /// Nagyobb CustomerDto lista tesztelése - több interned string a szerializációban
+ ///
+ [TestMethod]
+ public async Task GetAllAsync_LargeCustomerDtoList_BinaryDeserialization_Success()
+ {
+ // Act
+ var result = await _client.GetAllAsync>(TestSignalRTags.GetLargeCustomerDtoList);
+
+ // Assert
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result.Count >= 10, $"Should return at least 10 CustomerDtos, got {result.Count}");
+ Console.WriteLine($"[GetAllAsync_LargeCustomerDtoList] Received {result.Count} items");
+ }
+
+ #endregion
}
\ No newline at end of file
diff --git a/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalREndpointSimpleTests.cs b/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalREndpointSimpleTests.cs
deleted file mode 100644
index 1520649..0000000
--- a/Tests/Mango.Sandbox/Mango.Sandbox.EndPoints.Tests/SignalREndpointSimpleTests.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-using AyCode.Core.Extensions;
-using AyCode.Services.SignalRs;
-using FruitBank.Common.SignalRs;
-using Mango.Sandbox.EndPoints;
-using MessagePack;
-using Microsoft.AspNetCore.SignalR.Client;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using System.Text;
-using MessagePack.Resolvers;
-
-namespace Mango.Sandbox.EndPoints.Tests;
-
-///
-/// Alacsony szintû SignalR tesztek - közvetlen HubConnection használatával.
-/// FONTOS: A SANDBOX-ot manuálisan kell elindítani a tesztek futtatása elõtt!
-///
-[TestClass]
-public class SignalREndpointSimpleTests
-{
- private static readonly string SandboxUrl = "http://localhost:59579";
- private static readonly string HubUrl = $"{SandboxUrl}/fbHub";
-
- [ClassInitialize]
- public static async Task ClassInitialize(TestContext context)
- {
- using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(5) };
- try
- {
- var response = await httpClient.GetAsync($"{SandboxUrl}/health");
- Assert.IsTrue(response.IsSuccessStatusCode,
- "SANDBOX not running! Start: dotnet run --project Mango.Sandbox.EndPoints --urls http://localhost:59579");
- }
- catch (Exception ex)
- {
- Assert.Fail($"SANDBOX not running! {ex.Message}");
- }
- }
-
- #region HTTP Endpoint Tests
-
- [TestMethod]
- public async Task HealthEndpoint_ReturnsSuccess()
- {
- using var httpClient = new HttpClient();
- var response = await httpClient.GetAsync($"{SandboxUrl}/health");
- Assert.IsTrue(response.IsSuccessStatusCode);
- }
-
- [TestMethod]
- public async Task RootEndpoint_ReturnsSandboxIsRunning()
- {
- using var httpClient = new HttpClient();
- var response = await httpClient.GetStringAsync(SandboxUrl);
- Assert.AreEqual("SANDBOX is running!", response);
- }
-
- #endregion
-
- #region SignalR Connection Tests
-
- [TestMethod]
- public async Task SignalR_Negotiate_ReturnsSuccess()
- {
- using var httpClient = new HttpClient();
- var response = await httpClient.PostAsync($"{HubUrl}/negotiate?negotiateVersion=1", null);
- Assert.IsTrue(response.IsSuccessStatusCode);
- }
-
- [TestMethod]
- public async Task SignalR_Connect_Succeeds()
- {
- var connection = new HubConnectionBuilder()
- .WithUrl(HubUrl)
- .Build();
-
- try
- {
- await connection.StartAsync();
- Assert.AreEqual(HubConnectionState.Connected, connection.State);
- }
- finally
- {
- await connection.StopAsync();
- }
- }
-
- #endregion
-
- #region Low-Level SignalR Tests
-
- [TestMethod]
- public async Task SignalR_Ping_ReturnsResponse()
- {
- await SignalRClientHelper(TestSignalRTags.PingTag, "Hello SignalR!", "Ping", response =>
- {
- Assert.IsNotNull(response);
- var pingResponse = response.JsonTo();
- Assert.IsNotNull(pingResponse);
- Console.WriteLine($"[Ping] Message: {pingResponse.Message}");
- });
- }
-
- [TestMethod]
- public async Task SignalR_Echo_ReturnsEchoedData()
- {
- var request = new TestEchoRequest { Id = 42, Name = "TestName" };
- await SignalRClientHelper(TestSignalRTags.EchoTag, request, "Echo", response =>
- {
- Assert.IsNotNull(response);
- var echoResponse = response.JsonTo();
- Assert.IsNotNull(echoResponse);
- Assert.AreEqual(42, echoResponse.Id);
- });
- }
-
- [TestMethod]
- public async Task SignalR_GetTestItems_ReturnsItemList()
- {
- await SignalRClientHelper(TestSignalRTags.GetTestItems, null, "GetTestItems", response =>
- {
- Assert.IsNotNull(response);
- var items = response.JsonTo>();
- Assert.IsNotNull(items);
- Assert.IsTrue(items.Count > 0);
- });
- }
-
- #endregion
-
- #region Helper Methods
-
- private async Task SignalRClientHelper(int tag, object? parameter, string endpointName, Action? validateResponse = null)
- {
- var connection = new HubConnectionBuilder()
- .WithUrl(HubUrl)
- .Build();
-
- string? receivedJson = null;
- var responseReceived = new TaskCompletionSource();
-
- connection.On("OnReceiveMessage", (responseTag, data, requestId) =>
- {
- if (data != null && data.Length > 0)
- {
- try
- {
- var options = MessagePack.Resolvers.ContractlessStandardResolver.Options;
- var response = MessagePackSerializer.Deserialize(data, options);
- receivedJson = response?.ResponseData;
- }
- catch
- {
- receivedJson = Encoding.UTF8.GetString(data);
- }
- }
- responseReceived.TrySetResult(true);
- });
-
- try
- {
- await connection.StartAsync();
- Assert.AreEqual(HubConnectionState.Connected, connection.State);
-
- byte[]? requestData = CreateRequestData(parameter);
- await connection.InvokeAsync("OnReceiveMessage", tag, requestData, (int?)null);
-
- var completed = await Task.WhenAny(responseReceived.Task, Task.Delay(5000));
- if (completed == responseReceived.Task)
- {
- validateResponse?.Invoke(receivedJson);
- }
- else
- {
- Assert.Fail($"[{endpointName}] Timeout");
- }
- }
- finally
- {
- if (connection.State == HubConnectionState.Connected)
- await connection.StopAsync();
- }
- }
-
- private static byte[]? CreateRequestData(object? parameter)
- {
- if (parameter == null) return null;
-
- var isPrimitive = parameter is string or int or long or double or float or decimal or bool or DateTime;
-
- if (isPrimitive)
- {
- var idMessage = new IdMessage(parameter);
- return new SignalPostJsonDataMessage(idMessage).ToMessagePack(ContractlessStandardResolver.Options);
- }
- else
- {
- return new SignalPostJsonDataMessage