[tests] Add coreclr GC stress tests
authorLudovic Henry <ludovic@xamarin.com>
Sun, 25 Oct 2015 14:47:54 +0000 (14:47 +0000)
committerLudovic Henry <ludovic@xamarin.com>
Wed, 28 Oct 2015 13:18:10 +0000 (13:18 +0000)
acceptance-tests/GCStressTests/AssemblyExtensions.cs [new file with mode: 0644]
acceptance-tests/GCStressTests/AssemblyLoadContext.cs [new file with mode: 0644]
acceptance-tests/Makefile.am
acceptance-tests/SUBMODULES.json
mono/tests/Makefile.am

diff --git a/acceptance-tests/GCStressTests/AssemblyExtensions.cs b/acceptance-tests/GCStressTests/AssemblyExtensions.cs
new file mode 100644 (file)
index 0000000..418d5db
--- /dev/null
@@ -0,0 +1,14 @@
+using System;
+using System.IO;
+using System.Reflection;
+
+namespace System.Runtime.Loader
+{
+    public static class AssemblyExtensions
+    {
+        public static Type[] GetTypes(this Assembly assembly)
+        {
+            return assembly.GetTypes ();
+        }
+    }
+}
diff --git a/acceptance-tests/GCStressTests/AssemblyLoadContext.cs b/acceptance-tests/GCStressTests/AssemblyLoadContext.cs
new file mode 100644 (file)
index 0000000..b3a2c48
--- /dev/null
@@ -0,0 +1,41 @@
+using System;
+using System.IO;
+using System.Reflection;
+
+namespace System.Runtime.Loader
+{
+    public abstract class AssemblyLoadContext
+    {
+        protected abstract Assembly Load(AssemblyName assemblyName);
+
+        protected Assembly LoadFromAssemblyPath(string assemblyPath)
+        {
+            if (assemblyPath == null)
+                throw new ArgumentNullException("assemblyPath");
+
+            if (!Path.IsPathRooted(assemblyPath))
+                throw new ArgumentException("Gimme an absolute path " + assemblyPath + " XXX " + Path.GetPathRoot(assemblyPath), "assemblyPath");
+
+            return Assembly.LoadFrom (assemblyPath);
+        }
+
+        public Assembly LoadFromAssemblyName(AssemblyName assemblyName)
+        {
+            // AssemblyName is mutable. Cache the expected name before anybody gets a chance to modify it.
+            string requestedSimpleName = assemblyName.Name;
+
+            Assembly assembly = Load(assemblyName);
+            if (assembly == null)
+                throw new FileLoadException("File not found", requestedSimpleName);
+
+            return assembly;
+        }
+
+        public static AssemblyName GetAssemblyName(string assemblyPath)
+        {
+            if (!File.Exists (assemblyPath))
+                throw new Exception ("file not found");
+            return new AssemblyName (Path.GetFileName (assemblyPath));
+        }
+    }
+}
index eab1001f716059cfcde5ead5c1a5212edce011ec..ead6212274d580b7e2c48a1bc75e2bd65e2e8fb1 100644 (file)
@@ -73,6 +73,9 @@ coreclr-runtest-managed: coreclr-validate test-runner.exe $(CORECLR_TESTSI_CS) $
 
 check-coreclr: coreclr-compile-tests coreclr-runtest-managed
 
+coreclr-gcstress: coreclr-validate GCStressTests.exe $(CORECLR_STRESSTESTSI_CS)
+       BVT_ROOT=$(realpath $(CORECLR_PATH)/tests/src/GC/Stress/Tests) $(RUNTIME) GCStressTests.exe $(CORECLR_PATH)/tests/src/GC/Stress/testmix_gc.config
+
 CORECLR_TEST_CS_SRC=           \
        $(CORECLR_PATH)/tests/src/JIT/CodeGenBringUpTests/Add1.cs       \
        $(CORECLR_PATH)/tests/src/JIT/CodeGenBringUpTests/addref.cs     \
@@ -1187,6 +1190,38 @@ CORECLR_TEST_CS_SRC=             \
        $(CORECLR_PATH)/tests/src/Threading/ThreadStatics/ThreadStatic05.cs     \
        $(CORECLR_PATH)/tests/src/Threading/ThreadStatics/ThreadStatic06.cs
 
+CORECLR_STRESSTEST_CS_SRC=     \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/573277.cs     \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/MulDimJagAry.cs       \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/bestfit-finalize.cs   \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/ExpandHeap.cs \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/PlugGaps.cs   \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/concurrentspin2.cs    \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/GCQueue.cs    \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/SingLinkStay.cs       \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/GCSimulator.cs        \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/StressAllocator.cs    \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/doubLinkStay.cs       \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/GCVariant.cs  \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/ThdTreeGrowingObj.cs  \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/allocationwithpins.cs \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/pinstress.cs  \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/LeakGenThrd.cs        \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/b115557.cs    \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/plug.cs
+
+CORECLR_STRESSTEST_RUNNER_CS_SRC=      \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/ReliabilityConfiguration.cs       \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/ReliabilityFramework.cs   \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/ReliabilityTest.cs        \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/ReliabilityTestSet.cs     \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/ReliabilityTestSet.cs     \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/RFLogging.cs      \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/DetourHelpers.cs  \
+       $(CORECLR_PATH)/tests/src/GC/Stress/Framework/LoaderClass.cs    \
+       GCStressTests/AssemblyLoadContext.cs    \
+       GCStressTests/AssemblyExtensions.cs
+
 # relies on TestLibrary:
 CORECLR_DISABLED_TEST_CS_SRC =                 \
        $(CORECLR_PATH)/tests/src/Common/CoreCLRTestLibrary/TestFramework.cs    \
