diff options
Diffstat (limited to 'OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs')
-rw-r--r-- | OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs | 154 |
1 files changed, 135 insertions, 19 deletions
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs index bf23040..77dfd40 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs | |||
@@ -33,7 +33,6 @@ using Nini.Config; | |||
33 | using NUnit.Framework; | 33 | using NUnit.Framework; |
34 | using OpenMetaverse; | 34 | using OpenMetaverse; |
35 | using OpenSim.Framework; | 35 | using OpenSim.Framework; |
36 | using OpenSim.Framework.Communications; | ||
37 | using OpenSim.Region.CoreModules.Avatar.Attachments; | 36 | using OpenSim.Region.CoreModules.Avatar.Attachments; |
38 | using OpenSim.Region.CoreModules.Avatar.AvatarFactory; | 37 | using OpenSim.Region.CoreModules.Avatar.AvatarFactory; |
39 | using OpenSim.Region.CoreModules.Framework.InventoryAccess; | 38 | using OpenSim.Region.CoreModules.Framework.InventoryAccess; |
@@ -43,7 +42,6 @@ using OpenSim.Region.Framework.Interfaces; | |||
43 | using OpenSim.Region.Framework.Scenes; | 42 | using OpenSim.Region.Framework.Scenes; |
44 | using OpenSim.Services.AvatarService; | 43 | using OpenSim.Services.AvatarService; |
45 | using OpenSim.Tests.Common; | 44 | using OpenSim.Tests.Common; |
46 | using OpenSim.Tests.Common.Mock; | ||
47 | 45 | ||
48 | namespace OpenSim.Region.OptionalModules.World.NPC.Tests | 46 | namespace OpenSim.Region.OptionalModules.World.NPC.Tests |
49 | { | 47 | { |
@@ -71,11 +69,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
71 | Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod; | 69 | Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod; |
72 | } | 70 | } |
73 | 71 | ||
74 | [SetUp] | 72 | public void SetUpScene() |
75 | public void Init() | ||
76 | { | 73 | { |
77 | base.SetUp(); | 74 | SetUpScene(256, 256); |
75 | } | ||
78 | 76 | ||
77 | public void SetUpScene(uint sizeX, uint sizeY) | ||
78 | { | ||
79 | IConfigSource config = new IniConfigSource(); | 79 | IConfigSource config = new IniConfigSource(); |
80 | config.AddConfig("NPC"); | 80 | config.AddConfig("NPC"); |
81 | config.Configs["NPC"].Set("Enabled", "true"); | 81 | config.Configs["NPC"].Set("Enabled", "true"); |
@@ -87,7 +87,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
87 | m_attMod = new AttachmentsModule(); | 87 | m_attMod = new AttachmentsModule(); |
88 | m_npcMod = new NPCModule(); | 88 | m_npcMod = new NPCModule(); |
89 | 89 | ||
90 | m_scene = new SceneHelpers().SetupScene(); | 90 | m_scene = new SceneHelpers().SetupScene("test scene", UUID.Random(), 1000, 1000, sizeX, sizeY, config); |
91 | SceneHelpers.SetupSceneModules(m_scene, config, m_afMod, m_umMod, m_attMod, m_npcMod, new BasicInventoryAccessModule()); | 91 | SceneHelpers.SetupSceneModules(m_scene, config, m_afMod, m_umMod, m_attMod, m_npcMod, new BasicInventoryAccessModule()); |
92 | } | 92 | } |
93 | 93 | ||
@@ -97,6 +97,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
97 | TestHelpers.InMethod(); | 97 | TestHelpers.InMethod(); |
98 | // log4net.Config.XmlConfigurator.Configure(); | 98 | // log4net.Config.XmlConfigurator.Configure(); |
99 | 99 | ||
100 | SetUpScene(); | ||
101 | |||
100 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | 102 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
101 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | 103 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); |
102 | 104 | ||
@@ -110,7 +112,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
110 | // ScenePresence.SendInitialData() to reset our entire appearance. | 112 | // ScenePresence.SendInitialData() to reset our entire appearance. |
111 | m_scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId)); | 113 | m_scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId)); |
112 | 114 | ||
113 | m_afMod.SetAppearance(sp, originalTe, null); | 115 | m_afMod.SetAppearance(sp, originalTe, null, null); |
114 | 116 | ||
115 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); | 117 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); |
116 | 118 | ||
@@ -133,6 +135,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
133 | TestHelpers.InMethod(); | 135 | TestHelpers.InMethod(); |
134 | // log4net.Config.XmlConfigurator.Configure(); | 136 | // log4net.Config.XmlConfigurator.Configure(); |
135 | 137 | ||
138 | SetUpScene(); | ||
139 | |||
136 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | 140 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
137 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | 141 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); |
138 | 142 | ||
@@ -155,7 +159,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
155 | public void TestCreateWithAttachments() | 159 | public void TestCreateWithAttachments() |
156 | { | 160 | { |
157 | TestHelpers.InMethod(); | 161 | TestHelpers.InMethod(); |
158 | // log4net.Config.XmlConfigurator.Configure(); | 162 | // TestHelpers.EnableLogging(); |
163 | |||
164 | SetUpScene(); | ||
159 | 165 | ||
160 | UUID userId = TestHelpers.ParseTail(0x1); | 166 | UUID userId = TestHelpers.ParseTail(0x1); |
161 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); | 167 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); |
@@ -191,11 +197,66 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
191 | } | 197 | } |
192 | 198 | ||
193 | [Test] | 199 | [Test] |
200 | public void TestCreateWithMultiAttachments() | ||
201 | { | ||
202 | TestHelpers.InMethod(); | ||
203 | // TestHelpers.EnableLogging(); | ||
204 | |||
205 | SetUpScene(); | ||
206 | // m_attMod.DebugLevel = 1; | ||
207 | |||
208 | UUID userId = TestHelpers.ParseTail(0x1); | ||
209 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); | ||
210 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); | ||
211 | |||
212 | InventoryItemBase att1Item | ||
213 | = UserInventoryHelpers.CreateInventoryItem( | ||
214 | m_scene, "att1", TestHelpers.ParseTail(0x2), TestHelpers.ParseTail(0x3), sp.UUID, InventoryType.Object); | ||
215 | InventoryItemBase att2Item | ||
216 | = UserInventoryHelpers.CreateInventoryItem( | ||
217 | m_scene, "att2", TestHelpers.ParseTail(0x12), TestHelpers.ParseTail(0x13), sp.UUID, InventoryType.Object); | ||
218 | |||
219 | m_attMod.RezSingleAttachmentFromInventory(sp, att1Item.ID, (uint)AttachmentPoint.Chest); | ||
220 | m_attMod.RezSingleAttachmentFromInventory(sp, att2Item.ID, (uint)AttachmentPoint.Chest | 0x80); | ||
221 | |||
222 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, sp.Appearance); | ||
223 | |||
224 | ScenePresence npc = m_scene.GetScenePresence(npcId); | ||
225 | |||
226 | // Check scene presence status | ||
227 | Assert.That(npc.HasAttachments(), Is.True); | ||
228 | List<SceneObjectGroup> attachments = npc.GetAttachments(); | ||
229 | Assert.That(attachments.Count, Is.EqualTo(2)); | ||
230 | |||
231 | // Just for now, we won't test the name since this is (wrongly) the asset part name rather than the item | ||
232 | // name. TODO: Do need to fix ultimately since the item may be renamed before being passed on to an NPC. | ||
233 | // Assert.That(attSo.Name, Is.EqualTo(attName)); | ||
234 | |||
235 | TestAttachedObject(attachments[0], AttachmentPoint.Chest, npc.UUID); | ||
236 | TestAttachedObject(attachments[1], AttachmentPoint.Chest, npc.UUID); | ||
237 | |||
238 | // Attached objects on the same point must have different FromItemIDs to be shown to other avatars, at least | ||
239 | // on Singularity 1.8.5. Otherwise, only one (the first ObjectUpdate sent) appears. | ||
240 | Assert.AreNotEqual(attachments[0].FromItemID, attachments[1].FromItemID); | ||
241 | } | ||
242 | |||
243 | private void TestAttachedObject(SceneObjectGroup attSo, AttachmentPoint attPoint, UUID ownerId) | ||
244 | { | ||
245 | Assert.That(attSo.AttachmentPoint, Is.EqualTo((byte)attPoint)); | ||
246 | Assert.That(attSo.IsAttachment); | ||
247 | Assert.That(attSo.UsesPhysics, Is.False); | ||
248 | Assert.That(attSo.IsTemporary, Is.False); | ||
249 | Assert.That(attSo.OwnerID, Is.EqualTo(ownerId)); | ||
250 | } | ||
251 | |||
252 | [Test] | ||
194 | public void TestLoadAppearance() | 253 | public void TestLoadAppearance() |
195 | { | 254 | { |
196 | TestHelpers.InMethod(); | 255 | TestHelpers.InMethod(); |
197 | // log4net.Config.XmlConfigurator.Configure(); | 256 | // log4net.Config.XmlConfigurator.Configure(); |
198 | 257 | ||
258 | SetUpScene(); | ||
259 | |||
199 | UUID userId = TestHelpers.ParseTail(0x1); | 260 | UUID userId = TestHelpers.ParseTail(0x1); |
200 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); | 261 | UserAccountHelpers.CreateUserWithInventory(m_scene, userId); |
201 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); | 262 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); |
@@ -237,7 +298,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
237 | public void TestMove() | 298 | public void TestMove() |
238 | { | 299 | { |
239 | TestHelpers.InMethod(); | 300 | TestHelpers.InMethod(); |
240 | // log4net.Config.XmlConfigurator.Configure(); | 301 | // TestHelpers.EnableLogging(); |
302 | |||
303 | SetUpScene(); | ||
241 | 304 | ||
242 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | 305 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
243 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | 306 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); |
@@ -303,11 +366,64 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
303 | } | 366 | } |
304 | 367 | ||
305 | [Test] | 368 | [Test] |
369 | public void TestMoveInVarRegion() | ||
370 | { | ||
371 | TestHelpers.InMethod(); | ||
372 | // TestHelpers.EnableLogging(); | ||
373 | |||
374 | SetUpScene(512, 512); | ||
375 | |||
376 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | ||
377 | // ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId); | ||
378 | |||
379 | Vector3 startPos = new Vector3(128, 246, 30); | ||
380 | UUID npcId = m_npcMod.CreateNPC("John", "Smith", startPos, UUID.Zero, true, m_scene, sp.Appearance); | ||
381 | |||
382 | ScenePresence npc = m_scene.GetScenePresence(npcId); | ||
383 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | ||
384 | |||
385 | // For now, we'll make the scene presence fly to simplify this test, but this needs to change. | ||
386 | npc.Flying = true; | ||
387 | |||
388 | m_scene.Update(1); | ||
389 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | ||
390 | |||
391 | Vector3 targetPos = startPos + new Vector3(0, 20, 0); | ||
392 | m_npcMod.MoveToTarget(npc.UUID, m_scene, targetPos, false, false, false); | ||
393 | |||
394 | Assert.That(npc.AbsolutePosition, Is.EqualTo(startPos)); | ||
395 | //Assert.That(npc.Rotation, Is.EqualTo(new Quaternion(0, 0, 0.7071068f, 0.7071068f))); | ||
396 | Assert.That( | ||
397 | npc.Rotation, new QuaternionToleranceConstraint(new Quaternion(0, 0, 0.7071068f, 0.7071068f), 0.000001)); | ||
398 | |||
399 | m_scene.Update(1); | ||
400 | |||
401 | // We should really check the exact figure. | ||
402 | Assert.That(npc.AbsolutePosition.X, Is.EqualTo(startPos.X)); | ||
403 | Assert.That(npc.AbsolutePosition.Y, Is.GreaterThan(startPos.Y)); | ||
404 | Assert.That(npc.AbsolutePosition.Z, Is.EqualTo(startPos.Z)); | ||
405 | Assert.That(npc.AbsolutePosition.Z, Is.LessThan(targetPos.X)); | ||
406 | |||
407 | for (int i = 0; i < 20; i++) | ||
408 | { | ||
409 | m_scene.Update(1); | ||
410 | // Console.WriteLine("pos: {0}", npc.AbsolutePosition); | ||
411 | } | ||
412 | |||
413 | double distanceToTarget = Util.GetDistanceTo(npc.AbsolutePosition, targetPos); | ||
414 | Assert.That(distanceToTarget, Is.LessThan(1), "NPC not within 1 unit of target position on first move"); | ||
415 | Assert.That(npc.AbsolutePosition, Is.EqualTo(targetPos)); | ||
416 | Assert.That(npc.AgentControlFlags, Is.EqualTo((uint)AgentManager.ControlFlags.NONE)); | ||
417 | } | ||
418 | |||
419 | [Test] | ||
306 | public void TestSitAndStandWithSitTarget() | 420 | public void TestSitAndStandWithSitTarget() |
307 | { | 421 | { |
308 | TestHelpers.InMethod(); | 422 | TestHelpers.InMethod(); |
309 | // log4net.Config.XmlConfigurator.Configure(); | 423 | // log4net.Config.XmlConfigurator.Configure(); |
310 | 424 | ||
425 | SetUpScene(); | ||
426 | |||
311 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | 427 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
312 | 428 | ||
313 | Vector3 startPos = new Vector3(128, 128, 30); | 429 | Vector3 startPos = new Vector3(128, 128, 30); |
@@ -321,9 +437,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
321 | 437 | ||
322 | Assert.That(part.SitTargetAvatar, Is.EqualTo(npcId)); | 438 | Assert.That(part.SitTargetAvatar, Is.EqualTo(npcId)); |
323 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); | 439 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); |
324 | Assert.That( | 440 | // Assert.That( |
325 | npc.AbsolutePosition, | 441 | // npc.AbsolutePosition, |
326 | Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT)); | 442 | // Is.EqualTo(part.AbsolutePosition + part.SitTargetPosition + ScenePresence.SIT_TARGET_ADJUSTMENT)); |
327 | 443 | ||
328 | m_npcMod.Stand(npc.UUID, m_scene); | 444 | m_npcMod.Stand(npc.UUID, m_scene); |
329 | 445 | ||
@@ -335,7 +451,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
335 | public void TestSitAndStandWithNoSitTarget() | 451 | public void TestSitAndStandWithNoSitTarget() |
336 | { | 452 | { |
337 | TestHelpers.InMethod(); | 453 | TestHelpers.InMethod(); |
338 | // log4net.Config.XmlConfigurator.Configure(); | 454 | // TestHelpers.EnableLogging(); |
455 | |||
456 | SetUpScene(); | ||
339 | 457 | ||
340 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | 458 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); |
341 | 459 | ||
@@ -353,13 +471,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
353 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); | 471 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); |
354 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); | 472 | Assert.That(npc.ParentID, Is.EqualTo(part.LocalId)); |
355 | 473 | ||
356 | // FIXME: This is different for live avatars - z position is adjusted. This is half the height of the | 474 | // We should really be using the NPC size but this would mean preserving the physics actor since it is |
357 | // default avatar. | 475 | // removed on sit. |
358 | // Curiously, Vector3.ToString() will not display the last two places of the float. For example, | ||
359 | // printing out npc.AbsolutePosition will give <0, 0, 0.8454993> not <0, 0, 0.845499337> | ||
360 | Assert.That( | 476 | Assert.That( |
361 | npc.AbsolutePosition, | 477 | npc.AbsolutePosition, |
362 | Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, 0.845499337f))); | 478 | Is.EqualTo(part.AbsolutePosition + new Vector3(0, 0, sp.PhysicsActor.Size.Z / 2))); |
363 | 479 | ||
364 | m_npcMod.Stand(npc.UUID, m_scene); | 480 | m_npcMod.Stand(npc.UUID, m_scene); |
365 | 481 | ||
@@ -367,4 +483,4 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests | |||
367 | Assert.That(npc.ParentID, Is.EqualTo(0)); | 483 | Assert.That(npc.ParentID, Is.EqualTo(0)); |
368 | } | 484 | } |
369 | } | 485 | } |
370 | } | 486 | } \ No newline at end of file |