OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
OSSL_ApiAttachmentTests.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using System.Collections.Generic;
30 using System.Reflection;
31 using System.Text;
32 using log4net;
33 using Nini.Config;
34 using NUnit.Framework;
35 using OpenMetaverse;
36 using OpenMetaverse.Assets;
37 using OpenMetaverse.StructuredData;
38 using OpenSim.Framework;
39 using OpenSim.Region.CoreModules.Avatar.Attachments;
40 using OpenSim.Region.CoreModules.Framework.InventoryAccess;
41 using OpenSim.Region.Framework.Scenes;
42 using OpenSim.Region.ScriptEngine.Shared;
43 using OpenSim.Region.ScriptEngine.Shared.Api;
44 using OpenSim.Region.ScriptEngine.Shared.Instance;
45 using OpenSim.Services.Interfaces;
46 using OpenSim.Tests.Common;
47 
48 namespace OpenSim.Region.ScriptEngine.Shared.Tests
49 {
56  [TestFixture]
58  {
59  protected Scene m_scene;
61 
62  [SetUp]
63  public override void SetUp()
64  {
65  base.SetUp();
66 
67  IConfigSource initConfigSource = new IniConfigSource();
68 
69  IConfig xengineConfig = initConfigSource.AddConfig("XEngine");
70  xengineConfig.Set("Enabled", "true");
71  xengineConfig.Set("AllowOSFunctions", "true");
72  xengineConfig.Set("OSFunctionThreatLevel", "Severe");
73 
74  IConfig modulesConfig = initConfigSource.AddConfig("Modules");
75  modulesConfig.Set("InventoryAccessModule", "BasicInventoryAccessModule");
76 
77  m_scene = new SceneHelpers().SetupScene();
78  SceneHelpers.SetupSceneModules(
79  m_scene, initConfigSource, new AttachmentsModule(), new BasicInventoryAccessModule());
80 
81  m_engine = new XEngine.XEngine();
82  m_engine.Initialise(initConfigSource);
83  m_engine.AddRegion(m_scene);
84  }
85 
86  [Test]
88  {
89  TestHelpers.InMethod();
90 // TestHelpers.EnableLogging();
91 
92  string taskInvObjItemName = "sphere";
93  UUID taskInvObjItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
94  AttachmentPoint attachPoint = AttachmentPoint.Chin;
95 
96  UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, 0x1);
97  ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1.PrincipalID);
98  SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
99  TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, inWorldObj.RootPart);
100 
101  new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
102  OSSL_Api osslApi = new OSSL_Api();
103  osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
104 
105 // SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, ua1.PrincipalID);
106 
107  // Create an object embedded inside the first
108  TaskInventoryHelpers.AddSceneObject(m_scene.AssetService, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID);
109 
110  osslApi.osForceAttachToAvatarFromInventory(taskInvObjItemName, (int)attachPoint);
111 
112  // Check scene presence status
113  Assert.That(sp.HasAttachments(), Is.True);
114  List<SceneObjectGroup> attachments = sp.GetAttachments();
115  Assert.That(attachments.Count, Is.EqualTo(1));
116  SceneObjectGroup attSo = attachments[0];
117  Assert.That(attSo.Name, Is.EqualTo(taskInvObjItemName));
118  Assert.That(attSo.AttachmentPoint, Is.EqualTo((uint)attachPoint));
119  Assert.That(attSo.IsAttachment);
120  Assert.That(attSo.UsesPhysics, Is.False);
121  Assert.That(attSo.IsTemporary, Is.False);
122 
123  // Check appearance status
124  List<AvatarAttachment> attachmentsInAppearance = sp.Appearance.GetAttachments();
125  Assert.That(attachmentsInAppearance.Count, Is.EqualTo(1));
126  Assert.That(sp.Appearance.GetAttachpoint(attachmentsInAppearance[0].ItemID), Is.EqualTo((uint)attachPoint));
127  }
128 
132  [Test]
134  {
135  TestHelpers.InMethod();
136 // TestHelpers.EnableLogging();
137 
138  string taskInvObjItemName = "sphere";
139  UUID taskInvObjItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
140  AttachmentPoint attachPoint = AttachmentPoint.Chin;
141 
142  UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, 0x1);
143  ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1.PrincipalID);
144  SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
145  TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, inWorldObj.RootPart);
146 
147  new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
148  OSSL_Api osslApi = new OSSL_Api();
149  osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
150 
151  // Create an object embedded inside the first
152  TaskInventoryHelpers.AddNotecard(
153  m_scene.AssetService, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, TestHelpers.ParseTail(0x900), "Hello World!");
154 
155  bool exceptionCaught = false;
156 
157  try
158  {
159  osslApi.osForceAttachToAvatarFromInventory(taskInvObjItemName, (int)attachPoint);
160  }
161  catch (Exception)
162  {
163  exceptionCaught = true;
164  }
165 
166  Assert.That(exceptionCaught, Is.True);
167 
168  // Check scene presence status
169  Assert.That(sp.HasAttachments(), Is.False);
170  List<SceneObjectGroup> attachments = sp.GetAttachments();
171  Assert.That(attachments.Count, Is.EqualTo(0));
172 
173  // Check appearance status
174  List<AvatarAttachment> attachmentsInAppearance = sp.Appearance.GetAttachments();
175  Assert.That(attachmentsInAppearance.Count, Is.EqualTo(0));
176  }
177 
178  [Test]
180  {
181  TestHelpers.InMethod();
182 // TestHelpers.EnableLogging();
183 
184  string taskInvObjItemName = "sphere";
185  UUID taskInvObjItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
186  AttachmentPoint attachPoint = AttachmentPoint.Chin;
187 
188  UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(m_scene, "user", "one", 0x1, "pass");
189  UserAccount ua2 = UserAccountHelpers.CreateUserWithInventory(m_scene, "user", "two", 0x2, "pass");
190 
191  ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, ua1);
192  SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
193  TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene.AssetService, inWorldObj.RootPart);
194 
195  new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
196  OSSL_Api osslApi = new OSSL_Api();
197  osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
198 
199  // Create an object embedded inside the first
200  TaskInventoryHelpers.AddSceneObject(
201  m_scene.AssetService, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID);
202 
203  ScenePresence sp2 = SceneHelpers.AddScenePresence(m_scene, ua2);
204 
205  osslApi.osForceAttachToOtherAvatarFromInventory(sp2.UUID.ToString(), taskInvObjItemName, (int)attachPoint);
206 
207  // Check scene presence status
208  Assert.That(sp.HasAttachments(), Is.False);
209  List<SceneObjectGroup> attachments = sp.GetAttachments();
210  Assert.That(attachments.Count, Is.EqualTo(0));
211 
212  Assert.That(sp2.HasAttachments(), Is.True);
213  List<SceneObjectGroup> attachments2 = sp2.GetAttachments();
214  Assert.That(attachments2.Count, Is.EqualTo(1));
215  SceneObjectGroup attSo = attachments2[0];
216  Assert.That(attSo.Name, Is.EqualTo(taskInvObjItemName));
217  Assert.That(attSo.OwnerID, Is.EqualTo(ua2.PrincipalID));
218  Assert.That(attSo.AttachmentPoint, Is.EqualTo((uint)attachPoint));
219  Assert.That(attSo.IsAttachment);
220  Assert.That(attSo.UsesPhysics, Is.False);
221  Assert.That(attSo.IsTemporary, Is.False);
222 
223  // Check appearance status
224  List<AvatarAttachment> attachmentsInAppearance = sp.Appearance.GetAttachments();
225  Assert.That(attachmentsInAppearance.Count, Is.EqualTo(0));
226 
227  List<AvatarAttachment> attachmentsInAppearance2 = sp2.Appearance.GetAttachments();
228  Assert.That(attachmentsInAppearance2.Count, Is.EqualTo(1));
229  Assert.That(sp2.Appearance.GetAttachpoint(attachmentsInAppearance2[0].ItemID), Is.EqualTo((uint)attachPoint));
230  }
231  }
232 }
Contains all LSL ll-functions. This class will be in Default AppDomain.
Definition: LSL_Api.cs:95
A scene object group is conceptually an object in the scene. The object is constituted of SceneObject...
Represents an item in a task inventory
Helpers for setting up scenes.
Definition: SceneHelpers.cs:60
void TestOsForceAttachToAvatarFromInventoryNotObject()
Make sure we can't force attach anything other than objects.