From 0007711eb5947d292f10325dd4af640ece79ea2d Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 1 Mar 2012 03:23:10 +0000 Subject: Use a fully stubbed out MockConsole for unit tests rather than inheriting from CommandConsole. This is so that the static MainConsole.Instance doesn't retain references to methods registered by scene and other modules to service commands. This prevents the scene from being garbage collected at the end of a test. This is not the final thing preventing GC - next up is the timer started by SimStatsReporter that holds a reference to Scene that prevents end of test gc. --- OpenSim/Tests/Common/Helpers/SceneHelpers.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Tests') diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs index aa904aa..8a69d7c 100644 --- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs +++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs @@ -113,7 +113,7 @@ namespace OpenSim.Tests.Common Console.WriteLine("Setting up test scene {0}", name); // We must set up a console otherwise setup of some modules may fail - MainConsole.Instance = new MockConsole("TEST PROMPT"); + MainConsole.Instance = new MockConsole(); RegionInfo regInfo = new RegionInfo(x, y, new IPEndPoint(IPAddress.Loopback, 9000), "127.0.0.1"); regInfo.RegionName = name; -- cgit v1.1 From f3678d217f7b1d69faf4aaeb0097348f3d7f91b6 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 7 Mar 2012 00:31:18 +0000 Subject: Stop individually deleting objects at the end of each ObjectTortureTest. We can now do this since the entire scene and all objects within it are now successfully gc'd at the end of these tests. This greatly improves the time taken to run each test (by reducing teardown time, not the time to actually do the test work that we're interested in). Slightly simplifies config read in Scene constructor to help facilitate this. --- OpenSim/Tests/Common/Helpers/SceneHelpers.cs | 2 +- OpenSim/Tests/Torture/NPCTortureTests.cs | 4 ++++ OpenSim/Tests/Torture/ObjectTortureTests.cs | 8 ++------ OpenSim/Tests/Torture/ScriptTortureTests.cs | 8 ++++++++ 4 files changed, 15 insertions(+), 7 deletions(-) (limited to 'OpenSim/Tests') diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs index 8a69d7c..7bf08ae 100644 --- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs +++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs @@ -136,7 +136,7 @@ namespace OpenSim.Tests.Common StartAuthenticationService(testScene); LocalInventoryServicesConnector inventoryService = StartInventoryService(testScene); StartGridService(testScene); - LocalUserAccountServicesConnector userAccountService = StartUserAccountService(testScene); + LocalUserAccountServicesConnector userAccountService = StartUserAccountService(testScene); LocalPresenceServicesConnector presenceService = StartPresenceService(testScene); inventoryService.PostInitialise(); diff --git a/OpenSim/Tests/Torture/NPCTortureTests.cs b/OpenSim/Tests/Torture/NPCTortureTests.cs index 8078d9d..65732db 100644 --- a/OpenSim/Tests/Torture/NPCTortureTests.cs +++ b/OpenSim/Tests/Torture/NPCTortureTests.cs @@ -75,6 +75,10 @@ namespace OpenSim.Tests.Torture [TestFixtureTearDown] public void TearDown() { + scene.Close(); + GC.Collect(); + GC.WaitForPendingFinalizers(); + // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple // threads. Possibly, later tests should be rewritten not to worry about such things. Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod; diff --git a/OpenSim/Tests/Torture/ObjectTortureTests.cs b/OpenSim/Tests/Torture/ObjectTortureTests.cs index e83186a..7e9946b 100644 --- a/OpenSim/Tests/Torture/ObjectTortureTests.cs +++ b/OpenSim/Tests/Torture/ObjectTortureTests.cs @@ -156,11 +156,6 @@ namespace OpenSim.Tests.Torture // objects will be clean up by the garbage collector before the next stress test is run. scene.Update(); - // Currently, we need to do this in order to garbage collect the scene objects ready for the next test run. - // However, what we really need to do is find out why the entire scene is not garbage collected in - // teardown. - scene.DeleteAllSceneObjects(); - Console.WriteLine( "Took {0}ms, {1}MB ({2} - {3}) to create {4} objects each containing {5} prim(s)", Math.Round(elapsed.TotalMilliseconds), @@ -170,7 +165,8 @@ namespace OpenSim.Tests.Torture objectsToAdd, primsInEachObject); - scene = null; + scene.Close(); +// scene = null; } } } \ No newline at end of file diff --git a/OpenSim/Tests/Torture/ScriptTortureTests.cs b/OpenSim/Tests/Torture/ScriptTortureTests.cs index d94bbde..87932cb 100644 --- a/OpenSim/Tests/Torture/ScriptTortureTests.cs +++ b/OpenSim/Tests/Torture/ScriptTortureTests.cs @@ -91,6 +91,14 @@ namespace OpenSim.Tests.Torture m_scene.StartScripts(); } + [TearDown] + public void TearDown() + { + m_scene.Close(); + GC.Collect(); + GC.WaitForPendingFinalizers(); + } + [Test] public void TestCompileAndStart100Scripts() { -- cgit v1.1 From 6bdea15ecf6fdaaf705704dddf9199b882675963 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Wed, 7 Mar 2012 01:11:37 +0000 Subject: minor: make NPC tests run in a given order, comment out log lines in mock region data plugins, null out scene in script and npc torture tests, add other doc comments to torture tests --- OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs | 22 +++++++++++----------- OpenSim/Tests/Torture/NPCTortureTests.cs | 7 ++++--- OpenSim/Tests/Torture/ObjectTortureTests.cs | 15 +++++++++------ OpenSim/Tests/Torture/ScriptTortureTests.cs | 1 + 4 files changed, 25 insertions(+), 20 deletions(-) (limited to 'OpenSim/Tests') diff --git a/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs b/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs index 79bb9c2..295e868 100644 --- a/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs +++ b/OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs @@ -177,9 +177,9 @@ namespace OpenSim.Data.Null // Therefore, we need to store parts rather than groups. foreach (SceneObjectPart prim in obj.Parts) { - m_log.DebugFormat( - "[MOCK REGION DATA PLUGIN]: Storing part {0} {1} in object {2} {3} in region {4}", - prim.Name, prim.UUID, obj.Name, obj.UUID, regionUUID); +// m_log.DebugFormat( +// "[MOCK REGION DATA PLUGIN]: Storing part {0} {1} in object {2} {3} in region {4}", +// prim.Name, prim.UUID, obj.Name, obj.UUID, regionUUID); m_sceneObjectParts[prim.UUID] = prim; } @@ -193,9 +193,9 @@ namespace OpenSim.Data.Null { if (part.ParentGroup.UUID == obj) { - m_log.DebugFormat( - "[MOCK REGION DATA PLUGIN]: Removing part {0} {1} as part of object {2} from {3}", - part.Name, part.UUID, obj, regionUUID); +// m_log.DebugFormat( +// "[MOCK REGION DATA PLUGIN]: Removing part {0} {1} as part of object {2} from {3}", +// part.Name, part.UUID, obj, regionUUID); m_sceneObjectParts.Remove(part.UUID); } } @@ -215,8 +215,8 @@ namespace OpenSim.Data.Null { if (prim.IsRoot) { - m_log.DebugFormat( - "[MOCK REGION DATA PLUGIN]: Loading root part {0} {1} in {2}", prim.Name, prim.UUID, regionUUID); +// m_log.DebugFormat( +// "[MOCK REGION DATA PLUGIN]: Loading root part {0} {1} in {2}", prim.Name, prim.UUID, regionUUID); objects[prim.UUID] = new SceneObjectGroup(prim); } } @@ -240,9 +240,9 @@ namespace OpenSim.Data.Null } else { - m_log.WarnFormat( - "[MOCK REGION DATA PLUGIN]: Database contains an orphan child prim {0} {1} in region {2} pointing to missing parent {3}. This prim will not be loaded.", - prim.Name, prim.UUID, regionUUID, prim.ParentUUID); +// m_log.WarnFormat( +// "[MOCK REGION DATA PLUGIN]: Database contains an orphan child prim {0} {1} in region {2} pointing to missing parent {3}. This prim will not be loaded.", +// prim.Name, prim.UUID, regionUUID, prim.ParentUUID); } } } diff --git a/OpenSim/Tests/Torture/NPCTortureTests.cs b/OpenSim/Tests/Torture/NPCTortureTests.cs index 65732db..0224505 100644 --- a/OpenSim/Tests/Torture/NPCTortureTests.cs +++ b/OpenSim/Tests/Torture/NPCTortureTests.cs @@ -76,6 +76,7 @@ namespace OpenSim.Tests.Torture public void TearDown() { scene.Close(); + scene = null; GC.Collect(); GC.WaitForPendingFinalizers(); @@ -102,7 +103,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void TestAddRemove100NPCs() + public void Test_0001_AddRemove100NPCs() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -111,7 +112,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void TestAddRemove1000NPCs() + public void Test_0002_AddRemove1000NPCs() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -120,7 +121,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void TestAddRemove2000NPCs() + public void Test_0003_AddRemove2000NPCs() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); diff --git a/OpenSim/Tests/Torture/ObjectTortureTests.cs b/OpenSim/Tests/Torture/ObjectTortureTests.cs index 7e9946b..978a308 100644 --- a/OpenSim/Tests/Torture/ObjectTortureTests.cs +++ b/OpenSim/Tests/Torture/ObjectTortureTests.cs @@ -66,7 +66,7 @@ namespace OpenSim.Tests.Torture // } [Test] - public void Test0001_10K_1PrimObjects() + public void Test_0001_10K_1PrimObjects() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -75,7 +75,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void Test0002_100K_1PrimObjects() + public void Test_0002_100K_1PrimObjects() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -84,7 +84,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void Test0003_200K_1PrimObjects() + public void Test_0003_200K_1PrimObjects() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -93,7 +93,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void Test0011_100_100PrimObjects() + public void Test_0011_100_100PrimObjects() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -102,7 +102,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void Test0012_1K_100PrimObjects() + public void Test_0012_1K_100PrimObjects() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -111,7 +111,7 @@ namespace OpenSim.Tests.Torture } [Test] - public void Test0013_2K_100PrimObjects() + public void Test_0013_2K_100PrimObjects() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); @@ -123,6 +123,9 @@ namespace OpenSim.Tests.Torture { UUID ownerId = new UUID("F0000000-0000-0000-0000-000000000000"); + // Using a local variable for scene, at least on mono 2.6.7, means that it's much more likely to be garbage + // collected when we teardown this test. If it's done in a member variable, even if that is subsequently + // nulled out, the garbage collect can be delayed. TestScene scene = SceneHelpers.SetupScene(); // Process process = Process.GetCurrentProcess(); diff --git a/OpenSim/Tests/Torture/ScriptTortureTests.cs b/OpenSim/Tests/Torture/ScriptTortureTests.cs index 87932cb..2ef55b3 100644 --- a/OpenSim/Tests/Torture/ScriptTortureTests.cs +++ b/OpenSim/Tests/Torture/ScriptTortureTests.cs @@ -95,6 +95,7 @@ namespace OpenSim.Tests.Torture public void TearDown() { m_scene.Close(); + m_scene = null; GC.Collect(); GC.WaitForPendingFinalizers(); } -- cgit v1.1