Merge branch 'master' of /home/opensim/var/repo/opensim
commit
77f08ae632
|
@ -339,7 +339,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
ShowAttachInUserInventory(sp, attachmentPt, newAttachmentItemID, group);
|
||||
}
|
||||
|
||||
public ISceneEntity RezSingleAttachmentFromInventory(IScenePresence sp, UUID itemID, uint AttachmentPt)
|
||||
public SceneObjectGroup RezSingleAttachmentFromInventory(IScenePresence sp, UUID itemID, uint AttachmentPt)
|
||||
{
|
||||
if (!Enabled)
|
||||
return null;
|
||||
|
@ -527,6 +527,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
/// </remarks>
|
||||
/// <param name="sp"></param>
|
||||
/// <param name="grp"></param>
|
||||
/// <param name="saveAllScripted"></param>
|
||||
private void UpdateKnownItem(IScenePresence sp, SceneObjectGroup grp, bool saveAllScripted)
|
||||
{
|
||||
// Saving attachments for NPCs messes them up for the real owner!
|
||||
|
@ -720,18 +721,23 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
null, assetID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true,
|
||||
false, false, sp.UUID, true);
|
||||
|
||||
// m_log.DebugFormat(
|
||||
// "[ATTACHMENTS MODULE]: Retrieved single object {0} for attachment to {1} on point {2}",
|
||||
// objatt.Name, remoteClient.Name, AttachmentPt);
|
||||
|
||||
if (objatt != null)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[ATTACHMENTS MODULE]: Rezzed single object {0} for attachment to {1} on point {2} in {3}",
|
||||
// objatt.Name, sp.Name, attachmentPt, m_scene.Name);
|
||||
|
||||
// HasGroupChanged is being set from within RezObject. Ideally it would be set by the caller.
|
||||
objatt.HasGroupChanged = false;
|
||||
bool tainted = false;
|
||||
if (attachmentPt != 0 && attachmentPt != objatt.AttachmentPoint)
|
||||
tainted = true;
|
||||
|
||||
// FIXME: Detect whether it's really likely for AttachObject to throw an exception in the normal
|
||||
// course of events. If not, then it's probably not worth trying to recover the situation
|
||||
// since this is more likely to trigger further exceptions and confuse later debugging. If
|
||||
// exceptions can be thrown in expected error conditions (not NREs) then make this consistent
|
||||
// since other normal error conditions will simply return false instead.
|
||||
// This will throw if the attachment fails
|
||||
try
|
||||
{
|
||||
|
|
|
@ -31,6 +31,7 @@ using System.Reflection;
|
|||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Timers;
|
||||
using System.Xml;
|
||||
using Timer=System.Timers.Timer;
|
||||
using Nini.Config;
|
||||
using NUnit.Framework;
|
||||
|
@ -41,10 +42,12 @@ using OpenSim.Region.CoreModules.Avatar.Attachments;
|
|||
using OpenSim.Region.CoreModules.Framework;
|
||||
using OpenSim.Region.CoreModules.Framework.EntityTransfer;
|
||||
using OpenSim.Region.CoreModules.Framework.InventoryAccess;
|
||||
using OpenSim.Region.CoreModules.World.Serialiser;
|
||||
using OpenSim.Region.CoreModules.Scripting.WorldComm;
|
||||
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
|
||||
using OpenSim.Region.CoreModules.World.Serialiser;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.ScriptEngine.XEngine;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
@ -57,6 +60,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
[TestFixture]
|
||||
public class AttachmentsModuleTests : OpenSimTestCase
|
||||
{
|
||||
private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
|
||||
private OSChatMessage m_osChatMessageReceived;
|
||||
|
||||
[TestFixtureSetUp]
|
||||
public void FixtureInit()
|
||||
{
|
||||
|
@ -72,16 +78,74 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
|
||||
}
|
||||
|
||||
private Scene CreateDefaultTestScene()
|
||||
private void OnChatFromWorld(object sender, OSChatMessage oscm)
|
||||
{
|
||||
// Console.WriteLine("Got chat [{0}]", oscm.Message);
|
||||
|
||||
m_osChatMessageReceived = oscm;
|
||||
m_chatEvent.Set();
|
||||
}
|
||||
|
||||
private Scene CreateTestScene()
|
||||
{
|
||||
IConfigSource config = new IniConfigSource();
|
||||
List<object> modules = new List<object>();
|
||||
|
||||
AddCommonConfig(config, modules);
|
||||
|
||||
Scene scene
|
||||
= new SceneHelpers().SetupScene(
|
||||
"attachments-test-scene", TestHelpers.ParseTail(999), 1000, 1000, config);
|
||||
SceneHelpers.SetupSceneModules(scene, config, modules.ToArray());
|
||||
|
||||
return scene;
|
||||
}
|
||||
|
||||
private Scene CreateScriptingEnabledTestScene()
|
||||
{
|
||||
IConfigSource config = new IniConfigSource();
|
||||
List<object> modules = new List<object>();
|
||||
|
||||
AddCommonConfig(config, modules);
|
||||
AddScriptingConfig(config, modules);
|
||||
|
||||
Scene scene
|
||||
= new SceneHelpers().SetupScene(
|
||||
"attachments-test-scene", TestHelpers.ParseTail(999), 1000, 1000, config);
|
||||
SceneHelpers.SetupSceneModules(scene, config, modules.ToArray());
|
||||
|
||||
scene.StartScripts();
|
||||
|
||||
return scene;
|
||||
}
|
||||
|
||||
private void AddCommonConfig(IConfigSource config, List<object> modules)
|
||||
{
|
||||
config.AddConfig("Modules");
|
||||
config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
|
||||
|
||||
Scene scene = new SceneHelpers().SetupScene();
|
||||
SceneHelpers.SetupSceneModules(scene, config, new AttachmentsModule(), new BasicInventoryAccessModule());
|
||||
modules.Add(new AttachmentsModule());
|
||||
modules.Add(new BasicInventoryAccessModule());
|
||||
}
|
||||
|
||||
return scene;
|
||||
private void AddScriptingConfig(IConfigSource config, List<object> modules)
|
||||
{
|
||||
IConfig startupConfig = config.AddConfig("Startup");
|
||||
startupConfig.Set("DefaultScriptEngine", "XEngine");
|
||||
|
||||
IConfig xEngineConfig = config.AddConfig("XEngine");
|
||||
xEngineConfig.Set("Enabled", "true");
|
||||
xEngineConfig.Set("StartDelay", "0");
|
||||
|
||||
// These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
|
||||
// to AssemblyResolver.OnAssemblyResolve fails.
|
||||
xEngineConfig.Set("AppDomainLoading", "false");
|
||||
|
||||
modules.Add(new XEngine());
|
||||
|
||||
// Necessary to stop serialization complaining
|
||||
// FIXME: Stop this being necessary if at all possible
|
||||
// modules.Add(new WorldCommModule());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -116,7 +180,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
TestHelpers.InMethod();
|
||||
// TestHelpers.EnableLogging();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1);
|
||||
|
||||
|
@ -163,7 +227,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
TestHelpers.InMethod();
|
||||
// TestHelpers.EnableLogging();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1);
|
||||
|
||||
|
@ -185,12 +249,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
}
|
||||
|
||||
[Test]
|
||||
public void TestAddAttachmentFromInventory()
|
||||
public void TestRezAttachmentFromInventory()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1.PrincipalID);
|
||||
|
||||
|
@ -217,13 +281,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
Assert.That(scene.GetSceneObjectGroups().Count, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test specific conditions associated with rezzing a scripted attachment from inventory.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestRezScriptedAttachmentFromInventory()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1.PrincipalID);
|
||||
|
||||
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10);
|
||||
TaskInventoryHelpers.AddScript(scene, so.RootPart);
|
||||
InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000);
|
||||
|
||||
scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest);
|
||||
|
||||
// TODO: Need to have a test that checks the script is actually started but this involves a lot more
|
||||
// plumbing of the script engine and either pausing for events or more infrastructure to turn off various
|
||||
// script engine delays/asychronicity that isn't helpful in an automated regression testing context.
|
||||
SceneObjectGroup attSo = scene.GetSceneObjectGroup(so.Name);
|
||||
Assert.That(attSo.ContainsScripts(), Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestDetachAttachmentToGround()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1.PrincipalID);
|
||||
|
||||
|
@ -253,9 +342,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
public void TestDetachAttachmentToInventory()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1.PrincipalID);
|
||||
|
||||
|
@ -277,6 +365,45 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
Assert.That(scene.GetSceneObjectGroups().Count, Is.EqualTo(0));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test specific conditions associated with detaching a scripted attachment from inventory.
|
||||
/// </summary>
|
||||
[Test]
|
||||
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);
|
||||
TaskInventoryHelpers.AddScript(scene, so.RootPart);
|
||||
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;
|
||||
|
||||
SceneObjectGroup soRezzed
|
||||
= 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, soRezzed);
|
||||
|
||||
InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem);
|
||||
AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString());
|
||||
|
||||
XmlDocument soXml = new XmlDocument();
|
||||
soXml.LoadXml(Encoding.UTF8.GetString(asset.Data));
|
||||
|
||||
XmlNodeList scriptStateNodes = soXml.GetElementsByTagName("ScriptState");
|
||||
Assert.That(scriptStateNodes.Count, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test that attachments don't hang about in the scene when the agent is closed
|
||||
/// </summary>
|
||||
|
@ -286,7 +413,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
TestHelpers.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
InventoryItemBase attItem = CreateAttachmentItem(scene, ua1.PrincipalID, "att", 0x10, 0x20);
|
||||
|
||||
|
@ -309,7 +436,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
TestHelpers.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
InventoryItemBase attItem = CreateAttachmentItem(scene, ua1.PrincipalID, "att", 0x10, 0x20);
|
||||
|
||||
|
@ -345,7 +472,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
|||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
Scene scene = CreateDefaultTestScene();
|
||||
Scene scene = CreateTestScene();
|
||||
UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1);
|
||||
InventoryItemBase attItem = CreateAttachmentItem(scene, ua1.PrincipalID, "att", 0x10, 0x20);
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// <param name="itemID"></param>
|
||||
/// <param name="AttachmentPt"></param>
|
||||
/// <returns>The scene object that was attached. Null if the scene object could not be found</returns>
|
||||
ISceneEntity RezSingleAttachmentFromInventory(IScenePresence sp, UUID itemID, uint AttachmentPt);
|
||||
SceneObjectGroup RezSingleAttachmentFromInventory(IScenePresence sp, UUID itemID, uint AttachmentPt);
|
||||
|
||||
/// <summary>
|
||||
/// Rez multiple attachments from a user's inventory
|
||||
|
|
|
@ -1295,6 +1295,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
if (e != null)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[PRIM INVENTORY]: Getting script state from engine {0} for {1} in part {2} in group {3} in {4}",
|
||||
// e.Name, item.Name, m_part.Name, m_part.ParentGroup.Name, m_part.ParentGroup.Scene.Name);
|
||||
|
||||
string n = e.GetXMLState(item.ItemID);
|
||||
if (n != String.Empty)
|
||||
{
|
||||
|
|
|
@ -233,8 +233,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_Timer[engine].UnSetTimerEvents(localID, itemID);
|
||||
|
||||
// Remove from: HttpRequest
|
||||
IHttpRequestModule iHttpReq =
|
||||
engine.World.RequestModuleInterface<IHttpRequestModule>();
|
||||
IHttpRequestModule iHttpReq = engine.World.RequestModuleInterface<IHttpRequestModule>();
|
||||
if (iHttpReq != null)
|
||||
iHttpReq.StopHttpRequest(localID, itemID);
|
||||
|
||||
IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>();
|
||||
|
@ -242,8 +242,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
comms.DeleteListener(itemID);
|
||||
|
||||
IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>();
|
||||
if (xmlrpc != null)
|
||||
{
|
||||
xmlrpc.DeleteChannels(itemID);
|
||||
xmlrpc.CancelSRDRequests(itemID);
|
||||
}
|
||||
|
||||
// Remove Sensors
|
||||
m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
|
||||
|
@ -305,7 +308,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
List<Object> data = new List<Object>();
|
||||
|
||||
Object[] listeners=m_Listener[engine].GetSerializationData(itemID);
|
||||
Object[] listeners = m_Listener[engine].GetSerializationData(itemID);
|
||||
if (listeners.Length > 0)
|
||||
{
|
||||
data.Add("listener");
|
||||
|
|
|
@ -88,12 +88,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
|||
|
||||
public Object[] GetSerializationData(UUID itemID)
|
||||
{
|
||||
if (m_commsPlugin != null)
|
||||
return m_commsPlugin.GetSerializationData(itemID);
|
||||
else
|
||||
return new Object[]{};
|
||||
}
|
||||
|
||||
public void CreateFromData(uint localID, UUID itemID, UUID hostID,
|
||||
Object[] data)
|
||||
{
|
||||
if (m_commsPlugin != null)
|
||||
m_commsPlugin.CreateFromData(localID, itemID, hostID, data);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,9 +58,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Tests
|
|||
// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
|
||||
m_xEngine = new XEngine();
|
||||
|
||||
// Necessary to stop serialization complaining
|
||||
WorldCommModule wcModule = new WorldCommModule();
|
||||
|
||||
IniConfigSource configSource = new IniConfigSource();
|
||||
|
||||
IConfig startupConfig = configSource.AddConfig("Startup");
|
||||
|
@ -68,13 +65,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Tests
|
|||
|
||||
IConfig xEngineConfig = configSource.AddConfig("XEngine");
|
||||
xEngineConfig.Set("Enabled", "true");
|
||||
xEngineConfig.Set("StartDelay", "0");
|
||||
|
||||
// These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
|
||||
// to AssemblyResolver.OnAssemblyResolve fails.
|
||||
xEngineConfig.Set("AppDomainLoading", "false");
|
||||
|
||||
m_scene = new SceneHelpers().SetupScene("My Test", UUID.Random(), 1000, 1000, configSource);
|
||||
SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
|
||||
SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine);
|
||||
m_scene.StartScripts();
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
private IConfigSource m_ConfigSource = null;
|
||||
private ICompiler m_Compiler;
|
||||
private int m_MinThreads;
|
||||
private int m_MaxThreads ;
|
||||
private int m_MaxThreads;
|
||||
|
||||
/// <summary>
|
||||
/// Amount of time to delay before starting.
|
||||
/// </summary>
|
||||
private int m_StartDelay;
|
||||
|
||||
private int m_IdleTimeout;
|
||||
private int m_StackSize;
|
||||
private int m_SleepTime;
|
||||
|
@ -231,6 +237,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
m_MaxThreads = m_ScriptConfig.GetInt("MaxThreads", 100);
|
||||
m_IdleTimeout = m_ScriptConfig.GetInt("IdleTimeout", 60);
|
||||
string priority = m_ScriptConfig.GetString("Priority", "BelowNormal");
|
||||
m_StartDelay = m_ScriptConfig.GetInt("StartDelay", 15000);
|
||||
m_MaxScriptQueue = m_ScriptConfig.GetInt("MaxScriptEventQueue",300);
|
||||
m_StackSize = m_ScriptConfig.GetInt("ThreadStackSize", 262144);
|
||||
m_SleepTime = m_ScriptConfig.GetInt("MaintenanceInterval", 10) * 1000;
|
||||
|
@ -886,7 +893,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
{
|
||||
// This delay exists to stop mono problems where script compilation and startup would stop the sim
|
||||
// working properly for the session.
|
||||
System.Threading.Thread.Sleep(15000);
|
||||
System.Threading.Thread.Sleep(m_StartDelay);
|
||||
}
|
||||
|
||||
object[] o;
|
||||
|
@ -1676,12 +1683,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
|
||||
public string GetXMLState(UUID itemID)
|
||||
{
|
||||
// m_log.DebugFormat("[XEngine]: Getting XML state for {0}", itemID);
|
||||
// m_log.DebugFormat("[XEngine]: Getting XML state for script instance {0}", itemID);
|
||||
|
||||
IScriptInstance instance = GetInstance(itemID);
|
||||
if (instance == null)
|
||||
{
|
||||
// m_log.DebugFormat("[XEngine]: Found no script for {0}, returning empty string", itemID);
|
||||
// m_log.DebugFormat("[XEngine]: Found no script instance for {0}, returning empty string", itemID);
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ namespace OpenSim.Tests.Common
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a blank script to the given part.
|
||||
/// Add a simple script to the given part.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// TODO: Accept input for item and asset IDs to avoid mysterious script failures that try to use any of these
|
||||
|
@ -81,6 +81,7 @@ namespace OpenSim.Tests.Common
|
|||
public static TaskInventoryItem AddScript(Scene scene, SceneObjectPart part)
|
||||
{
|
||||
AssetScriptText ast = new AssetScriptText();
|
||||
ast.Source = "default { state_entry() { llSay(0, \"Hello World\"); } }";
|
||||
ast.Encode();
|
||||
|
||||
UUID assetUuid = new UUID("00000000-0000-0000-1000-000000000000");
|
||||
|
|
|
@ -42,6 +42,57 @@ namespace OpenSim.Tests.Common
|
|||
{
|
||||
public static readonly string PATH_DELIMITER = "/";
|
||||
|
||||
/// <summary>
|
||||
/// Add an existing scene object as an item in the user's inventory.
|
||||
/// </summary>
|
||||
/// <param name='scene'></param>
|
||||
/// <param name='so'></param>
|
||||
/// <param name='inventoryIdTail'></param>
|
||||
/// <param name='assetIdTail'></param>
|
||||
/// <returns>The inventory item created.</returns>
|
||||
public static InventoryItemBase AddInventoryItem(
|
||||
Scene scene, SceneObjectGroup so, int inventoryIdTail, int assetIdTail)
|
||||
{
|
||||
return AddInventoryItem(
|
||||
scene,
|
||||
so.Name,
|
||||
TestHelpers.ParseTail(inventoryIdTail),
|
||||
InventoryType.Object,
|
||||
AssetHelpers.CreateAsset(TestHelpers.ParseTail(assetIdTail), so),
|
||||
so.OwnerID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a notecard in the objects folder and specify an item id.
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="itemName"></param>
|
||||
/// <param name="itemId"></param>
|
||||
/// <param name="itemType"></param>
|
||||
/// <param name="asset">The serialized asset for this item</param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
private static InventoryItemBase AddInventoryItem(
|
||||
Scene scene, string itemName, UUID itemId, InventoryType itemType, AssetBase asset, UUID userId)
|
||||
{
|
||||
scene.AssetService.Store(asset);
|
||||
|
||||
InventoryItemBase item = new InventoryItemBase();
|
||||
item.Name = itemName;
|
||||
item.AssetID = asset.FullID;
|
||||
item.ID = itemId;
|
||||
item.Owner = userId;
|
||||
item.AssetType = asset.Type;
|
||||
item.InvType = (int)itemType;
|
||||
|
||||
InventoryFolderBase folder = scene.InventoryService.GetFolderForType(userId, (AssetType)asset.Type);
|
||||
|
||||
item.Folder = folder.ID;
|
||||
scene.AddInventoryItem(item);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a notecard in the objects folder and specify an item id.
|
||||
/// </summary>
|
||||
|
@ -81,40 +132,25 @@ namespace OpenSim.Tests.Common
|
|||
/// <param name="type">Type of item to create</param>
|
||||
/// <returns></returns>
|
||||
public static InventoryItemBase CreateInventoryItem(
|
||||
Scene scene, string itemName, UUID itemId, UUID assetId, UUID userId, InventoryType type)
|
||||
Scene scene, string itemName, UUID itemId, UUID assetId, UUID userId, InventoryType itemType)
|
||||
{
|
||||
AssetBase asset = null;
|
||||
|
||||
if (type == InventoryType.Notecard)
|
||||
if (itemType == InventoryType.Notecard)
|
||||
{
|
||||
asset = AssetHelpers.CreateNotecardAsset();
|
||||
asset.CreatorID = userId.ToString();
|
||||
}
|
||||
else if (type == InventoryType.Object)
|
||||
else if (itemType == InventoryType.Object)
|
||||
{
|
||||
asset = AssetHelpers.CreateAsset(assetId, SceneHelpers.CreateSceneObject(1, userId));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception(string.Format("Inventory type {0} not supported", type));
|
||||
throw new Exception(string.Format("Inventory type {0} not supported", itemType));
|
||||
}
|
||||
|
||||
scene.AssetService.Store(asset);
|
||||
|
||||
InventoryItemBase item = new InventoryItemBase();
|
||||
item.Name = itemName;
|
||||
item.AssetID = asset.FullID;
|
||||
item.ID = itemId;
|
||||
item.Owner = userId;
|
||||
item.AssetType = asset.Type;
|
||||
item.InvType = (int)type;
|
||||
|
||||
InventoryFolderBase folder = scene.InventoryService.GetFolderForType(userId, AssetType.Notecard);
|
||||
|
||||
item.Folder = folder.ID;
|
||||
scene.AddInventoryItem(item);
|
||||
|
||||
return item;
|
||||
return AddInventoryItem(scene, itemName, itemId, itemType, asset, userId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -2968,6 +2968,7 @@
|
|||
<Reference name="OpenSim.Region.Framework"/>
|
||||
<Reference name="OpenSim.Region.CoreModules"/>
|
||||
<Reference name="OpenSim.Region.Physics.Manager"/>
|
||||
<Reference name="OpenSim.Region.ScriptEngine.XEngine"/>
|
||||
<Reference name="OpenSim.Services.Interfaces"/>
|
||||
|
||||
<!-- Unit tests -->
|
||||
|
|
Loading…
Reference in New Issue