diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
4 files changed, 91 insertions, 19 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 9e7a986..3b2f537 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1221,11 +1221,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1221 | /// <summary> | 1221 | /// <summary> |
1222 | /// Delete this group from its scene. | 1222 | /// Delete this group from its scene. |
1223 | /// </summary> | 1223 | /// </summary> |
1224 | /// | 1224 | /// <remarks> |
1225 | /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood | 1225 | /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood |
1226 | /// up and all avatars receive notification of its removal. Removal of the scene object from database backup | 1226 | /// up and all avatars receive notification of its removal. Removal of the scene object from database backup |
1227 | /// must be handled by the caller. | 1227 | /// must be handled by the caller. |
1228 | /// | 1228 | /// </remarks> |
1229 | /// <param name="silent">If true then deletion is not broadcast to clients</param> | 1229 | /// <param name="silent">If true then deletion is not broadcast to clients</param> |
1230 | public void DeleteGroupFromScene(bool silent) | 1230 | public void DeleteGroupFromScene(bool silent) |
1231 | { | 1231 | { |
@@ -1234,10 +1234,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1234 | { | 1234 | { |
1235 | SceneObjectPart part = parts[i]; | 1235 | SceneObjectPart part = parts[i]; |
1236 | 1236 | ||
1237 | Scene.ForEachRootScenePresence(delegate(ScenePresence avatar) | 1237 | Scene.ForEachScenePresence(sp => |
1238 | { | 1238 | { |
1239 | if (avatar.ParentID == LocalId) | 1239 | if (!sp.IsChildAgent && sp.ParentID == LocalId) |
1240 | avatar.StandUp(); | 1240 | sp.StandUp(); |
1241 | 1241 | ||
1242 | if (!silent) | 1242 | if (!silent) |
1243 | { | 1243 | { |
@@ -1245,9 +1245,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1245 | if (part == m_rootPart) | 1245 | if (part == m_rootPart) |
1246 | { | 1246 | { |
1247 | if (!IsAttachment | 1247 | if (!IsAttachment |
1248 | || AttachedAvatar == avatar.ControllingClient.AgentId | 1248 | || AttachedAvatar == sp.UUID |
1249 | || !HasPrivateAttachmentPoint) | 1249 | || !HasPrivateAttachmentPoint) |
1250 | avatar.ControllingClient.SendKillObject(m_regionHandle, new List<uint> { part.LocalId }); | 1250 | sp.ControllingClient.SendKillObject(m_regionHandle, new List<uint> { part.LocalId }); |
1251 | } | 1251 | } |
1252 | } | 1252 | } |
1253 | }); | 1253 | }); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs index bde15cd..f738ff1 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs | |||
@@ -33,7 +33,9 @@ using NUnit.Framework; | |||
33 | using OpenMetaverse; | 33 | using OpenMetaverse; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.Communications; | 35 | using OpenSim.Framework.Communications; |
36 | using OpenSim.Region.CoreModules.Framework.EntityTransfer; | ||
36 | using OpenSim.Region.CoreModules.Framework.InventoryAccess; | 37 | using OpenSim.Region.CoreModules.Framework.InventoryAccess; |
38 | using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation; | ||
37 | using OpenSim.Region.CoreModules.World.Permissions; | 39 | using OpenSim.Region.CoreModules.World.Permissions; |
38 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
39 | using OpenSim.Services.Interfaces; | 41 | using OpenSim.Services.Interfaces; |
@@ -52,6 +54,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
52 | [TestFixture] | 54 | [TestFixture] |
53 | public class SceneObjectDeRezTests : OpenSimTestCase | 55 | public class SceneObjectDeRezTests : OpenSimTestCase |
54 | { | 56 | { |
57 | [TestFixtureSetUp] | ||
58 | public void FixtureInit() | ||
59 | { | ||
60 | // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread. | ||
61 | // This facility was added after the original async delete tests were written, so it may be possible now | ||
62 | // to not bother explicitly disabling their async (since everything will be running sync). | ||
63 | Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest; | ||
64 | } | ||
65 | |||
66 | [TestFixtureTearDown] | ||
67 | public void TearDown() | ||
68 | { | ||
69 | // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple | ||
70 | // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression | ||
71 | // tests really shouldn't). | ||
72 | Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod; | ||
73 | } | ||
74 | |||
55 | /// <summary> | 75 | /// <summary> |
56 | /// Test deleting an object from a scene. | 76 | /// Test deleting an object from a scene. |
57 | /// </summary> | 77 | /// </summary> |
@@ -63,7 +83,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
63 | UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); | 83 | UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); |
64 | 84 | ||
65 | TestScene scene = new SceneHelpers().SetupScene(); | 85 | TestScene scene = new SceneHelpers().SetupScene(); |
66 | SceneHelpers.SetupSceneModules(scene, new object[] { new PermissionsModule() }); | 86 | SceneHelpers.SetupSceneModules(scene, new PermissionsModule()); |
67 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; | 87 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; |
68 | 88 | ||
69 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. | 89 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. |
@@ -87,7 +107,59 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
87 | sogd.InventoryDeQueueAndDelete(); | 107 | sogd.InventoryDeQueueAndDelete(); |
88 | 108 | ||
89 | SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId); | 109 | SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId); |
90 | Assert.That(retrievedPart2, Is.Null); | 110 | Assert.That(retrievedPart2, Is.Null); |
111 | } | ||
112 | |||
113 | /// <summary> | ||
114 | /// Test that child and root agents correctly receive KillObject notifications. | ||
115 | /// </summary> | ||
116 | [Test] | ||
117 | public void TestDeRezSceneObjectToAgents() | ||
118 | { | ||
119 | TestHelpers.InMethod(); | ||
120 | // TestHelpers.EnableLogging(); | ||
121 | |||
122 | SceneHelpers sh = new SceneHelpers(); | ||
123 | TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); | ||
124 | TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1000, 999); | ||
125 | |||
126 | // We need this so that the creation of the root client for userB in sceneB can trigger the creation of a child client in sceneA | ||
127 | LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule(); | ||
128 | EntityTransferModule etmB = new EntityTransferModule(); | ||
129 | IConfigSource config = new IniConfigSource(); | ||
130 | IConfig modulesConfig = config.AddConfig("Modules"); | ||
131 | modulesConfig.Set("EntityTransferModule", etmB.Name); | ||
132 | modulesConfig.Set("SimulationServices", lscm.Name); | ||
133 | SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm); | ||
134 | SceneHelpers.SetupSceneModules(sceneB, config, etmB); | ||
135 | |||
136 | // We need this for derez | ||
137 | SceneHelpers.SetupSceneModules(sceneA, new PermissionsModule()); | ||
138 | |||
139 | UserAccount uaA = UserAccountHelpers.CreateUserWithInventory(sceneA, "Andy", "AAA", 0x1, ""); | ||
140 | UserAccount uaB = UserAccountHelpers.CreateUserWithInventory(sceneA, "Brian", "BBB", 0x2, ""); | ||
141 | |||
142 | TestClient clientA = (TestClient)SceneHelpers.AddScenePresence(sceneA, uaA).ControllingClient; | ||
143 | |||
144 | // This is the more long-winded route we have to take to get a child client created for userB in sceneA | ||
145 | // rather than just calling AddScenePresence() as for userA | ||
146 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(uaB); | ||
147 | TestClient clientB = new TestClient(acd, sceneB); | ||
148 | List<TestClient> childClientsB = new List<TestClient>(); | ||
149 | EntityTransferHelpers.SetUpInformClientOfNeighbour(clientB, childClientsB); | ||
150 | |||
151 | SceneHelpers.AddScenePresence(sceneB, clientB, acd); | ||
152 | |||
153 | SceneObjectGroup so = SceneHelpers.AddSceneObject(sceneA); | ||
154 | uint soLocalId = so.LocalId; | ||
155 | |||
156 | sceneA.DeleteSceneObject(so, false); | ||
157 | |||
158 | Assert.That(clientA.ReceivedKills.Count, Is.EqualTo(1)); | ||
159 | Assert.That(clientA.ReceivedKills[0], Is.EqualTo(soLocalId)); | ||
160 | |||
161 | Assert.That(childClientsB[0].ReceivedKills.Count, Is.EqualTo(1)); | ||
162 | Assert.That(childClientsB[0].ReceivedKills[0], Is.EqualTo(soLocalId)); | ||
91 | } | 163 | } |
92 | 164 | ||
93 | /// <summary> | 165 | /// <summary> |
@@ -106,7 +178,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
106 | UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); | 178 | UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); |
107 | 179 | ||
108 | TestScene scene = new SceneHelpers().SetupScene(); | 180 | TestScene scene = new SceneHelpers().SetupScene(); |
109 | SceneHelpers.SetupSceneModules(scene, new object[] { new PermissionsModule() }); | 181 | SceneHelpers.SetupSceneModules(scene, new PermissionsModule()); |
110 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; | 182 | IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; |
111 | 183 | ||
112 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. | 184 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs index 8775949..5a72239 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCrossingTests.cs | |||
@@ -95,11 +95,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
95 | SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB); | 95 | SceneHelpers.SetupSceneModules(sceneB, config, new CapabilitiesModule(), etmB); |
96 | 96 | ||
97 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); | 97 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); |
98 | TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); | 98 | TestClient tc = new TestClient(acd, sceneA); |
99 | List<TestClient> destinationTestClients = new List<TestClient>(); | 99 | List<TestClient> destinationTestClients = new List<TestClient>(); |
100 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | 100 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); |
101 | 101 | ||
102 | ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); | 102 | ScenePresence originalSp = SceneHelpers.AddScenePresence(sceneA, tc, acd); |
103 | originalSp.AbsolutePosition = new Vector3(128, 32, 10); | 103 | originalSp.AbsolutePosition = new Vector3(128, 32, 10); |
104 | 104 | ||
105 | // originalSp.Flying = true; | 105 | // originalSp.Flying = true; |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs index de4458d..297c66b 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs | |||
@@ -139,7 +139,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
139 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 139 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
140 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 140 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
141 | 141 | ||
142 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 142 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
143 | sp.AbsolutePosition = new Vector3(30, 31, 32); | 143 | sp.AbsolutePosition = new Vector3(30, 31, 32); |
144 | 144 | ||
145 | List<TestClient> destinationTestClients = new List<TestClient>(); | 145 | List<TestClient> destinationTestClients = new List<TestClient>(); |
@@ -224,7 +224,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
224 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 224 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
225 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 225 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
226 | 226 | ||
227 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 227 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
228 | sp.AbsolutePosition = preTeleportPosition; | 228 | sp.AbsolutePosition = preTeleportPosition; |
229 | 229 | ||
230 | // Make sceneB return false on query access | 230 | // Make sceneB return false on query access |
@@ -300,7 +300,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
300 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 300 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
301 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 301 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
302 | 302 | ||
303 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 303 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
304 | sp.AbsolutePosition = preTeleportPosition; | 304 | sp.AbsolutePosition = preTeleportPosition; |
305 | 305 | ||
306 | // Make sceneB refuse CreateAgent | 306 | // Make sceneB refuse CreateAgent |
@@ -389,7 +389,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
389 | Vector3 teleportPosition = new Vector3(10, 11, 12); | 389 | Vector3 teleportPosition = new Vector3(10, 11, 12); |
390 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 390 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
391 | 391 | ||
392 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId, sh.SceneManager); | 392 | ScenePresence sp = SceneHelpers.AddScenePresence(sceneA, userId); |
393 | sp.AbsolutePosition = preTeleportPosition; | 393 | sp.AbsolutePosition = preTeleportPosition; |
394 | 394 | ||
395 | sceneA.RequestTeleportLocation( | 395 | sceneA.RequestTeleportLocation( |
@@ -428,7 +428,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
428 | public void TestSameSimulatorNeighbouringRegions() | 428 | public void TestSameSimulatorNeighbouringRegions() |
429 | { | 429 | { |
430 | TestHelpers.InMethod(); | 430 | TestHelpers.InMethod(); |
431 | TestHelpers.EnableLogging(); | 431 | // TestHelpers.EnableLogging(); |
432 | 432 | ||
433 | UUID userId = TestHelpers.ParseTail(0x1); | 433 | UUID userId = TestHelpers.ParseTail(0x1); |
434 | 434 | ||
@@ -458,11 +458,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
458 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | 458 | Vector3 teleportLookAt = new Vector3(20, 21, 22); |
459 | 459 | ||
460 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); | 460 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(userId); |
461 | TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); | 461 | TestClient tc = new TestClient(acd, sceneA); |
462 | List<TestClient> destinationTestClients = new List<TestClient>(); | 462 | List<TestClient> destinationTestClients = new List<TestClient>(); |
463 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | 463 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); |
464 | 464 | ||
465 | ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); | 465 | ScenePresence beforeSceneASp = SceneHelpers.AddScenePresence(sceneA, tc, acd); |
466 | beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32); | 466 | beforeSceneASp.AbsolutePosition = new Vector3(30, 31, 32); |
467 | 467 | ||
468 | Assert.That(beforeSceneASp, Is.Not.Null); | 468 | Assert.That(beforeSceneASp, Is.Not.Null); |