From 4adc1c083f166ca026da5dc2c6e95fd2338a8fd3 Mon Sep 17 00:00:00 2001 From: "PUBNUB\\jakub.grzesiowski" Date: Thu, 30 Jan 2025 17:04:07 +0100 Subject: [PATCH] Tests possible fixes, temporarily disable synchronization context callback workflow --- .../PubNubChatApi.Tests/ChannelTests.cs | 9 +- .../PubNubChatApi.Tests/ChatEventTests.cs | 10 ++ .../PubNubChatApi.Tests/ChatTests.cs | 13 +- .../PubNubChatApi.Tests/MembershipTests.cs | 9 ++ .../PubNubChatApi.Tests/MessageTests.cs | 26 ++-- .../PubNubChatApi.Tests/RestrictionsTests.cs | 8 ++ .../PubNubChatApi.Tests/ThreadsTests.cs | 11 +- .../PubNubChatApi.Tests/UserTests.cs | 9 ++ c-sharp-chat/PubnubChatApi/PubnubChatApi.sln | 4 +- .../PubnubChatApi/Entities/Chat.cs | 120 +++++++++--------- 10 files changed, 147 insertions(+), 72 deletions(-) diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChannelTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChannelTests.cs index eeee9f5..8c47bf6 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChannelTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChannelTests.cs @@ -30,6 +30,13 @@ public void Setup() talkUser = chat.GetOrCreateUser("talk_user"); } + [TearDown] + public async Task CleanUp() + { + chat.Destroy(); + await Task.Delay(3000); + } + [Test] public async Task TestGetUserSuggestions() { @@ -157,7 +164,7 @@ public void TestUnPinMessage() }; channel.SendText("message to pin"); - var received = receivedManualEvent.WaitOne(6000); + var received = receivedManualEvent.WaitOne(12000); Assert.IsTrue(received); } diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatEventTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatEventTests.cs index 95f97f1..4423f2a 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatEventTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatEventTests.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using PubNubChatAPI.Entities; using PubnubChatApi.Entities.Data; @@ -26,6 +27,15 @@ public void Setup() channel.Join(); } + [TearDown] + public async Task CleanUp() + { + channel.Leave(); + await Task.Delay(3000); + chat.Destroy(); + await Task.Delay(3000); + } + [Test] public void TestModerationEvents() { diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatTests.cs index fed52c8..b4c4c5e 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ChatTests.cs @@ -25,6 +25,15 @@ public void Setup() } channel.Join(); } + + [TearDown] + public async Task CleanUp() + { + channel.Leave(); + await Task.Delay(3000); + chat.Destroy(); + await Task.Delay(3000); + } [Test] public async Task TestGetCurrentUserMentions() @@ -151,7 +160,7 @@ public void TestForwardMessage() channel.SendText("message_to_forward"); - var forwarded = messageForwardReceivedManualEvent.WaitOne(6000); + var forwarded = messageForwardReceivedManualEvent.WaitOne(12000); forwardingChannel.Leave(); Assert.True(forwarded); } @@ -168,7 +177,7 @@ public void TestEmitEvent() channel.Join(); chat.EmitEvent(PubnubChatEventType.Report, channel.Id, "{\"test\":\"some_nonsense\"}"); - var eventReceived = reportManualEvent.WaitOne(5000); + var eventReceived = reportManualEvent.WaitOne(8000); Assert.True(eventReceived); } diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MembershipTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MembershipTests.cs index eeff7aa..755139c 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MembershipTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MembershipTests.cs @@ -26,6 +26,15 @@ public void Setup() } channel.Join(); } + + [TearDown] + public async Task CleanUp() + { + channel.Leave(); + await Task.Delay(3000); + chat.Destroy(); + await Task.Delay(3000); + } [Test] public async Task TestGetMemberships() diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageTests.cs index cc34ae2..9bb5b71 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/MessageTests.cs @@ -27,6 +27,15 @@ public void Setup() channel.Join(); } + [TearDown] + public async Task CleanUp() + { + channel.Leave(); + await Task.Delay(3000); + chat.Destroy(); + await Task.Delay(3000); + } + [Test] public void TestSendAndReceive() { @@ -80,18 +89,19 @@ public void TestReceivingMessageData() public void TestTryGetMessage() { var manualReceiveEvent = new ManualResetEvent(false); + var timeToken = string.Empty; channel.OnMessageReceived += message => { if (message.ChannelId == channel.Id) { - Assert.True(chat.TryGetMessage(channel.Id, message.TimeToken, out _)); + timeToken = message.TimeToken; manualReceiveEvent.Set(); } }; channel.SendText("something"); - var received = manualReceiveEvent.WaitOne(4000); - Assert.IsTrue(received); + Assert.True(received); + Assert.True(chat.TryGetMessage(channel.Id, timeToken, out _)); } [Test] @@ -208,7 +218,7 @@ public void TestMessageReactions() var reactions = message.Reactions; Assert.True(reactions.Count == 1 && reactions.Any(x => x.Value == "happy"));*/ - await Task.Delay(3000); + await Task.Delay(5000); var has = message.HasUserReaction("happy"); Assert.True(has); @@ -217,7 +227,7 @@ public void TestMessageReactions() manualReset.Set(); }; channel.SendText("a_message"); - var reacted = manualReset.WaitOne(10000); + var reacted = manualReset.WaitOne(12000); Assert.True(reacted); } @@ -225,7 +235,6 @@ public void TestMessageReactions() public void TestMessageReport() { var reportManualEvent = new ManualResetEvent(false); - channel.Join(); chat.StartListeningForReportEvents(channel.Id); chat.OnReportEvent += reportEvent => { @@ -255,6 +264,7 @@ public async Task TestCreateThread() } catch (Exception e) { + Debug.WriteLine(e); Console.WriteLine(e); Assert.Fail(); } @@ -263,7 +273,7 @@ public async Task TestCreateThread() Assert.True(message.TryGetThread(out var threadChannel)); message.RemoveThread(); - await Task.Delay(8000); + await Task.Delay(12000); //TODO: temporary way to get latest message pointer since remove_thread doesn't return a new pointer chat.TryGetMessage(channel.Id, message.Id, out message); @@ -273,7 +283,7 @@ public async Task TestCreateThread() }; channel.SendText("thread_start_message"); - var received = manualReceiveEvent.WaitOne(20000); + var received = manualReceiveEvent.WaitOne(30000); Assert.IsTrue(received); } } \ No newline at end of file diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/RestrictionsTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/RestrictionsTests.cs index 5790b7e..ea2af2a 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/RestrictionsTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/RestrictionsTests.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using PubNubChatAPI.Entities; using PubnubChatApi.Entities.Data; @@ -17,6 +18,13 @@ public void Setup() "restrictions_tests_user") ); } + + [TearDown] + public async Task CleanUp() + { + chat.Destroy(); + await Task.Delay(3000); + } [Test] public async Task TestSetRestrictions() diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ThreadsTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ThreadsTests.cs index 303bd4f..3990155 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ThreadsTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/ThreadsTests.cs @@ -26,9 +26,18 @@ public void Setup() } channel.Join(); } + + [TearDown] + public async Task CleanUp() + { + channel.Leave(); + await Task.Delay(3000); + chat.Destroy(); + await Task.Delay(3000); + } [Test] - public void TestGetThreadHistory() + public async Task TestGetThreadHistory() { var historyReadReset = new ManualResetEvent(false); channel.OnMessageReceived += async message => diff --git a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/UserTests.cs b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/UserTests.cs index db28348..5d500c2 100644 --- a/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/UserTests.cs +++ b/c-sharp-chat/PubnubChatApi/PubNubChatApi.Tests/UserTests.cs @@ -27,6 +27,15 @@ public void Setup() } channel.Join(); } + + [TearDown] + public async Task CleanUp() + { + channel.Leave(); + await Task.Delay(3000); + chat.Destroy(); + await Task.Delay(3000); + } [Test] public async Task TestUserActive() diff --git a/c-sharp-chat/PubnubChatApi/PubnubChatApi.sln b/c-sharp-chat/PubnubChatApi/PubnubChatApi.sln index e64a13e..5c36ac5 100644 --- a/c-sharp-chat/PubnubChatApi/PubnubChatApi.sln +++ b/c-sharp-chat/PubnubChatApi/PubnubChatApi.sln @@ -14,8 +14,8 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {8D3851D4-6FD7-4DE5-9960-DA386442603E}.Release|Any CPU.ActiveCfg = Release|Any CPU {8D3851D4-6FD7-4DE5-9960-DA386442603E}.Release|Any CPU.Build.0 = Release|Any CPU - {8D3851D4-6FD7-4DE5-9960-DA386442603E}.Debug|Any CPU.ActiveCfg = Release|Any CPU - {8D3851D4-6FD7-4DE5-9960-DA386442603E}.Debug|Any CPU.Build.0 = Release|Any CPU + {8D3851D4-6FD7-4DE5-9960-DA386442603E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D3851D4-6FD7-4DE5-9960-DA386442603E}.Debug|Any CPU.Build.0 = Debug|Any CPU {54ACBC4B-510A-499F-9494-24F9F90F7B67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {54ACBC4B-510A-499F-9494-24F9F90F7B67}.Debug|Any CPU.Build.0 = Debug|Any CPU {54ACBC4B-510A-499F-9494-24F9F90F7B67}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Chat.cs b/c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Chat.cs index cafcb6c..c8df68b 100644 --- a/c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Chat.cs +++ b/c-sharp-chat/PubnubChatApi/PubnubChatApi/Entities/Chat.cs @@ -345,7 +345,7 @@ public Chat(PubnubChatConfig config, SynchronizationContext? synchronizationCont Config = config; ChatAccessManager = new ChatAccessManager(chatPointer); - context = synchronizationContext ?? SynchronizationContext.Current; + context = null;//synchronizationContext ?? SynchronizationContext.Current; fetchUpdatesThread = new Thread(FetchUpdatesLoop) { IsBackground = true }; fetchUpdatesThread.Start(); @@ -365,7 +365,7 @@ private void FetchUpdatesLoop() internal void ParseJsonUpdatePointers(string jsonPointers) { - void Post(SendOrPostCallback callback, object? state) + /*void Post(SendOrPostCallback callback, object? state) { if (context != null) { @@ -375,7 +375,7 @@ void Post(SendOrPostCallback callback, object? state) { callback.Invoke(state); } - } + }*/ if (!string.IsNullOrEmpty(jsonPointers) && jsonPointers != "[]") { @@ -411,10 +411,10 @@ void Post(SendOrPostCallback callback, object? state) if (TryGetChannel(chatEvent.ChannelId, out var typingChannel) && typingChannel.TryParseAndBroadcastTypingEvent(chatEvent)) { - Post(delegate - { + //Post(delegate + //{ OnTypingEvent?.Invoke(chatEvent); - }, null); + //}, null); } else { @@ -422,47 +422,47 @@ void Post(SendOrPostCallback callback, object? state) } break; case PubnubChatEventType.Report: - Post(delegate - { + //Post(delegate + //{ OnReportEvent?.Invoke(chatEvent); - }, null); + //}, null); break; case PubnubChatEventType.Receipt: - Post(delegate - { + //Post(delegate + //{ OnReadReceiptEvent?.Invoke(chatEvent); - }, null); + //}, null); if (TryGetChannel(chatEvent.ChannelId, out var readReceiptChannel)) { - Post(delegate - { + //Post(delegate + //{ readReceiptChannel.BroadcastReadReceipt(chatEvent); - }, null); + //}, null); } break; case PubnubChatEventType.Mention: - Post(delegate - { + //Post(delegate + //{ OnMentionEvent?.Invoke(chatEvent); - }, null); + //}, null); break; case PubnubChatEventType.Invite: - Post(delegate - { + //Post(delegate + //{ OnInviteEvent?.Invoke(chatEvent); - }, null); + //}, null); break; case PubnubChatEventType.Custom: - Post(delegate - { + //Post(delegate + //{ OnCustomEvent?.Invoke(chatEvent); - }, null); + //}, null); break; case PubnubChatEventType.Moderation: - Post(delegate - { + //Post(delegate + //{ OnModerationEvent?.Invoke(chatEvent); - }, null); + //}, null); break; default: throw new ArgumentOutOfRangeException(); @@ -470,10 +470,10 @@ void Post(SendOrPostCallback callback, object? state) if (!failedToInvoke) { - Post(delegate - { + //Post(delegate + //{ OnAnyEvent?.Invoke(chatEvent); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -492,10 +492,10 @@ void Post(SendOrPostCallback callback, object? state) var timeToken = Message.GetMessageIdFromPtr(threadMessagePointer); var message = new ThreadMessage(this, threadMessagePointer, timeToken); messageWrappers[timeToken] = message; - Post(delegate - { + //Post(delegate + //{ threadChannel.BroadcastMessageReceived(message); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -514,12 +514,11 @@ void Post(SendOrPostCallback callback, object? state) var timeToken = Message.GetMessageIdFromPtr(messagePointer); var message = new Message(this, messagePointer, timeToken); messageWrappers[timeToken] = message; - Post(delegate - { + //Post(delegate + //{ channel.BroadcastMessageReceived(message); - }, null); + //}, null); } - pn_dispose_message(pointer); continue; } @@ -535,10 +534,10 @@ void Post(SendOrPostCallback callback, object? state) if (existingMessageWrapper is ThreadMessage existingThreadMessageWrapper) { existingThreadMessageWrapper.UpdateWithPartialPtr(updatedThreadMessagePointer); - Post(delegate - { + //Post(delegate + //{ existingThreadMessageWrapper.BroadcastMessageUpdate(); - }, null); + //}, null); } else { @@ -560,10 +559,10 @@ void Post(SendOrPostCallback callback, object? state) if (messageWrappers.TryGetValue(id, out var existingMessageWrapper)) { existingMessageWrapper.UpdateWithPartialPtr(updatedMessagePointer); - Post(delegate - { + //Post(delegate + //{ existingMessageWrapper.BroadcastMessageUpdate(); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -584,18 +583,18 @@ void Post(SendOrPostCallback callback, object? state) //This has a check for "PUBNUB_INTERNAL_THREAD" and will correctly update the pointer TryGetChannel(id, out var existingThreadChannel); //TODO: broadcast thread channel update (very low priority because I don't think they have that in JS chat) - Post(delegate - { + //Post(delegate + //{ existingThreadChannel.BroadcastChannelUpdate(); - }, null); + //}, null); } else if (channelWrappers.TryGetValue(id, out var existingChannelWrapper)) { existingChannelWrapper.UpdateWithPartialPtr(channelPointer); - Post(delegate - { + //Post(delegate + //{ existingChannelWrapper.BroadcastChannelUpdate(); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -612,10 +611,10 @@ void Post(SendOrPostCallback callback, object? state) if (userWrappers.TryGetValue(id, out var existingUserWrapper)) { existingUserWrapper.UpdateWithPartialPtr(userPointer); - Post(delegate - { + //Post(delegate + //{ existingUserWrapper.BroadcastUserUpdate(); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -632,10 +631,10 @@ void Post(SendOrPostCallback callback, object? state) if (membershipWrappers.TryGetValue(id, out var existingMembershipWrapper)) { existingMembershipWrapper.UpdateWithPartialPtr(membershipPointer); - Post(delegate - { + //Post(delegate + //{ existingMembershipWrapper.BroadcastMembershipUpdate(); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -657,10 +656,10 @@ void Post(SendOrPostCallback callback, object? state) if (TryGetChannel(channelId, out var channel)) { - Post(delegate - { + //Post(delegate + //{ channel.BroadcastPresenceUpdate(); - }, null); + //}, null); } pn_dispose_message(pointer); @@ -1878,6 +1877,11 @@ private bool TryGetWrapper(Dictionary wrappers, string id, IntPtr public void Destroy() { + //TODO: a temporary solution, maybe nulling the ptr later will be better + if (fetchUpdates == false) + { + return; + } fetchUpdates = false; fetchUpdatesThread.Join(); pn_chat_delete(chatPointer);