diff options
author | Justin Clark-Casey (justincc) | 2012-04-27 00:58:54 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-04-27 00:58:54 +0100 |
commit | 07e62df5582e28675275b3f5143ec37e5697d283 (patch) | |
tree | 25227c120e0f1ae39d01bfd7dba4b66ef3be0d59 /OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs | |
parent | OSSL: Removed check for CanRunConsoleCommand() in osKickAvatar. (diff) | |
download | opensim-SC_OLD-07e62df5582e28675275b3f5143ec37e5697d283.zip opensim-SC_OLD-07e62df5582e28675275b3f5143ec37e5697d283.tar.gz opensim-SC_OLD-07e62df5582e28675275b3f5143ec37e5697d283.tar.bz2 opensim-SC_OLD-07e62df5582e28675275b3f5143ec37e5697d283.tar.xz |
Add regression test for teleporting an agent between separated regions on the same simulator.
This involves a large amount of change in test scene setup code to allow test scenes to share shared modules
SetupScene is now an instance method that requires an instantiation of SceneHelpers, though other SceneHelpers methods are still static
May split these out into separate classes in the future.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs | 177 |
1 files changed, 45 insertions, 132 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs index eb7bfbd..19542ff 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs | |||
@@ -61,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
61 | // Not strictly necessary since FriendsModule assumes it is the default (!) | 61 | // Not strictly necessary since FriendsModule assumes it is the default (!) |
62 | config.Configs["Modules"].Set("EntityTransferModule", etm.Name); | 62 | config.Configs["Modules"].Set("EntityTransferModule", etm.Name); |
63 | 63 | ||
64 | TestScene scene = SceneHelpers.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); | 64 | TestScene scene = new SceneHelpers().SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); |
65 | SceneHelpers.SetupSceneModules(scene, config, etm); | 65 | SceneHelpers.SetupSceneModules(scene, config, etm); |
66 | 66 | ||
67 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 67 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
@@ -83,145 +83,58 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
83 | // Assert.That(sp.Lookat, Is.EqualTo(teleportLookAt)); | 83 | // Assert.That(sp.Lookat, Is.EqualTo(teleportLookAt)); |
84 | } | 84 | } |
85 | 85 | ||
86 | /// <summary> | 86 | [Test] |
87 | /// Test a teleport between two regions that are not neighbours and do not share any neighbours in common. | 87 | public void TestSameSimulatorSeparatedRegionsTeleport() |
88 | /// </summary> | ||
89 | /// Does not yet do what is says on the tin. | ||
90 | /// Commenting for now | ||
91 | //[Test, LongRunning] | ||
92 | public void TestSimpleNotNeighboursTeleport() | ||
93 | { | 88 | { |
94 | TestHelpers.InMethod(); | 89 | TestHelpers.InMethod(); |
95 | ThreadRunResults results = new ThreadRunResults(); | 90 | // log4net.Config.XmlConfigurator.Configure(); |
96 | results.Result = false; | ||
97 | results.Message = "Test did not run"; | ||
98 | TestRunning testClass = new TestRunning(results); | ||
99 | 91 | ||
100 | Thread testThread = new Thread(testClass.run); | 92 | UUID userId = TestHelpers.ParseTail(0x1); |
101 | 93 | ||
102 | // Seems kind of redundant to start a thread and then join it, however.. We need to protect against | 94 | EntityTransferModule etm = new EntityTransferModule(); |
103 | // A thread abort exception in the simulator code. | 95 | LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule(); |
104 | testThread.Start(); | ||
105 | testThread.Join(); | ||
106 | 96 | ||
107 | Assert.That(testClass.results.Result, Is.EqualTo(true), testClass.results.Message); | 97 | IConfigSource config = new IniConfigSource(); |
108 | // Console.WriteLine("Beginning test {0}", MethodBase.GetCurrentMethod()); | 98 | config.AddConfig("Modules"); |
109 | } | 99 | // Not strictly necessary since FriendsModule assumes it is the default (!) |
100 | config.Configs["Modules"].Set("EntityTransferModule", etm.Name); | ||
101 | config.Configs["Modules"].Set("SimulationServices", lscm.Name); | ||
110 | 102 | ||
111 | [TearDown] | 103 | SceneHelpers sh = new SceneHelpers(); |
112 | public void TearDown() | 104 | TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); |
113 | { | 105 | TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1002, 1000); |
114 | try | ||
115 | { | ||
116 | if (MainServer.Instance != null) MainServer.Instance.Stop(); | ||
117 | } | ||
118 | catch (NullReferenceException) | ||
119 | { } | ||
120 | } | ||
121 | 106 | ||
122 | } | 107 | SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, etm, lscm); |
123 | 108 | ||
124 | public class ThreadRunResults | 109 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
125 | { | 110 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
126 | public bool Result = false; | ||
127 | public string Message = string.Empty; | ||
128 | } | ||
129 | 111 | ||
130 | public class TestRunning | 112 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
131 | { | 113 | sp.AbsolutePosition = new Vector3(30, 31, 32); |
132 | public ThreadRunResults results; | 114 | |
133 | public TestRunning(ThreadRunResults t) | 115 | // XXX: A very nasty hack to tell the client about the destination scene without having to crank the whole |
134 | { | 116 | // UDP stack (?) |
135 | results = t; | 117 | ((TestClient)sp.ControllingClient).TeleportTargetScene = sceneB; |
136 | } | 118 | |
137 | public void run(object o) | 119 | sceneA.RequestTeleportLocation( |
138 | { | 120 | sp.ControllingClient, |
139 | 121 | sceneB.RegionInfo.RegionHandle, | |
140 | //results.Result = true; | 122 | teleportPosition, |
141 | log4net.Config.XmlConfigurator.Configure(); | 123 | teleportLookAt, |
142 | 124 | (uint)TeleportFlags.ViaLocation); | |
143 | UUID sceneAId = UUID.Parse("00000000-0000-0000-0000-000000000100"); | 125 | |
144 | UUID sceneBId = UUID.Parse("00000000-0000-0000-0000-000000000200"); | 126 | Assert.That(sceneA.GetScenePresence(userId), Is.Null); |
145 | 127 | ||
146 | // shared module | 128 | ScenePresence sceneBSp = sceneB.GetScenePresence(userId); |
147 | ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); | 129 | Assert.That(sceneBSp, Is.Not.Null); |
148 | 130 | Assert.That(sceneBSp.Scene.RegionInfo.RegionName, Is.EqualTo(sceneB.RegionInfo.RegionName)); | |
149 | 131 | Assert.That(sceneBSp.AbsolutePosition, Is.EqualTo(teleportPosition)); | |
150 | Scene sceneB = SceneHelpers.SetupScene("sceneB", sceneBId, 1010, 1010); | 132 | |
151 | SceneHelpers.SetupSceneModules(sceneB, new IniConfigSource(), interregionComms); | 133 | // TODO: Add assertions to check correct circuit details in both scenes. |
152 | sceneB.RegisterRegionWithGrid(); | 134 | |
153 | 135 | // Lookat is sent to the client only - sp.Lookat does not yield the same thing (calculation from camera | |
154 | Scene sceneA = SceneHelpers.SetupScene("sceneA", sceneAId, 1000, 1000); | 136 | // position instead). |
155 | SceneHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms); | 137 | // Assert.That(sp.Lookat, Is.EqualTo(teleportLookAt)); |
156 | sceneA.RegisterRegionWithGrid(); | ||
157 | |||
158 | UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041"); | ||
159 | TestClient client = (TestClient)SceneHelpers.AddScenePresence(sceneA, agentId).ControllingClient; | ||
160 | |||
161 | ICapabilitiesModule sceneACapsModule = sceneA.RequestModuleInterface<ICapabilitiesModule>(); | ||
162 | |||
163 | results.Result = (sceneACapsModule.GetCapsPath(agentId) == client.CapsSeedUrl); | ||
164 | |||
165 | if (!results.Result) | ||
166 | { | ||
167 | results.Message = "Incorrect caps object path set up in sceneA"; | ||
168 | return; | ||
169 | } | ||
170 | |||
171 | /* | ||
172 | Assert.That( | ||
173 | sceneACapsModule.GetCapsPath(agentId), | ||
174 | Is.EqualTo(client.CapsSeedUrl), | ||
175 | "Incorrect caps object path set up in sceneA"); | ||
176 | */ | ||
177 | // FIXME: This is a hack to get the test working - really the normal OpenSim mechanisms should be used. | ||
178 | |||
179 | |||
180 | client.TeleportTargetScene = sceneB; | ||
181 | client.Teleport(sceneB.RegionInfo.RegionHandle, new Vector3(100, 100, 100), new Vector3(40, 40, 40)); | ||
182 | |||
183 | results.Result = (sceneB.GetScenePresence(agentId) != null); | ||
184 | if (!results.Result) | ||
185 | { | ||
186 | results.Message = "Client does not have an agent in sceneB"; | ||
187 | return; | ||
188 | } | ||
189 | |||
190 | //Assert.That(sceneB.GetScenePresence(agentId), Is.Not.Null, "Client does not have an agent in sceneB"); | ||
191 | |||
192 | //Assert.That(sceneA.GetScenePresence(agentId), Is.Null, "Client still had an agent in sceneA"); | ||
193 | |||
194 | results.Result = (sceneA.GetScenePresence(agentId) == null); | ||
195 | if (!results.Result) | ||
196 | { | ||
197 | results.Message = "Client still had an agent in sceneA"; | ||
198 | return; | ||
199 | } | ||
200 | |||
201 | ICapabilitiesModule sceneBCapsModule = sceneB.RequestModuleInterface<ICapabilitiesModule>(); | ||
202 | |||
203 | |||
204 | results.Result = ("http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + | ||
205 | "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/" == client.CapsSeedUrl); | ||
206 | if (!results.Result) | ||
207 | { | ||
208 | results.Message = "Incorrect caps object path set up in sceneB"; | ||
209 | return; | ||
210 | } | ||
211 | |||
212 | // Temporary assertion - caps url construction should at least be doable through a method. | ||
213 | /* | ||
214 | Assert.That( | ||
215 | "http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/", | ||
216 | Is.EqualTo(client.CapsSeedUrl), | ||
217 | "Incorrect caps object path set up in sceneB"); | ||
218 | */ | ||
219 | // This assertion will currently fail since we don't remove the caps paths when no longer needed | ||
220 | //Assert.That(sceneACapsModule.GetCapsPath(agentId), Is.Null, "sceneA still had a caps object path"); | ||
221 | |||
222 | // TODO: Check that more of everything is as it should be | ||
223 | |||
224 | // TODO: test what happens if we try to teleport to a region that doesn't exist | ||
225 | } | 138 | } |
226 | } | 139 | } |
227 | } | 140 | } \ No newline at end of file |