2
0
Эх сурвалжийг харах

[tests] Add coreclr GC stress tests

Ludovic Henry 10 жил өмнө
parent
commit
45ba0107ea

+ 14 - 0
acceptance-tests/GCStressTests/AssemblyExtensions.cs

@@ -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 ();
+        }
+    }
+}

+ 41 - 0
acceptance-tests/GCStressTests/AssemblyLoadContext.cs

@@ -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));
+        }
+    }
+}

+ 43 - 21
acceptance-tests/Makefile.am

@@ -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

+ 1 - 1
acceptance-tests/SUBMODULES.json

@@ -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"

+ 3 - 0
mono/tests/Makefile.am

@@ -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)