Add debugger exit routine for GDB/MI protocol tests.
authorMikhail Kurinnoi <m.kurinnoi@samsung.net>
Wed, 25 Sep 2019 11:39:13 +0000 (14:39 +0300)
committer이형주/Common Platform Lab(SR)/Staff Engineer/삼성전자 <leee.lee@samsung.com>
Thu, 26 Sep 2019 08:38:39 +0000 (17:38 +0900)
Now we kill debugger on exit after test finished, with this patch we close debugger in proper way by control application for all GDB/MI tests.
Minor changes in VSCode protocol control applications in order make it more clean.

24 files changed:
test-suite/MIExampleTest/Program.cs
test-suite/MITestBreakpoint/Program.cs
test-suite/MITestEnv/Program.cs
test-suite/MITestException/Program.cs
test-suite/MITestExecAbort/Program.cs
test-suite/MITestExecFinish/Program.cs
test-suite/MITestExecInt/Program.cs
test-suite/MITestExpression/Program.cs
test-suite/MITestHandshake/Program.cs
test-suite/MITestLambda/Program.cs
test-suite/MITestSetValue/Program.cs
test-suite/MITestStepping/Program.cs
test-suite/MITestTarget/Program.cs
test-suite/MITestVarObject/Program.cs
test-suite/VSCodeExampleTest/Program.cs
test-suite/VSCodeTestAttach/Program.cs
test-suite/VSCodeTestBreakpoint/Program.cs
test-suite/VSCodeTestDisconnect/Program.cs
test-suite/VSCodeTestEvaluate/Program.cs
test-suite/VSCodeTestFuncBreak/Program.cs
test-suite/VSCodeTestPause/Program.cs
test-suite/VSCodeTestStepping/Program.cs
test-suite/VSCodeTestThreads/Program.cs
test-suite/VSCodeTestVariables/Program.cs

index ce0704cff352904dd02b70c6056850d489383ca4..a1269c756faff021b660c2543ae8cce8edf09786 100644 (file)
@@ -131,6 +131,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void EnableBreakpoint(string bpName)
         {
             Breakpoint bp = DebuggeeInfo.Breakpoints[bpName];
@@ -180,6 +185,7 @@ namespace MIExampleTest
             // last checkpoint must provide "finish" as id or empty string ("") as next checkpoint id
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 820bdb7377228ac32830f027c0edb12c2d32bffd..42224ba366a61c7f0833ceea31bbce20658a2f77 100644 (file)
@@ -140,6 +140,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static MIDebugger MIDebugger = new MIDebugger();
         public static string id1 = null;
         public static string id2 = null;
@@ -249,6 +254,7 @@ namespace MITestBreakpoint
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index 0dd5e703a9301f48b0ba97b56e0b76674093440f..d7c75a7dffe6f82934a2a9f07c26eccb76fbe2fb 100644 (file)
@@ -83,6 +83,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void Continue()
         {
             Assert.Equal(MIResultClass.Running, MIDebugger.Request("-exec-continue").Class);
@@ -129,6 +134,7 @@ namespace MITestEnv
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 9919ceafe8db25c9ac6fd88745b79fe1ae83299d..c9be6a863a33b8b49b8d5656a093380e50e51657 100644 (file)
@@ -104,6 +104,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static bool IsStoppedEvent(MIOutOfBandRecord record)
         {
             if (record.Type != MIOutOfBandRecordType.Async) {
@@ -252,6 +257,7 @@ namespace MITestException
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index e6c983c85c6783c8f1bedfbe638634aae79568ac..c11597c92f12dcc6cf6f99144a3aee25c444db4e 100644 (file)
@@ -68,6 +68,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void Continue()
         {
             Assert.Equal(MIResultClass.Running, MIDebugger.Request("-exec-continue").Class);
@@ -93,6 +98,8 @@ namespace MITestExecAbort
                 Assert.Equal(MIResultClass.Done, Context.MIDebugger.Request("-exec-abort").Class);
 
                 Assert.Equal(MIResultClass.Error, Context.MIDebugger.Request("-thread-info").Class);
+
+                Context.DebuggerExit();
             });
 
             Thread.Sleep(10000);
index 20a94a9667a9f7ad3737a4f0fd0c05173f79cf1e..936e4a822dd403923df8055c34822014d66b63f9 100644 (file)
@@ -125,6 +125,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void EnableBreakpoint(string bpName)
         {
             Breakpoint bp = DebuggeeInfo.Breakpoints[bpName];
@@ -195,6 +200,7 @@ namespace MITestExecFinish
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index bf53e0b6315a2d9c34d4fdeb54feb2dc83382762..e9b78734416cd8a6146130ff73fcb0907415051b 100644 (file)
@@ -68,6 +68,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static MIDebugger MIDebugger = new MIDebugger();
     }
 }
@@ -92,6 +97,8 @@ namespace MITestExecInt
                 Assert.Equal(MIResultClass.Error, Context.MIDebugger.Request("6-exec-continue").Class);
 
                 Assert.Equal(MIResultClass.Done, Context.MIDebugger.Request("7-exec-abort").Class);
+
+                Context.DebuggerExit();
             });
 
             Thread.Sleep(10000);
