From dc99f11eb1129d975ae2aa1cad8a6a94707f8d9d Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Fri, 19 May 2023 16:36:54 -0400 Subject: [PATCH] [wasm] CI: Fix firefox debugger tests failure (#86476) Tests are failing with: ``` Failed DebuggerTests.ArrayTests.InspectGenericValueTypeArrayLocals(line: 89, col: 8, method_name: "DebuggerTests.ArrayTestsClass.GenericValueTypeLoca"..., test_prev_frame: False, frame_idx: 0, use_cfo: True) [> Error Message: System.InvalidCastException : Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken. Stack Trace: at Newtonsoft.Json.Linq.Extensions.Convert[T,U](T token) at DebuggerTests.FirefoxInspectorClient.HandleMessage(String msg, CancellationToken token) in /_/src/mono/wasm/debugger/DebuggerTestSuite/FirefoxInspectorClient.cs:line 184 at Microsoft.WebAssembly.Diagnostics.RunLoop.RunActualAsync(CancellationTokenSource x) in /_/src/mono/wasm/debugger/BrowserDebugProxy/Common/RunLoop.cs:line 142 at Microsoft.WebAssembly.Diagnostics.RunLoop.<>c__DisplayClass20_0.<b__0>d.MoveNext() in /_/src/mono/wasm/debugger/BrowserDebugProxy/Common/RunLoop.cs:line 54 --- End of stack trace from previous location --- at System.Threading.Channels.AsyncOperation`1.GetResult(Int16 token) at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state) ``` One of the arguments of the message is a `JObject`, and thus fails with `.Value()`. The full message: ```json { "from" : "server1.conn0.windowGlobal10737418242/windowGlobalTarget2", "resources" : [ { "message" : { "arguments" : [ "mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae", { "actor" : "server1.conn0.windowGlobal10737418242/longstractor35", "initial" : "{\"eventName\":\"AssemblyLoaded\",\"assembly_name\":\"System.Private.CoreLib.dll\",\"assembly_b64\":\"V2JJTAAAAAADAAAACCAAAEgAAACYYj4AVAAAAPRDPgAAIAAAAEQ+AEwAAABMBAAAAIA+AAAGAABMRD4ADAAAAACgPgAAAgAATEo+ANBjPgAAAAAASAAAAAIABQDQ4RkAyIAkAAkAAAAAAAAAsFMUADjSAwBQ4RkAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgIoJAIABipeAigkAgAGAheNogAAAiUWA5x9AQAABCo6AigkAgAGAgN9AQAABCo6AigkAgAGAgN9AgAABCo6AigkAgAGAgN9AwAABCoeAigDMAUAjQAAAAEAABEgAAIAAOD+DyAAAQAAcwEAAAoMCAoCBgMEBW8CAAAKCwctIg4EEgAWBhYoAQAAKygDAAAKDBIC/hYBAAAbb3cDAAZRFyoHGDM+IAAFAACNpAAAAigEAAAKCgIGAwQFbwIAAAotIg4EEgAWBhYoAQAAKygDAAAKDBIC/hYBAAAbb3cDAAZRFyoOBBRRFiomAgMEKA8AAAZ6RgIsDQIo6gAABgMEKAkAAAYqTgIWai8MKFcAAAYDBCgJAAAGAio2KFcAAAYUFigJAAAGKjICagMEKAsAAAYmAioDMAIAsgEAAAIAABEPAChSAAAGCwcgFAABADBJByAGAAEAMBsHIAIAAQA7zQAAAAcgBgABADsUAQAAOHcBAAAHIAgAAQA7sgAAAAcgCwABADsrAQAAByAUAAEAOzYBAAA4UQEAAAcgJQABADAbByAWAAEAOw4BAAAHICUAAQA7pwAAADguAQAAByAtAAEALhUHIDkAAQAuQAcgQgABAC5cOBEBAAAELTADLAgDKBMAAAYsJQMozwUABiwLKLsdAAZzUmwABioovB0ABgMo0RoABgNzVGwABioDK", "length" : 7737462, "type" : "longString" }, "{}" ], "columnNumber" : 12734, "filename" : "http://localhost:9400/dotnet.runtime.js", "innerWindowID" : 10737418242, "level" : "debug", "lineNumber" : 3, "private" : true, "sourceId" : null, "timeStamp" : 1684452298362.82 }, "resourceType" : "console-message" } ], "type" : "resource-available-form" } ``` --- .../DebuggerTestSuite/FirefoxInspectorClient.cs | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/FirefoxInspectorClient.cs b/src/mono/wasm/debugger/DebuggerTestSuite/FirefoxInspectorClient.cs index 931c4f4..6ea8486 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/FirefoxInspectorClient.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/FirefoxInspectorClient.cs @@ -181,7 +181,34 @@ class FirefoxInspectorClient : InspectorClient // FIXME: unnecessary alloc foreach (JToken? argument in res["resources"]?[0]?["message"]?["arguments"]?.Value() ?? new JArray()) { - args.Add(JObject.FromObject(new { value = argument.Value()})); + if (argument is null) + continue; + + string? strValue = null; + if (argument is JObject argObj && argObj["type"]?.Value() == "longString" && argObj["initial"] is JToken argInitialToken) + { + /* + "arguments" : [ + "mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae", + { + "actor" : "server1.conn0.windowGlobal10737418242/longstractor35", + "initial" : "{\"eventName .... ", + "length" : 7737462, + "type" : "longString" + }, + "{}" + ] + */ + strValue = argInitialToken.Value(); + } + else if (argument.Type is JTokenType.String) + { + strValue = argument.Value(); + } + + // fallback + strValue ??= argument.ToString(); + args.Add(JObject.FromObject(new { value = strValue })); } res = JObject.FromObject(new { -- 2.7.4