public void TestGetChildPartPosition() { TestHelpers.InMethod(); Vector3 rootPartPosition = new Vector3(10, 20, 30); Vector3 childOffsetPosition = new Vector3(2, 3, 4); SceneObjectGroup so = SceneHelpers.CreateSceneObject(2, m_ownerId, "obj1", 0x10); so.AbsolutePosition = rootPartPosition; so.Parts[1].OffsetPosition = childOffsetPosition; m_scene.AddNewSceneObject(so, false); // Calculate child absolute position. Vector3 childPosition = new Vector3(rootPartPosition + childOffsetPosition); SceneObjectPart childPart = so.Parts[1]; Assert.That(childPart.AbsolutePosition, Is.EqualTo(childPosition)); Assert.That(childPart.GroupPosition, Is.EqualTo(rootPartPosition)); Assert.That(childPart.GetWorldPosition(), Is.EqualTo(childPosition)); Assert.That(childPart.RelativePosition, Is.EqualTo(childOffsetPosition)); Assert.That(childPart.OffsetPosition, Is.EqualTo(childOffsetPosition)); }
public void TestLlGiveInventoryO2DifferentAvatarNoMod() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); UUID user1Id = TestHelpers.ParseTail(0x1); UUID user2Id = TestHelpers.ParseTail(0x2); string inventoryItemName = "item1"; SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10); m_scene.AddSceneObject(so1); LSL_Api api = new LSL_Api(); api.Initialize(m_engine, so1.RootPart, null); // Create an object embedded inside the first UUID itemId = TestHelpers.ParseTail(0x20); TaskInventoryItem tii = TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, so1.RootPart, inventoryItemName, itemId, user1Id); tii.NextPermissions &= ~((uint)PermissionMask.Modify); UserAccountHelpers.CreateUserWithInventory(m_scene, user2Id); api.llGiveInventory(user2Id.ToString(), inventoryItemName); InventoryItemBase receivedItem = UserInventoryHelpers.GetInventoryItem( m_scene.InventoryService, user2Id, string.Format("Objects/{0}", inventoryItemName)); Assert.IsNotNull(receivedItem); Assert.AreEqual(0, receivedItem.CurrentPermissions & (uint)PermissionMask.Modify); }
public void TestNotecardAsset() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); UUID ownerId = TestHelpers.ParseTail(0x10); UUID soAssetId = TestHelpers.ParseTail(0x20); UUID ncAssetId = TestHelpers.ParseTail(0x30); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, ownerId); AssetBase soAsset = AssetHelpers.CreateAsset(soAssetId, so); m_assetService.Store(soAsset); AssetBase ncAsset = AssetHelpers.CreateNotecardAsset(ncAssetId, soAssetId.ToString()); m_assetService.Store(ncAsset); IDictionary <UUID, AssetType> foundAssetUuids = new Dictionary <UUID, AssetType>(); m_uuidGatherer.GatherAssetUuids(ncAssetId, AssetType.Notecard, foundAssetUuids); // We count the uuid as gathered even if the asset itself is corrupt. Assert.That(foundAssetUuids.Count, Is.EqualTo(2)); Assert.That(foundAssetUuids.ContainsKey(ncAssetId)); Assert.That(foundAssetUuids.ContainsKey(soAssetId)); }
public void TestSerialDeserial() { TestHelpers.InMethod(); Scene scene = new SceneHelpers().SetupScene(); int partsToTestCount = 3; SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, TestHelpers.ParseTail(0x1), "obj1", 0x10); SceneObjectPart[] parts = so.Parts; so.Name = "obj1"; so.Description = "xpto"; string xml = SceneObjectSerializer.ToXml2Format(so); Assert.That(!string.IsNullOrEmpty(xml), "SOG serialization resulted in empty or null string"); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlNodeList nodes = doc.GetElementsByTagName("SceneObjectPart"); Assert.That(nodes.Count, Is.EqualTo(3), "SOG serialization resulted in wrong number of SOPs"); SceneObjectGroup so2 = SceneObjectSerializer.FromXml2Format(xml); Assert.IsNotNull(so2, "SOG deserialization resulted in null object"); Assert.That(so2.Name == so.Name, "Name of deserialized object does not match original name"); Assert.That(so2.Description == so.Description, "Description of deserialized object does not match original name"); }
public void TestCompileAndStartScript() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); UUID userId = TestHelpers.ParseTail(0x1); // UUID objectId = TestHelpers.ParseTail(0x2); // UUID itemId = TestHelpers.ParseTail(0x3); string itemName = "TestStartScript() Item"; SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "TestStartScriptPart_", 0x100); m_scene.AddNewSceneObject(so, true); InventoryItemBase itemTemplate = new InventoryItemBase(); // itemTemplate.ID = itemId; itemTemplate.Name = itemName; itemTemplate.Folder = so.UUID; itemTemplate.InvType = (int)InventoryType.LSL; m_scene.EventManager.OnChatFromWorld += OnChatFromWorld; m_scene.RezNewScript(userId, itemTemplate); m_chatEvent.WaitOne(60000); Assert.That(m_osChatMessageReceived, Is.Not.Null, "No chat message received in TestStartScript()"); Assert.That(m_osChatMessageReceived.Message, Is.EqualTo("Script running")); }
public void TestOsNpcCreateUsingAppearanceFromNotecard() { TestHelpers.InMethod(); // Store an avatar with a different height from default in a notecard. UUID userId = TestHelpers.ParseTail(0x1); float newHeight = 1.9f; ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); sp.Appearance.AvatarHeight = newHeight; SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, 0x10); SceneObjectPart part = so.RootPart; m_scene.AddSceneObject(so); OSSL_Api osslApi = new OSSL_Api(); osslApi.Initialize(m_engine, part, null); string notecardName = "appearanceNc"; osslApi.osOwnerSaveAppearance(notecardName); // Try creating a bot using the appearance in the notecard. string npcRaw = osslApi.osNpcCreate("Jane", "Doe", new LSL_Types.Vector3(128, 128, 128), notecardName); Assert.That(npcRaw, Is.Not.Null); UUID npcId = new UUID(npcRaw); ScenePresence npc = m_scene.GetScenePresence(npcId); Assert.That(npc, Is.Not.Null); Assert.That(npc.Appearance.AvatarHeight, Is.EqualTo(newHeight)); }
public void TestOsNpcCreateNotExistingNotecard() { TestHelpers.InMethod(); UUID userId = TestHelpers.ParseTail(0x1); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, 0x10); m_scene.AddSceneObject(so); OSSL_Api osslApi = new OSSL_Api(); osslApi.Initialize(m_engine, so.RootPart, null); bool gotExpectedException = false; try { osslApi.osNpcCreate("Jane", "Doe", new LSL_Types.Vector3(128, 128, 128), "not existing notecard name"); } catch (ScriptException) { gotExpectedException = true; } Assert.That(gotExpectedException, Is.True); }
public void TestOsNpcRemoveUnowned() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); // Store an avatar with a different height from default in a notecard. UUID userId = TestHelpers.ParseTail(0x1); float newHeight = 1.9f; ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); sp.Appearance.AvatarHeight = newHeight; SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, 0x10); SceneObjectPart part = so.RootPart; m_scene.AddSceneObject(so); OSSL_Api osslApi = new OSSL_Api(); osslApi.Initialize(m_engine, part, null, null); string notecardName = "appearanceNc"; osslApi.osOwnerSaveAppearance(notecardName); string npcRaw = osslApi.osNpcCreate( "Jane", "Doe", new LSL_Types.Vector3(128, 128, 128), notecardName, ScriptBaseClass.OS_NPC_NOT_OWNED); osslApi.osNpcRemove(npcRaw); UUID npcId = new UUID(npcRaw); ScenePresence npc = m_scene.GetScenePresence(npcId); Assert.That(npc, Is.Null); }
public void TestTaskItems() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); UUID ownerId = TestHelpers.ParseTail(0x10); SceneObjectGroup soL0 = SceneHelpers.CreateSceneObject(1, ownerId, "l0", 0x20); SceneObjectGroup soL1 = SceneHelpers.CreateSceneObject(1, ownerId, "l1", 0x21); SceneObjectGroup soL2 = SceneHelpers.CreateSceneObject(1, ownerId, "l2", 0x22); TaskInventoryHelpers.AddScript( m_assetService, soL2.RootPart, TestHelpers.ParseTail(0x33), TestHelpers.ParseTail(0x43), "l3-script", "gibberish"); TaskInventoryHelpers.AddSceneObject( m_assetService, soL1.RootPart, "l2-item", TestHelpers.ParseTail(0x32), soL2, TestHelpers.ParseTail(0x42)); TaskInventoryHelpers.AddSceneObject( m_assetService, soL0.RootPart, "l1-item", TestHelpers.ParseTail(0x31), soL1, TestHelpers.ParseTail(0x41)); m_uuidGatherer.AddForInspection(soL0); m_uuidGatherer.GatherAll(); // foreach (UUID key in m_uuidGatherer.GatheredUuids.Keys) // System.Console.WriteLine("key : {0}", key); // We expect to see the default prim texture and the assets of the contained task items Assert.That(m_uuidGatherer.GatheredUuids.Count, Is.EqualTo(4)); Assert.That(m_uuidGatherer.GatheredUuids.ContainsKey(new UUID(Constants.DefaultTexture))); Assert.That(m_uuidGatherer.GatheredUuids.ContainsKey(TestHelpers.ParseTail(0x41))); Assert.That(m_uuidGatherer.GatheredUuids.ContainsKey(TestHelpers.ParseTail(0x42))); Assert.That(m_uuidGatherer.GatheredUuids.ContainsKey(TestHelpers.ParseTail(0x43))); }
public void TestMoveTaskInventoryItem() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); Scene scene = new SceneHelpers().SetupScene(); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID); SceneObjectPart sop1 = sog1.RootPart; TaskInventoryItem sopItem1 = TaskInventoryHelpers.AddNotecard( scene.AssetService, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!"); InventoryFolderBase folder = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0]; // Perform test string message; scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID, out message); InventoryItemBase ncUserItem = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem"); Assert.That(ncUserItem, Is.Not.Null, "Objects/ncItem was not found"); }
public void TestRezObjectFromInventoryItem() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); Scene scene = new SceneHelpers().SetupScene(); UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID); SceneObjectPart sop1 = sog1.RootPart; // Create an object embedded inside the first UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000"); TaskInventoryItem taskSceneObjectItem = TaskInventoryHelpers.AddSceneObject(scene.AssetService, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID); scene.AddSceneObject(sog1); Vector3 rezPos = new Vector3(10, 10, 10); Quaternion rezRot = new Quaternion(0.5f, 0.5f, 0.5f, 0.5f); Vector3 rezVel = new Vector3(2, 2, 2); scene.RezObject(sop1, taskSceneObjectItem, rezPos, rezRot, rezVel, 0); SceneObjectGroup rezzedObject = scene.GetSceneObjectGroup("tso"); Assert.That(rezzedObject, Is.Not.Null); Assert.That(rezzedObject.AbsolutePosition, Is.EqualTo(rezPos)); // Velocity doesn't get applied, probably because there is no physics in tests (yet) // Assert.That(rezzedObject.Velocity, Is.EqualTo(rezVel)); Assert.That(rezzedObject.Velocity, Is.EqualTo(Vector3.Zero)); // Confusingly, this isn't the rezzedObject.Rotation Assert.That(rezzedObject.RootPart.RotationOffset, Is.EqualTo(rezRot)); }
public void Init() { TestHelpers.InMethod(); scene = SceneHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); scene2 = SceneHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000); scene3 = SceneHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000); ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); interregionComms.Initialise(new IniConfigSource()); interregionComms.PostInitialise(); SceneHelpers.SetupSceneModules(scene, new IniConfigSource(), interregionComms); SceneHelpers.SetupSceneModules(scene2, new IniConfigSource(), interregionComms); SceneHelpers.SetupSceneModules(scene3, new IniConfigSource(), interregionComms); agent1 = UUID.Random(); agent2 = UUID.Random(); agent3 = UUID.Random(); random = new Random(); sog1 = SceneHelpers.CreateSceneObject(1, agent1); scene.AddSceneObject(sog1); sog2 = SceneHelpers.CreateSceneObject(1, agent1); scene.AddSceneObject(sog2); sog3 = SceneHelpers.CreateSceneObject(1, agent1); scene.AddSceneObject(sog3); region1 = scene.RegionInfo.RegionHandle; region2 = scene2.RegionInfo.RegionHandle; region3 = scene3.RegionInfo.RegionHandle; }
public void TestAddOwnerObject() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); IPrimCounts pc = m_lo.PrimCounts; SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01); m_scene.AddNewSceneObject(sog, false); Assert.That(pc.Owner, Is.EqualTo(3)); Assert.That(pc.Group, Is.EqualTo(0)); Assert.That(pc.Others, Is.EqualTo(0)); Assert.That(pc.Total, Is.EqualTo(3)); Assert.That(pc.Selected, Is.EqualTo(0)); Assert.That(pc.Users[m_userId], Is.EqualTo(3)); Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pc.Simulator, Is.EqualTo(3)); // Add a second object and retest SceneObjectGroup sog2 = SceneHelpers.CreateSceneObject(2, m_userId, "b", 0x10); m_scene.AddNewSceneObject(sog2, false); Assert.That(pc.Owner, Is.EqualTo(5)); Assert.That(pc.Group, Is.EqualTo(0)); Assert.That(pc.Others, Is.EqualTo(0)); Assert.That(pc.Total, Is.EqualTo(5)); Assert.That(pc.Selected, Is.EqualTo(0)); Assert.That(pc.Users[m_userId], Is.EqualTo(5)); Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pc.Simulator, Is.EqualTo(5)); }
public void TestAddScript() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); UUID userId = TestHelpers.ParseTail(0x1); // UUID itemId = TestHelpers.ParseTail(0x2); string itemName = "Test Script Item"; Scene scene = new SceneHelpers().SetupScene(); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId); scene.AddNewSceneObject(so, true); InventoryItemBase itemTemplate = new InventoryItemBase(); itemTemplate.Name = itemName; itemTemplate.Folder = so.UUID; itemTemplate.InvType = (int)InventoryType.LSL; SceneObjectPart partWhereScriptAdded = scene.RezNewScript(userId, itemTemplate); Assert.That(partWhereScriptAdded, Is.Not.Null); IEntityInventory primInventory = partWhereScriptAdded.Inventory; Assert.That(primInventory.GetInventoryList().Count, Is.EqualTo(1)); Assert.That(primInventory.ContainsScripts(), Is.True); IList <TaskInventoryItem> primItems = primInventory.GetInventoryItems(itemName); Assert.That(primItems.Count, Is.EqualTo(1)); }
public void TestAddSceneObject() { TestHelpers.InMethod(); Scene scene = new SceneHelpers().SetupScene(); int partsToTestCount = 3; SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, TestHelpers.ParseTail(0x1), "obj1", 0x10); SceneObjectPart[] parts = so.Parts; Assert.That(scene.AddNewSceneObject(so, false), Is.True); SceneObjectGroup retrievedSo = scene.GetSceneObjectGroup(so.UUID); SceneObjectPart[] retrievedParts = retrievedSo.Parts; //m_log.Debug("retrievedPart : {0}", retrievedPart); // If the parts have the same UUID then we will consider them as one and the same Assert.That(retrievedSo.PrimCount, Is.EqualTo(partsToTestCount)); for (int i = 0; i < partsToTestCount; i++) { Assert.That(retrievedParts[i].Name, Is.EqualTo(parts[i].Name)); Assert.That(retrievedParts[i].UUID, Is.EqualTo(parts[i].UUID)); } }
public void TestllBreakLink() { TestHelpers.InMethod(); UUID ownerId = TestHelpers.ParseTail(0x1); SceneObjectGroup grp1 = SceneHelpers.CreateSceneObject(2, ownerId, "grp1-", 0x10); grp1.AbsolutePosition = new Vector3(10, 10, 10); m_scene.AddSceneObject(grp1); // FIXME: This should really be a script item (with accompanying script) TaskInventoryItem grp1Item = TaskInventoryHelpers.AddNotecard( m_scene.AssetService, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!"); grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; LSL_Api apiGrp1 = new LSL_Api(); apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item); apiGrp1.llBreakLink(2); Assert.That(grp1.Parts.Length, Is.EqualTo(1)); SceneObjectGroup grp2 = m_scene.GetSceneObjectGroup("grp1-Part1"); Assert.That(grp2, Is.Not.Null); }
public void TestGetSceneObjectByPartLocalId() { TestHelpers.InMethod(); Scene scene = new SceneHelpers().SetupScene(); int partsToTestCount = 3; SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, TestHelpers.ParseTail(0x1), "obj1", 0x10); SceneObjectPart[] parts = so.Parts; scene.AddNewSceneObject(so, false); // Test getting via the root part's local id Assert.That(scene.GetGroupByPrim(so.LocalId), Is.Not.Null); // Test getting via a non root part's local id Assert.That(scene.GetGroupByPrim(parts[partsToTestCount - 1].LocalId), Is.Not.Null); // Test that we don't get back an object for a local id that doesn't exist Assert.That(scene.GetGroupByPrim(999), Is.Null); // Now delete the scene object and check again scene.DeleteSceneObject(so, false); Assert.That(scene.GetGroupByPrim(so.LocalId), Is.Null); Assert.That(scene.GetGroupByPrim(parts[partsToTestCount - 1].LocalId), Is.Null); }
public void TestResizeSceneObjectPart() { TestHelpers.InMethod(); //log4net.Config.XmlConfigurator.Configure(); Scene scene = new SceneHelpers().SetupScene(); SceneObjectGroup g1 = SceneHelpers.CreateSceneObject(2, UUID.Zero); g1.RootPart.Scale = new Vector3(2, 3, 4); g1.Parts[1].Scale = new Vector3(5, 6, 7); scene.AddSceneObject(g1); SceneObjectGroup g1Post = scene.GetSceneObjectGroup(g1.UUID); g1Post.Parts[1].Resize(new Vector3(8, 9, 10)); SceneObjectGroup g1PostPost = scene.GetSceneObjectGroup(g1.UUID); SceneObjectPart g1RootPart = g1PostPost.RootPart; SceneObjectPart g1ChildPart = g1PostPost.Parts[1]; Assert.That(g1RootPart.Scale.X, Is.EqualTo(2)); Assert.That(g1RootPart.Scale.Y, Is.EqualTo(3)); Assert.That(g1RootPart.Scale.Z, Is.EqualTo(4)); Assert.That(g1ChildPart.Scale.X, Is.EqualTo(8)); Assert.That(g1ChildPart.Scale.Y, Is.EqualTo(9)); Assert.That(g1ChildPart.Scale.Z, Is.EqualTo(10)); }
public void TestRemoveGroupObject() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); m_lo.DeedToGroup(m_groupId); IPrimCounts pc = m_lo.PrimCounts; SceneObjectGroup sogToKeep = SceneHelpers.CreateSceneObject(1, m_userId, "a", 0x1); sogToKeep.GroupID = m_groupId; m_scene.AddNewSceneObject(sogToKeep, false); SceneObjectGroup sogToDelete = SceneHelpers.CreateSceneObject(3, m_userId, "b", 0x10); m_scene.AddNewSceneObject(sogToDelete, false); m_scene.DeleteSceneObject(sogToDelete, false); Assert.That(pc.Owner, Is.EqualTo(0)); Assert.That(pc.Group, Is.EqualTo(1)); Assert.That(pc.Others, Is.EqualTo(0)); Assert.That(pc.Total, Is.EqualTo(1)); Assert.That(pc.Selected, Is.EqualTo(0)); Assert.That(pc.Users[m_userId], Is.EqualTo(1)); Assert.That(pc.Users[m_groupId], Is.EqualTo(0)); Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pc.Simulator, Is.EqualTo(1)); }
public void TestAddGroupObject() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); m_lo.DeedToGroup(m_groupId); IPrimCounts pc = m_lo.PrimCounts; SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_otherUserId, "a", 0x01); sog.GroupID = m_groupId; m_scene.AddNewSceneObject(sog, false); Assert.That(pc.Owner, Is.EqualTo(0)); Assert.That(pc.Group, Is.EqualTo(3)); Assert.That(pc.Others, Is.EqualTo(0)); Assert.That(pc.Total, Is.EqualTo(3)); Assert.That(pc.Selected, Is.EqualTo(0)); // Is this desired behaviour? Not totally sure. Assert.That(pc.Users[m_userId], Is.EqualTo(0)); Assert.That(pc.Users[m_groupId], Is.EqualTo(0)); Assert.That(pc.Users[m_otherUserId], Is.EqualTo(3)); Assert.That(pc.Simulator, Is.EqualTo(3)); }
public void TestDetachScriptedAttachmentToInventory() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); Scene scene = CreateScriptingEnabledTestScene(); UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1); ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10); TaskInventoryItem scriptTaskItem = TaskInventoryHelpers.AddScript( scene.AssetService, so.RootPart, "scriptItem", "default { attach(key id) { if (id != NULL_KEY) { llSay(0, \"Hello World\"); } } }"); InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000); // FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running. // In the future, we need to be able to do this programatically more predicably. scene.EventManager.OnChatFromWorld += OnChatFromWorld; m_chatEvent.Reset(); SceneObjectGroup rezzedSo = (SceneObjectGroup)(scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest)); // Wait for chat to signal rezzed script has been started. m_chatEvent.WaitOne(60000); scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem); AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString()); // TODO: It would probably be better here to check script state via the saving and retrieval of state // information at a higher level, rather than having to inspect the serialization. XmlDocument soXml = new XmlDocument(); soXml.LoadXml(Encoding.UTF8.GetString(asset.Data)); XmlNodeList scriptStateNodes = soXml.GetElementsByTagName("ScriptState"); Assert.That(scriptStateNodes.Count, Is.EqualTo(1)); // Re-rez the attachment to check script running state SceneObjectGroup reRezzedSo = (SceneObjectGroup)(scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest)); // Wait for chat to signal rezzed script has been started. m_chatEvent.WaitOne(60000); TaskInventoryItem reRezzedScriptItem = reRezzedSo.RootPart.Inventory.GetInventoryItem(scriptTaskItem.Name); IScriptModule xengine = scene.RequestModuleInterface <IScriptModule>(); Assert.That(xengine.GetScriptState(reRezzedScriptItem.ItemID), Is.True); // Console.WriteLine(soXml.OuterXml); }
public void TestMoveOwnerObject() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01); m_scene.AddNewSceneObject(sog, false); SceneObjectGroup sog2 = SceneHelpers.CreateSceneObject(2, m_userId, "b", 0x10); m_scene.AddNewSceneObject(sog2, false); // Move the first scene object to the eastern strip parcel sog.AbsolutePosition = new Vector3(254, 2, 2); IPrimCounts pclo1 = m_lo.PrimCounts; Assert.That(pclo1.Owner, Is.EqualTo(2)); Assert.That(pclo1.Group, Is.EqualTo(0)); Assert.That(pclo1.Others, Is.EqualTo(0)); Assert.That(pclo1.Total, Is.EqualTo(2)); Assert.That(pclo1.Selected, Is.EqualTo(0)); Assert.That(pclo1.Users[m_userId], Is.EqualTo(2)); Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pclo1.Simulator, Is.EqualTo(5)); IPrimCounts pclo2 = m_lo2.PrimCounts; Assert.That(pclo2.Owner, Is.EqualTo(3)); Assert.That(pclo2.Group, Is.EqualTo(0)); Assert.That(pclo2.Others, Is.EqualTo(0)); Assert.That(pclo2.Total, Is.EqualTo(3)); Assert.That(pclo2.Selected, Is.EqualTo(0)); Assert.That(pclo2.Users[m_userId], Is.EqualTo(3)); Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pclo2.Simulator, Is.EqualTo(5)); // Now move it back again sog.AbsolutePosition = new Vector3(2, 2, 2); Assert.That(pclo1.Owner, Is.EqualTo(5)); Assert.That(pclo1.Group, Is.EqualTo(0)); Assert.That(pclo1.Others, Is.EqualTo(0)); Assert.That(pclo1.Total, Is.EqualTo(5)); Assert.That(pclo1.Selected, Is.EqualTo(0)); Assert.That(pclo1.Users[m_userId], Is.EqualTo(5)); Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pclo1.Simulator, Is.EqualTo(5)); Assert.That(pclo2.Owner, Is.EqualTo(0)); Assert.That(pclo2.Group, Is.EqualTo(0)); Assert.That(pclo2.Others, Is.EqualTo(0)); Assert.That(pclo2.Total, Is.EqualTo(0)); Assert.That(pclo2.Selected, Is.EqualTo(0)); Assert.That(pclo2.Users[m_userId], Is.EqualTo(0)); Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0)); Assert.That(pclo2.Simulator, Is.EqualTo(5)); }
public void TestOsNpcRemoveOwned() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); // Store an avatar with a different height from default in a notecard. UUID userId = TestHelpers.ParseTail(0x1); UUID otherUserId = TestHelpers.ParseTail(0x2); float newHeight = 1.9f; SceneHelpers.AddScenePresence(m_scene, otherUserId); ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); sp.Appearance.AvatarHeight = newHeight; SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId); SceneObjectPart part = so.RootPart; m_scene.AddSceneObject(so); SceneObjectGroup otherSo = SceneHelpers.CreateSceneObject(1, otherUserId); SceneObjectPart otherPart = otherSo.RootPart; m_scene.AddSceneObject(otherSo); OSSL_Api osslApi = new OSSL_Api(); osslApi.Initialize(m_engine, part, part.LocalId, part.UUID); OSSL_Api otherOsslApi = new OSSL_Api(); otherOsslApi.Initialize(m_engine, otherPart, otherPart.LocalId, otherPart.UUID); string notecardName = "appearanceNc"; osslApi.osOwnerSaveAppearance(notecardName); string npcRaw = osslApi.osNpcCreate( "Jane", "Doe", new LSL_Types.Vector3(128, 128, 128), notecardName, ScriptBaseClass.OS_NPC_CREATOR_OWNED); otherOsslApi.osNpcRemove(npcRaw); // Should still be around UUID npcId = new UUID(npcRaw); ScenePresence npc = m_scene.GetScenePresence(npcId); Assert.That(npc, Is.Not.Null); osslApi.osNpcRemove(npcRaw); npc = m_scene.GetScenePresence(npcId); // Now the owner deleted it and it's gone Assert.That(npc, Is.Null); }
public void TestLlGiveInventoryO2ODifferentOwners() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); UUID user1Id = TestHelpers.ParseTail(0x1); UUID user2Id = TestHelpers.ParseTail(0x2); string inventoryItemName = "item1"; SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10); m_scene.AddSceneObject(so1); LSL_Api api = new LSL_Api(); api.Initialize(m_engine, so1.RootPart, so1.RootPart.LocalId, so1.RootPart.UUID); // Create an object embedded inside the first UUID itemId = TestHelpers.ParseTail(0x20); TaskInventoryHelpers.AddSceneObject(m_scene, so1.RootPart, inventoryItemName, itemId, user1Id); // Create a second object SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, user2Id, "so2", 0x100); m_scene.AddSceneObject(so2); LSL_Api api2 = new LSL_Api(); api2.Initialize(m_engine, so2.RootPart, so2.RootPart.LocalId, so2.RootPart.UUID); // *** Firstly, we test where llAllowInventoryDrop() has not been called. *** api.llGiveInventory(so2.UUID.ToString(), inventoryItemName); { // Item has copy permissions so original should stay intact. List <TaskInventoryItem> originalItems = so1.RootPart.Inventory.GetInventoryItems(); Assert.That(originalItems.Count, Is.EqualTo(1)); // Should have not copied List <TaskInventoryItem> copiedItems = so2.RootPart.Inventory.GetInventoryItems(inventoryItemName); Assert.That(copiedItems.Count, Is.EqualTo(0)); } // *** Secondly, we turn on allow inventory drop in the target and retest. *** api2.llAllowInventoryDrop(1); api.llGiveInventory(so2.UUID.ToString(), inventoryItemName); { // Item has copy permissions so original should stay intact. List <TaskInventoryItem> originalItems = so1.RootPart.Inventory.GetInventoryItems(); Assert.That(originalItems.Count, Is.EqualTo(1)); // Should now have copied. List <TaskInventoryItem> copiedItems = so2.RootPart.Inventory.GetInventoryItems(inventoryItemName); Assert.That(copiedItems.Count, Is.EqualTo(1)); Assert.That(copiedItems[0].Name, Is.EqualTo(inventoryItemName)); } }
public void TestJsonWriteNotecard() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, TestHelpers.ParseTail(0x1)); m_scene.AddSceneObject(so); UUID storeId = (UUID)InvokeOp("JsonCreateStore", "{ 'Hello':'World' }"); { string notecardName = "nc1"; // Write notecard UUID writeNotecardRequestId = (UUID)InvokeOpOnHost("JsonWriteNotecard", so.UUID, storeId, "", notecardName); Assert.That(writeNotecardRequestId, Is.Not.EqualTo(UUID.Zero)); TaskInventoryItem nc1Item = so.RootPart.Inventory.GetInventoryItem(notecardName); Assert.That(nc1Item, Is.Not.Null); // TODO: Should independently check the contents. } // TODO: Write partial test { // Try to write notecard for a bad path // In this case we do get a request id but no notecard is written. string badPathNotecardName = "badPathNotecardName"; UUID writeNotecardBadPathRequestId = (UUID)InvokeOpOnHost("JsonWriteNotecard", so.UUID, storeId, "flibble", badPathNotecardName); Assert.That(writeNotecardBadPathRequestId, Is.Not.EqualTo(UUID.Zero)); TaskInventoryItem badPathItem = so.RootPart.Inventory.GetInventoryItem(badPathNotecardName); Assert.That(badPathItem, Is.Null); } { // Test with fake store // In this case we do get a request id but no notecard is written. string fakeStoreNotecardName = "fakeStoreNotecardName"; UUID fakeStoreId = TestHelpers.ParseTail(0x500); UUID fakeStoreWriteNotecardValue = (UUID)InvokeOpOnHost("JsonWriteNotecard", so.UUID, fakeStoreId, "", fakeStoreNotecardName); Assert.That(fakeStoreWriteNotecardValue, Is.Not.EqualTo(UUID.Zero)); TaskInventoryItem fakeStoreItem = so.RootPart.Inventory.GetInventoryItem(fakeStoreNotecardName); Assert.That(fakeStoreItem, Is.Null); } }
private void TestAddObjects(int primsInEachObject, int objectsToAdd) { UUID ownerId = new UUID("F0000000-0000-0000-0000-000000000000"); TestScene scene = SceneHelpers.SetupScene(); // Process process = Process.GetCurrentProcess(); // long startProcessMemory = process.PrivateMemorySize64; long startGcMemory = GC.GetTotalMemory(true); DateTime start = DateTime.Now; for (int i = 1; i <= objectsToAdd; i++) { SceneObjectGroup so = SceneHelpers.CreateSceneObject(primsInEachObject, ownerId, "part_", i); Assert.That(scene.AddNewSceneObject(so, false), Is.True, string.Format("Object {0} was not created", i)); } TimeSpan elapsed = DateTime.Now - start; // long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory; long endGcMemory = GC.GetTotalMemory(false); for (int i = 1; i <= objectsToAdd; i++) { Assert.That( scene.GetSceneObjectGroup(TestHelpers.ParseTail(i)), Is.Not.Null, string.Format("Object {0} could not be retrieved", i)); } // When a scene object is added to a scene, it is placed in the update list for sending to viewers // (though in this case we have none). When it is deleted, it is not removed from the update which is // fine since it will later be ignored. // // However, that means that we need to manually run an update here to clear out that list so that deleted // 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), (endGcMemory - startGcMemory) / 1024 / 1024, endGcMemory / 1024 / 1024, startGcMemory / 1024 / 1024, objectsToAdd, primsInEachObject); scene = null; }
public void TestNamespaceAttribute() { TestHelpers.InMethod(); Scene scene = new SceneHelpers().SetupScene(); UserAccount account = new UserAccount(UUID.Zero, UUID.Random(), "Test", "User", string.Empty); scene.UserAccountService.StoreUserAccount(account); int partsToTestCount = 1; SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, TestHelpers.ParseTail(0x1), "obj1", 0x10); SceneObjectPart[] parts = so.Parts; so.Name = "obj1"; so.Description = "xpto"; so.OwnerID = account.PrincipalID; so.RootPart.CreatorID = so.OwnerID; string xml = SceneObjectSerializer.ToXml2Format(so); Assert.That(!string.IsNullOrEmpty(xml), "SOG serialization resulted in empty or null string"); xml = ExternalRepresentationUtils.RewriteSOP(xml, "Test Scene", "http://localhost", scene.UserAccountService, UUID.Zero); //Console.WriteLine(xml); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlNodeList nodes = doc.GetElementsByTagName("SceneObjectPart"); Assert.That(nodes.Count, Is.GreaterThan(0), "SOG serialization resulted in no SOPs"); foreach (XmlAttribute a in nodes[0].Attributes) { int count = a.Name.Count(c => c == ':'); Assert.That(count, Is.EqualTo(1), "Cannot have multiple ':' in attribute name in SOP"); } nodes = doc.GetElementsByTagName("CreatorData"); Assert.That(nodes.Count, Is.GreaterThan(0), "SOG serialization resulted in no CreatorData"); foreach (XmlAttribute a in nodes[0].Attributes) { int count = a.Name.Count(c => c == ':'); Assert.That(count, Is.EqualTo(1), "Cannot have multiple ':' in attribute name in CreatorData"); } SceneObjectGroup so2 = SceneObjectSerializer.FromXml2Format(xml); Assert.IsNotNull(so2, "SOG deserialization resulted in null object"); Assert.AreNotEqual(so.RootPart.CreatorIdentification, so2.RootPart.CreatorIdentification, "RewriteSOP failed to transform CreatorData."); Assert.That(so2.RootPart.CreatorIdentification.Contains("http://"), "RewriteSOP failed to add the homeURL to CreatorData"); }
public void TestGetSceneObjectGroupPosition() { TestHelpers.InMethod(); Vector3 position = new Vector3(10, 20, 30); SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, m_ownerId, "obj1", 0x10); so.AbsolutePosition = position; m_scene.AddNewSceneObject(so, false); Assert.That(so.AbsolutePosition, Is.EqualTo(position)); }
public void TestLoadOarUnorderedParts() { TestHelpers.InMethod(); UUID ownerId = TestHelpers.ParseTail(0xaaaa); MemoryStream archiveWriteStream = new MemoryStream(); TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); tar.WriteFile( ArchiveConstants.CONTROL_FILE_PATH, new ArchiveWriteRequest(m_scene, (Stream)null, Guid.Empty).CreateControlFile(new ArchiveScenesGroup())); SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, ownerId, "obj1-", 0x11); SceneObjectPart sop2 = SceneHelpers.CreateSceneObjectPart("obj1-Part2", TestHelpers.ParseTail(0x12), ownerId); SceneObjectPart sop3 = SceneHelpers.CreateSceneObjectPart("obj1-Part3", TestHelpers.ParseTail(0x13), ownerId); // Add the parts so they will be written out in reverse order to the oar sog1.AddPart(sop3); sop3.LinkNum = 3; sog1.AddPart(sop2); sop2.LinkNum = 2; tar.WriteFile( ArchiveConstants.CreateOarObjectPath(sog1.Name, sog1.UUID, sog1.AbsolutePosition), SceneObjectSerializer.ToXml2Format(sog1)); tar.Close(); MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); lock (this) { m_scene.EventManager.OnOarFileLoaded += LoadCompleted; m_archiverModule.DearchiveRegion(archiveReadStream); } Assert.That(m_lastErrorMessage, Is.Null); SceneObjectPart part2 = m_scene.GetSceneObjectPart("obj1-Part2"); Assert.That(part2.LinkNum, Is.EqualTo(2)); SceneObjectPart part3 = m_scene.GetSceneObjectPart("obj1-Part3"); Assert.That(part3.LinkNum, Is.EqualTo(3)); }
public SceneObjectGroup AddSceneObject(string name, int suffix, int partsToTestCount, UUID ownerID) { SceneObjectGroup so = SceneHelpers.CreateSceneObject(partsToTestCount, ownerID, name, suffix); so.Name = name; so.Description = name; Assert.That(m_Scene.AddNewSceneObject(so, false), Is.True); SceneObjectGroup retrievedSo = m_Scene.GetSceneObjectGroup(so.UUID); // If the parts have the same UUID then we will consider them as one and the same Assert.That(retrievedSo.PrimCount, Is.EqualTo(partsToTestCount)); return(so); }