index 400f8b4300315670369dfd4b329e60f3477c1a3b..36604b9d1d37e5cbf6ae9e50e920c7de5b5f820c 100644 (file)
@@ -117,6 +117,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static bool IsStoppedEvent(MIOutOfBandRecord record)
         {
             if (record.Type != MIOutOfBandRecordType.Async) {
@@ -199,6 +204,7 @@ namespace MITestExpression
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index 74dfd017f8ac28f7e77f95e00e37d4dad0f022a9..2a0e0b2945e976f51d9a0cbbe4296b2bb7d14a7b 100644 (file)
@@ -95,6 +95,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void Continue()
         {
             Assert.Equal(MIResultClass.Running, MIDebugger.Request("-exec-continue").Class);
@@ -132,6 +137,7 @@ namespace MITestHandshake
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 7efe0b3ee0833978385a88772aeb478020580371..3d2bf10d8a00712b264cde292fd74518a1344c27 100644 (file)
@@ -94,6 +94,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void CheckVar(string varName)
         {
             // varName is equal to it value;
@@ -181,6 +186,7 @@ namespace MITestLambda
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 5492e501066b3b49e1766aeafe4e9c50c2e3035c..2f3d787608c027c2d6a269eaaabcfd9a7daa3be6 100644 (file)
@@ -136,6 +136,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static bool IsStoppedEvent(MIOutOfBandRecord record)
         {
             if (record.Type != MIOutOfBandRecordType.Async) {
@@ -270,6 +275,7 @@ namespace MITestSetValue
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 94601114ba8e07a0d4988045cf76934e2a0517b9..522bacd4155e1ebf80b6e715cb501b7924de8002 100644 (file)
@@ -113,6 +113,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static bool IsStoppedEvent(MIOutOfBandRecord record)
         {
             if (record.Type != MIOutOfBandRecordType.Async) {
@@ -189,6 +194,7 @@ namespace MITestStepping
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index f985d34bbcd2f183548a857e532a9ece2ebbee2f..8ce2292cbb7467605923b68948e66827f378dfab 100644 (file)
@@ -72,6 +72,11 @@ namespace NetcoreDbgTest.Script
                                             + lbp.FileName + ":" + lbp.NumLine).Class);
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static void Continue()
         {
             Assert.Equal(MIResultClass.Running, MIDebugger.Request("-exec-continue").Class);
@@ -131,6 +136,8 @@ namespace MITestTarget
                 while (!Context.testProcess.HasExited) {};
                 // killed by SIGKILL
                 Assert.NotEqual(0, Context.testProcess.ExitCode);
+
+                Context.DebuggerExit();
             });
         }
     }
index 91cd5ea52edef811c3df28633f9f5e1356abf4bc..9da1ed7d4130becaa400d586be505b5e0840734a 100644 (file)
@@ -124,6 +124,11 @@ namespace NetcoreDbgTest.Script
             throw new NetcoreDbgTestCore.ResultNotSuccessException();
         }
 
+        public static void DebuggerExit()
+        {
+            Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);
+        }
+
         public static MIDebugger MIDebugger = new MIDebugger();
     }
 }
@@ -199,6 +204,7 @@ namespace MITestVarObject
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 0454e29cd98b5d624a5932a22e029cf5ac544fe0..70ea8593f1e391f0c2c2ce027da01d363526c683 100644 (file)
@@ -69,7 +69,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -177,6 +180,7 @@ namespace VSCodeExampleTest
             // last checkpoint must provide "finish" as id or empty string ("") as next checkpoint id
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 79d1d5eaa5f856913f40aaafa52d7d0ca977cbb5..63cb5d542bab98c3e7fdd5b8095a6f5fe2d95ffe 100644 (file)
@@ -51,7 +51,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -159,6 +162,7 @@ namespace VSCodeTestAttach
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 96cb13da4807cb285dd16b6cdfbf71c77952b94b..2e17ae3530ec9a56e48aa0d7702df74028674035 100644 (file)
@@ -67,7 +67,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -222,6 +225,7 @@ namespace VSCodeTestBreakpoint
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 0ad277ad9db73bbc21490d9e3b2c981d4e18e02f..daf47aa1e2e5a703ee2b1d8154b0ff26ffdb523e 100644 (file)
@@ -63,21 +63,6 @@ namespace NetcoreDbgTest.Script
             }
         }
 