@@ -1237,25 +1272,7 @@ CORECLR_DISABLED_TEST_CS_SRC +=  \
 CORECLR_DISABLED_TEST_CS_SRC += $(CORECLR_PATH)/tests/src/Exceptions/Finalization/Finalizer.cs
 
 # exclude the CoreCLR GC stress framework for now, it needs special integration:
-CORECLR_DISABLED_TEST_CS_SRC +=        \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/plug.cs       \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/SingLinkStay.cs       \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/pinstress.cs  \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/GCQueue.cs    \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/ExpandHeap.cs \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/PlugGaps.cs   \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/concurrentspin2.cs    \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/ThdTreeGrowingObj.cs  \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/573277.cs     \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/GCVariant.cs  \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/bestfit-finalize.cs   \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/allocationwithpins.cs \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/MulDimJagAry.cs       \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/GCSimulator.cs        \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/StressAllocator.cs    \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/doubLinkStay.cs       \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/LeakGenThrd.cs        \
-       $(CORECLR_PATH)/tests/src/GC/Stress/Tests/b115557.cs    \
+CORECLR_DISABLED_TEST_CS_SRC +=        \
        $(CORECLR_PATH)/tests/src/GC/Stress/Framework/RFLogging.cs      \
        $(CORECLR_PATH)/tests/src/GC/Stress/Framework/DetourHelpers.cs  \
        $(CORECLR_PATH)/tests/src/GC/Stress/Framework/ReliabilityTest.cs        \
@@ -2399,7 +2416,7 @@ CORECLR_UPSTREAM_IL_SRC=$(shell find "$(CORECLR_PATH)/tests" -iname "*.il")
 CORECLR_IL_SRC_MISSING=$(filter-out $(CORECLR_DEFINED_IL_SRC),$(CORECLR_UPSTREAM_IL_SRC))
 
 # find all CoreCLR *.cs test files that aren't mentioned in this file
-CORECLR_DEFINED_CS_SRC = $(CORECLR_TEST_CS_SRC) $(CORECLR_DISABLED_TEST_CS_SRC)
+CORECLR_DEFINED_CS_SRC = $(CORECLR_TEST_CS_SRC) $(CORECLR_STRESSTEST_CS_SRC) $(CORECLR_DISABLED_TEST_CS_SRC)
 CORECLR_UPSTREAM_CS_SRC=$(shell find "$(CORECLR_PATH)/tests" -iname "*.cs")
 CORECLR_CS_SRC_MISSING=$(filter-out $(CORECLR_DEFINED_CS_SRC),$(CORECLR_UPSTREAM_CS_SRC))
 
@@ -2414,6 +2431,8 @@ coreclr-list-missing-tests:
 CORECLR_TESTSI_CS=$(CORECLR_TEST_CS_SRC:.cs=.exe)
 CORECLR_TESTSI_IL=$(CORECLR_TEST_IL_SRC:.il=_il.exe)
 
+CORECLR_STRESSTESTSI_CS=$(CORECLR_STRESSTEST_CS_SRC:%.cs=%.exe)
+
 # the CoreCLR IL tests use the System.Console facade, we need to copy it to the test directory
 $(CORECLR_PATH)%_il.exe: $(CORECLR_PATH)%.il
        $(ILASM) -out:$@ $<
@@ -2425,4 +2444,7 @@ $(CORECLR_PATH)%.exe: $(CORECLR_PATH)%.cs
 test-runner.exe: $(top_srcdir)/mono/tests/test-runner.cs
        $(MCS) -debug -out:$@ $<
 
-CLEANFILES = $(CORECLR_TESTSI_CS) $(CORECLR_TESTSI_IL) *.dll *.exe *.mdb
+GCStressTests.exe: $(CORECLR_STRESSTEST_RUNNER_CS_SRC)
+       $(MCS) -out:$@ -debug -d:PROJECTK_BUILD $(CORECLR_STRESSTEST_RUNNER_CS_SRC)
+
+CLEANFILES = $(CORECLR_TESTSI_CS) $(CORECLR_TESTSI_IL) *.dll *.exe *.mdb $(CORECLR_STRESSTESTSI_CS) GCStressTests.exe
index 6cf3d6d16b77dd3570fb64f03b597ecf2c1a9205..5bb94f85636f845960c149ebd71b929499660aee 100644 (file)
@@ -10,7 +10,7 @@
   {
     "name": "coreclr", 
     "url": "git://github.com/mono/coreclr.git", 
-    "rev": "b9920ebea8d8d77b65d0ca10ffdb840f0cd36f06", 
+    "rev": "fdf8e6b91804b0a39ea9fc44070cc2cf514bd378",
     "remote-branch": "origin/mono", 
     "branch": "mono", 
     "directory": "coreclr"
index ca4685a7a9514451efdef20b0026760059c50efd..03cf5a7e9bff706fd86a6d46db1c4b2b69d692e1 100644 (file)
@@ -1396,6 +1396,9 @@ test-appdomain-unload: appdomain-loader.exe appdomain-tester.exe
        MONO_DEBUG_ASSEMBLY_UNLOAD=1 $(RUNTIME) -O=gshared appdomain-loader.exe > appdomain-loader.exe.3.stdout || exit 1;
        MONO_DEBUG_ASSEMBLY_UNLOAD=1 $(RUNTIME) appdomain-loader.exe > appdomain-loader.exe.4.stdout || exit 1;
 
+coreclr-gcstress:
+       $(MAKE) -C $(mono_build_root)/acceptance-tests coreclr-gcstress
+
 noinst_LTLIBRARIES = libtest.la
 
 AM_CPPFLAGS = $(GLIB_CFLAGS)