aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs')
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs154
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;
33using NUnit.Framework; 33using NUnit.Framework;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Framework.Communications;
37using OpenSim.Region.CoreModules.Avatar.Attachments; 36using OpenSim.Region.CoreModules.Avatar.Attachments;
38using OpenSim.Region.CoreModules.Avatar.AvatarFactory; 37using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
39using OpenSim.Region.CoreModules.Framework.InventoryAccess; 38using OpenSim.Region.CoreModules.Framework.InventoryAccess;
@@ -43,7 +42,6 @@ using OpenSim.Region.Framework.Interfaces;
43using OpenSim.Region.Framework.Scenes; 42using OpenSim.Region.Framework.Scenes;
44using OpenSim.Services.AvatarService; 43using OpenSim.Services.AvatarService;
45using OpenSim.Tests.Common; 44using OpenSim.Tests.Common;
46using OpenSim.Tests.Common.Mock;
47 45
48namespace OpenSim.Region.OptionalModules.World.NPC.Tests 46namespace 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