-        public static void WasDisconnected()
-        {
-            bool wasExited = false;
-            bool wasTerminated = false;
-            foreach (var Event in VSCodeDebugger.EventList) {
-                if (VSCodeDebugger.isResponseContainProperty(Event, "event", "exited")) {
-                    wasExited = true;
-                }
-                if (VSCodeDebugger.isResponseContainProperty(Event, "event", "terminated")) {
-                    wasTerminated = true;
-                }
-            }
-            Assert.True(wasExited && wasTerminated);
-        }
-
         public static void Continue()
         {
             ContinueRequest continueRequest = new ContinueRequest();
@@ -108,7 +93,22 @@ namespace NetcoreDbgTest.Script
             Assert.True(VSCodeDebugger.Request(setBreakpointsRequest).Success);
         }
 
-        public static void Disconnect()
+        public static void WasExit()
+        {
+            bool wasExited = false;
+            bool wasTerminated = false;
+            foreach (var Event in VSCodeDebugger.EventList) {
+                if (VSCodeDebugger.isResponseContainProperty(Event, "event", "exited")) {
+                    wasExited = true;
+                }
+                if (VSCodeDebugger.isResponseContainProperty(Event, "event", "terminated")) {
+                    wasTerminated = true;
+                }
+            }
+            Assert.True(wasExited && wasTerminated);
+        }
+
+        public static void DebuggerExit()
         {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
@@ -137,16 +137,15 @@ namespace VSCodeTestDisconnect
                 Context.PrepareEnd();
                 Context.WasEntryPointHit();
                 Context.Continue();
-
-                Context.Disconnect();
             });
 
             Label.Checkpoint("finish", "", () => {;
-                Context.WasDisconnected();
+                Context.DebuggerExit();
+                Context.WasExit();
             });
 
-            // we should never reach this code
             System.Threading.Thread.Sleep(30000);
+            // we should never reach this code
             Console.WriteLine("A breakpoint \"bp\" is set on this line"); Label.Breakpoint("bp");
         }
     }
index 339bd939cf387e250ae13a7fe431562829234cd4..c10d678f1764fb610093649a86d22166ba6c2245 100644 (file)
@@ -67,7 +67,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -242,6 +245,7 @@ namespace VSCodeTestEvaluate
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index 7ad3c9953cb5e4daab165256f77c387630f7b3e0..da9bf38ded325593a771250960968cc335ee983e 100644 (file)
@@ -67,7 +67,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -178,6 +181,7 @@ namespace VSCodeTestFuncBreak
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index 3c3255bf3ad2c02cd0a419655aa7f94e60f72a03..f7433fd41c0eded19951eed9f4fb3e4cd8a56000 100644 (file)
@@ -63,7 +63,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -123,6 +126,7 @@ namespace VSCodeTestPause
 
             Label.Checkpoint("finish", "", () => {;
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 0a86888c62778712fb741bcb1210c34de99b17d1..8bf83228d748cdf4bdc0c663969b640ce2726a7f 100644 (file)
@@ -67,7 +67,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -213,6 +216,7 @@ namespace VSCodeTestStepping
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
 
index 89131c0fb8914a4b15125a3aec422cfe30720f95..92db54a4bd33a640aed0c7fdb287d2ca8da3aa6e 100644 (file)
@@ -71,7 +71,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -201,6 +204,7 @@ namespace VSCodeTestThreads
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }
     }
index 68632f9bde15357a3a7546d9213f2f15a56548ef..99892484cf375de8c2a046bccda68e318765ef42 100644 (file)
@@ -67,7 +67,10 @@ namespace NetcoreDbgTest.Script
         {
             string resJSON = VSCodeDebugger.Receive(-1);
             Assert.True(VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated"));
+        }
 
+        public static void DebuggerExit()
+        {
             DisconnectRequest disconnectRequest = new DisconnectRequest();
             disconnectRequest.arguments = new DisconnectArguments();
             disconnectRequest.arguments.restart = false;
@@ -289,6 +292,7 @@ namespace VSCodeTestVariables
 
             Label.Checkpoint("finish", "", () => {
                 Context.WasExit();
+                Context.DebuggerExit();
             });
         }