Merge branch 'master' into careminster-presence-refactor
commit
252e159340
|
@ -37,11 +37,6 @@ using log4net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
|
||||||
#if !NUNIT25
|
|
||||||
using NUnit.Framework.SyntaxHelpers;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// DBMS-specific:
|
// DBMS-specific:
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using OpenSim.Data.MySQL;
|
using OpenSim.Data.MySQL;
|
||||||
|
@ -52,7 +47,6 @@ using OpenSim.Data.MSSQL;
|
||||||
using Mono.Data.Sqlite;
|
using Mono.Data.Sqlite;
|
||||||
using OpenSim.Data.SQLite;
|
using OpenSim.Data.SQLite;
|
||||||
|
|
||||||
|
|
||||||
namespace OpenSim.Data.Tests
|
namespace OpenSim.Data.Tests
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -37,10 +37,6 @@ using log4net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
|
||||||
#if !NUNIT25
|
|
||||||
using NUnit.Framework.SyntaxHelpers;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// DBMS-specific:
|
// DBMS-specific:
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using OpenSim.Data.MySQL;
|
using OpenSim.Data.MySQL;
|
||||||
|
|
|
@ -40,10 +40,6 @@ using log4net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
|
||||||
#if !NUNIT25
|
|
||||||
using NUnit.Framework.SyntaxHelpers;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// DBMS-specific:
|
// DBMS-specific:
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using OpenSim.Data.MySQL;
|
using OpenSim.Data.MySQL;
|
||||||
|
|
|
@ -218,24 +218,35 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
|
||||||
|
|
||||||
public bool AddItem(InventoryItemBase item)
|
public bool AddItem(InventoryItemBase item)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
"[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}",
|
// "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}",
|
||||||
item.Name, item.Owner, item.Folder);
|
// item.Name, item.Owner, item.Folder);
|
||||||
|
|
||||||
if (UUID.Zero == item.Folder)
|
if (UUID.Zero == item.Folder)
|
||||||
{
|
{
|
||||||
InventoryFolderBase f = m_InventoryService.GetFolderForType(item.Owner, (AssetType)item.AssetType);
|
InventoryFolderBase f = m_InventoryService.GetFolderForType(item.Owner, (AssetType)item.AssetType);
|
||||||
if (f != null)
|
if (f != null)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[LOCAL INVENTORY SERVICES CONNECTOR]: Found folder {0} type {1} for item {2}",
|
||||||
|
// f.Name, (AssetType)f.Type, item.Name);
|
||||||
|
|
||||||
item.Folder = f.ID;
|
item.Folder = f.ID;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
f = m_InventoryService.GetRootFolder(item.Owner);
|
f = m_InventoryService.GetRootFolder(item.Owner);
|
||||||
if (f != null)
|
if (f != null)
|
||||||
|
{
|
||||||
item.Folder = f.ID;
|
item.Folder = f.ID;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
// m_log.WarnFormat(
|
||||||
|
// "[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find root folder for {0} when trying to add item {1} with no parent folder specified",
|
||||||
|
// item.Owner, item.Name);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -240,9 +240,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
|
||||||
{
|
{
|
||||||
f = m_RemoteConnector.GetRootFolder(item.Owner);
|
f = m_RemoteConnector.GetRootFolder(item.Owner);
|
||||||
if (f != null)
|
if (f != null)
|
||||||
|
{
|
||||||
item.Folder = f.ID;
|
item.Folder = f.ID;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
m_log.WarnFormat(
|
||||||
|
"[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find root folder for {0} when trying to add item {1} with no parent folder specified",
|
||||||
|
item.Owner, item.Name);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[AGENT INVENTORY]: Agent {1} could not add item {2} {3}",
|
"[AGENT INVENTORY]: Agent {0} could not add item {1} {2}",
|
||||||
AgentID, item.Name, item.ID);
|
AgentID, item.Name, item.ID);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -2019,95 +2019,79 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SceneObjectPart sourcePart, TaskInventoryItem item,
|
SceneObjectPart sourcePart, TaskInventoryItem item,
|
||||||
Vector3 pos, Quaternion rot, Vector3 vel, int param)
|
Vector3 pos, Quaternion rot, Vector3 vel, int param)
|
||||||
{
|
{
|
||||||
// Rez object
|
if (null == item)
|
||||||
if (item != null)
|
return null;
|
||||||
|
|
||||||
|
UUID ownerID = item.OwnerID;
|
||||||
|
AssetBase rezAsset = AssetService.Get(item.AssetID.ToString());
|
||||||
|
|
||||||
|
if (null == rezAsset)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
string xmlData = Utils.BytesToString(rezAsset.Data);
|
||||||
|
SceneObjectGroup group = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
|
||||||
|
|
||||||
|
if (!Permissions.CanRezObject(group.Children.Count, ownerID, pos))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
group.ResetIDs();
|
||||||
|
|
||||||
|
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
||||||
|
|
||||||
|
// Since renaming the item in the inventory does not affect the name stored
|
||||||
|
// in the serialization, transfer the correct name from the inventory to the
|
||||||
|
// object itself before we rez.
|
||||||
|
rootPart.Name = item.Name;
|
||||||
|
rootPart.Description = item.Description;
|
||||||
|
|
||||||
|
List<SceneObjectPart> partList = new List<SceneObjectPart>(group.Children.Values);
|
||||||
|
|
||||||
|
group.SetGroup(sourcePart.GroupID, null);
|
||||||
|
|
||||||
|
if ((rootPart.OwnerID != item.OwnerID) || (item.CurrentPermissions & 16) != 0)
|
||||||
{
|
{
|
||||||
UUID ownerID = item.OwnerID;
|
if (Permissions.PropagatePermissions())
|
||||||
|
|
||||||
AssetBase rezAsset = AssetService.Get(item.AssetID.ToString());
|
|
||||||
|
|
||||||
if (rezAsset != null)
|
|
||||||
{
|
{
|
||||||
string xmlData = Utils.BytesToString(rezAsset.Data);
|
|
||||||
SceneObjectGroup group = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
|
|
||||||
|
|
||||||
if (!Permissions.CanRezObject(group.Children.Count, ownerID, pos))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
group.ResetIDs();
|
|
||||||
|
|
||||||
AddNewSceneObject(group, true);
|
|
||||||
|
|
||||||
// we set it's position in world.
|
|
||||||
group.AbsolutePosition = pos;
|
|
||||||
|
|
||||||
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
|
||||||
|
|
||||||
// Since renaming the item in the inventory does not affect the name stored
|
|
||||||
// in the serialization, transfer the correct name from the inventory to the
|
|
||||||
// object itself before we rez.
|
|
||||||
rootPart.Name = item.Name;
|
|
||||||
rootPart.Description = item.Description;
|
|
||||||
|
|
||||||
List<SceneObjectPart> partList = new List<SceneObjectPart>(group.Children.Values);
|
|
||||||
|
|
||||||
group.SetGroup(sourcePart.GroupID, null);
|
|
||||||
|
|
||||||
if ((rootPart.OwnerID != item.OwnerID) || (item.CurrentPermissions & 16) != 0)
|
|
||||||
{
|
|
||||||
if (Permissions.PropagatePermissions())
|
|
||||||
{
|
|
||||||
foreach (SceneObjectPart part in partList)
|
|
||||||
{
|
|
||||||
part.EveryoneMask = item.EveryonePermissions;
|
|
||||||
part.NextOwnerMask = item.NextPermissions;
|
|
||||||
}
|
|
||||||
group.ApplyNextOwnerPermissions();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (SceneObjectPart part in partList)
|
foreach (SceneObjectPart part in partList)
|
||||||
{
|
{
|
||||||
if ((part.OwnerID != item.OwnerID) || (item.CurrentPermissions & 16) != 0)
|
|
||||||
{
|
|
||||||
part.LastOwnerID = part.OwnerID;
|
|
||||||
part.OwnerID = item.OwnerID;
|
|
||||||
part.Inventory.ChangeInventoryOwner(item.OwnerID);
|
|
||||||
}
|
|
||||||
part.EveryoneMask = item.EveryonePermissions;
|
part.EveryoneMask = item.EveryonePermissions;
|
||||||
part.NextOwnerMask = item.NextPermissions;
|
part.NextOwnerMask = item.NextPermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
rootPart.TrimPermissions();
|
group.ApplyNextOwnerPermissions();
|
||||||
|
|
||||||
if (group.RootPart.Shape.PCode == (byte)PCode.Prim)
|
|
||||||
{
|
|
||||||
group.ClearPartAttachmentData();
|
|
||||||
}
|
|
||||||
|
|
||||||
group.UpdateGroupRotationR(rot);
|
|
||||||
|
|
||||||
//group.ApplyPhysics(m_physicalPrim);
|
|
||||||
if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero)
|
|
||||||
{
|
|
||||||
group.RootPart.ApplyImpulse((vel * group.GetMass()), false);
|
|
||||||
group.Velocity = vel;
|
|
||||||
rootPart.ScheduleFullUpdate();
|
|
||||||
}
|
|
||||||
group.CreateScriptInstances(param, true, DefaultScriptEngine, 2);
|
|
||||||
rootPart.ScheduleFullUpdate();
|
|
||||||
|
|
||||||
if (!Permissions.BypassPermissions())
|
|
||||||
{
|
|
||||||
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
|
||||||
sourcePart.Inventory.RemoveInventoryItem(item.ItemID);
|
|
||||||
}
|
|
||||||
return rootPart.ParentGroup;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
foreach (SceneObjectPart part in partList)
|
||||||
|
{
|
||||||
|
if ((part.OwnerID != item.OwnerID) || (item.CurrentPermissions & 16) != 0)
|
||||||
|
{
|
||||||
|
part.LastOwnerID = part.OwnerID;
|
||||||
|
part.OwnerID = item.OwnerID;
|
||||||
|
part.Inventory.ChangeInventoryOwner(item.OwnerID);
|
||||||
|
}
|
||||||
|
|
||||||
|
part.EveryoneMask = item.EveryonePermissions;
|
||||||
|
part.NextOwnerMask = item.NextPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
rootPart.TrimPermissions();
|
||||||
|
|
||||||
|
if (!Permissions.BypassPermissions())
|
||||||
|
{
|
||||||
|
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
||||||
|
sourcePart.Inventory.RemoveInventoryItem(item.ItemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
AddNewSceneObject(group, true, pos, rot, vel);
|
||||||
|
|
||||||
|
// We can only call this after adding the scene object, since the scene object references the scene
|
||||||
|
// to find out if scripts should be activated at all.
|
||||||
|
group.CreateScriptInstances(param, true, DefaultScriptEngine, 2);
|
||||||
|
|
||||||
|
group.ScheduleGroupForFullUpdate();
|
||||||
|
|
||||||
|
return rootPart.ParentGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool returnObjects(SceneObjectGroup[] returnobjects, UUID AgentId)
|
public virtual bool returnObjects(SceneObjectGroup[] returnobjects, UUID AgentId)
|
||||||
|
|
|
@ -42,7 +42,6 @@ using OpenMetaverse.Imaging;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
|
|
||||||
using OpenSim.Framework.Console;
|
using OpenSim.Framework.Console;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes.Scripting;
|
using OpenSim.Region.Framework.Scenes.Scripting;
|
||||||
|
@ -2053,6 +2052,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates);
|
return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add a newly created object to the scene.
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
/// This method does not send updates to the client - callers need to handle this themselves.
|
||||||
|
/// <param name="sceneObject"></param>
|
||||||
|
/// <param name="attachToBackup"></param>
|
||||||
|
/// <param name="pos">Position of the object</param>
|
||||||
|
/// <param name="rot">Rotation of the object</param>
|
||||||
|
/// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool AddNewSceneObject(
|
||||||
|
SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel)
|
||||||
|
{
|
||||||
|
return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete every object from the scene. This does not include attachments worn by avatars.
|
/// Delete every object from the scene. This does not include attachments worn by avatars.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -313,6 +313,42 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
|
return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add a newly created object to the scene.
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
/// This method does not send updates to the client - callers need to handle this themselves.
|
||||||
|
/// <param name="sceneObject"></param>
|
||||||
|
/// <param name="attachToBackup"></param>
|
||||||
|
/// <param name="pos">Position of the object</param>
|
||||||
|
/// <param name="rot">Rotation of the object</param>
|
||||||
|
/// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool AddNewSceneObject(
|
||||||
|
SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel)
|
||||||
|
{
|
||||||
|
AddNewSceneObject(sceneObject, true, false);
|
||||||
|
|
||||||
|
// we set it's position in world.
|
||||||
|
sceneObject.AbsolutePosition = pos;
|
||||||
|
|
||||||
|
if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim)
|
||||||
|
{
|
||||||
|
sceneObject.ClearPartAttachmentData();
|
||||||
|
}
|
||||||
|
|
||||||
|
sceneObject.UpdateGroupRotationR(rot);
|
||||||
|
|
||||||
|
//group.ApplyPhysics(m_physicalPrim);
|
||||||
|
if (sceneObject.RootPart.PhysActor != null && sceneObject.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero)
|
||||||
|
{
|
||||||
|
sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false);
|
||||||
|
sceneObject.Velocity = vel;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add an object to the scene. This will both update the scene, and send information about the
|
/// Add an object to the scene. This will both update the scene, and send information about the
|
||||||
/// new object to all clients interested in the scene.
|
/// new object to all clients interested in the scene.
|
||||||
|
|
|
@ -134,7 +134,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
sop.Text = RandomName();
|
sop.Text = RandomName();
|
||||||
sop.SitName = RandomName();
|
sop.SitName = RandomName();
|
||||||
sop.TouchName = RandomName();
|
sop.TouchName = RandomName();
|
||||||
sop.ObjectFlags |= (uint)PrimFlags.Phantom;
|
sop.Flags |= PrimFlags.Phantom;
|
||||||
|
|
||||||
SceneObjectGroup sog = new SceneObjectGroup(sop);
|
SceneObjectGroup sog = new SceneObjectGroup(sop);
|
||||||
scene.AddNewSceneObject(sog, false);
|
scene.AddNewSceneObject(sog, false);
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Timers;
|
||||||
|
using Timer=System.Timers.Timer;
|
||||||
|
using Nini.Config;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NUnit.Framework.SyntaxHelpers;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Assets;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Communications;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Region.CoreModules.Avatar.Inventory.Archiver;
|
||||||
|
using OpenSim.Region.CoreModules.World.Serialiser;
|
||||||
|
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
using OpenSim.Tests.Common.Mock;
|
||||||
|
using OpenSim.Tests.Common.Setup;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Framework.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class TaskInventoryTests
|
||||||
|
{
|
||||||
|
protected UserAccount CreateUser(Scene scene)
|
||||||
|
{
|
||||||
|
string userFirstName = "Jock";
|
||||||
|
string userLastName = "Stirrup";
|
||||||
|
string userPassword = "troll";
|
||||||
|
UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
|
||||||
|
return UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SceneObjectGroup CreateSO1(Scene scene, UUID ownerId)
|
||||||
|
{
|
||||||
|
string part1Name = "part1";
|
||||||
|
UUID part1Id = UUID.Parse("10000000-0000-0000-0000-000000000000");
|
||||||
|
SceneObjectPart part1
|
||||||
|
= new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero)
|
||||||
|
{ Name = part1Name, UUID = part1Id };
|
||||||
|
return new SceneObjectGroup(part1);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected TaskInventoryItem CreateSOItem1(Scene scene, SceneObjectPart part)
|
||||||
|
{
|
||||||
|
AssetNotecard nc = new AssetNotecard("Hello World!");
|
||||||
|
UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000");
|
||||||
|
UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000");
|
||||||
|
AssetBase ncAsset
|
||||||
|
= AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero);
|
||||||
|
scene.AssetService.Store(ncAsset);
|
||||||
|
TaskInventoryItem ncItem
|
||||||
|
= new TaskInventoryItem
|
||||||
|
{ Name = "ncItem", AssetID = ncAssetUuid, ItemID = ncItemUuid,
|
||||||
|
Type = (int)AssetType.Notecard, InvType = (int)InventoryType.Notecard };
|
||||||
|
part.Inventory.AddInventoryItem(ncItem, true);
|
||||||
|
|
||||||
|
return ncItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test MoveTaskInventoryItem where the item has no parent folder assigned.
|
||||||
|
/// </summary>
|
||||||
|
/// This should place it in the most suitable user folder.
|
||||||
|
[Test]
|
||||||
|
public void TestMoveTaskInventoryItem()
|
||||||
|
{
|
||||||
|
TestHelper.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene("inventory");
|
||||||
|
UserAccount user1 = CreateUser(scene);
|
||||||
|
SceneObjectGroup sog1 = CreateSO1(scene, user1.PrincipalID);
|
||||||
|
SceneObjectPart sop1 = sog1.RootPart;
|
||||||
|
TaskInventoryItem sopItem1 = CreateSOItem1(scene, sop1);
|
||||||
|
InventoryFolderBase folder
|
||||||
|
= InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0];
|
||||||
|
|
||||||
|
// Perform test
|
||||||
|
scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID);
|
||||||
|
|
||||||
|
InventoryItemBase ncUserItem
|
||||||
|
= InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem");
|
||||||
|
Assert.That(ncUserItem, Is.Not.Null, "Objects/ncItem was not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test MoveTaskInventoryItem where the item has no parent folder assigned.
|
||||||
|
/// </summary>
|
||||||
|
/// This should place it in the most suitable user folder.
|
||||||
|
[Test]
|
||||||
|
public void TestMoveTaskInventoryItemNoParent()
|
||||||
|
{
|
||||||
|
TestHelper.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene("inventory");
|
||||||
|
UserAccount user1 = CreateUser(scene);
|
||||||
|
SceneObjectGroup sog1 = CreateSO1(scene, user1.PrincipalID);
|
||||||
|
SceneObjectPart sop1 = sog1.RootPart;
|
||||||
|
TaskInventoryItem sopItem1 = CreateSOItem1(scene, sop1);
|
||||||
|
|
||||||
|
// Perform test
|
||||||
|
scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID);
|
||||||
|
|
||||||
|
InventoryItemBase ncUserItem
|
||||||
|
= InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Notecards/ncItem");
|
||||||
|
Assert.That(ncUserItem, Is.Not.Null, "Notecards/ncItem was not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -268,6 +268,8 @@ namespace OpenSim.Services.InventoryService
|
||||||
|
|
||||||
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
|
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[INVENTORY SERVICE]: Looking for folder type {0} for user {1}", type, userID);
|
||||||
|
|
||||||
InventoryFolderBase root = m_Database.getUserRootFolder(userID);
|
InventoryFolderBase root = m_Database.getUserRootFolder(userID);
|
||||||
if (root != null)
|
if (root != null)
|
||||||
{
|
{
|
||||||
|
@ -276,7 +278,12 @@ namespace OpenSim.Services.InventoryService
|
||||||
foreach (InventoryFolderBase folder in folders)
|
foreach (InventoryFolderBase folder in folders)
|
||||||
{
|
{
|
||||||
if (folder.Type == (short)type)
|
if (folder.Type == (short)type)
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[INVENTORY SERVICE]: Found folder {0} type {1}", folder.Name, (AssetType)folder.Type);
|
||||||
|
|
||||||
return folder;
|
return folder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,13 +37,9 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
public class MockInventoryService : IInventoryService
|
public class MockInventoryService : IInventoryService
|
||||||
{
|
{
|
||||||
public MockInventoryService()
|
public MockInventoryService() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public MockInventoryService(IConfigSource config)
|
public MockInventoryService(IConfigSource config) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <see cref="OpenSim.Framework.Communications.IInterServiceInventoryServices"/>
|
/// <see cref="OpenSim.Framework.Communications.IInterServiceInventoryServices"/>
|
||||||
|
@ -140,7 +136,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public bool AddItem(InventoryItemBase item)
|
public bool AddItem(InventoryItemBase item)
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool UpdateItem(InventoryItemBase item)
|
public bool UpdateItem(InventoryItemBase item)
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TestInventoryDataPlugin : IInventoryDataPlugin
|
public class TestInventoryDataPlugin : IInventoryDataPlugin
|
||||||
{
|
{
|
||||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
/// <value>
|
/// <value>
|
||||||
/// Inventory folders
|
/// Inventory folders
|
||||||
|
@ -84,14 +84,19 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
|
public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[MOCK INV DB]: Getting items in folder {0}", folderID);
|
InventoryFolderBase folder = m_folders[folderID];
|
||||||
|
|
||||||
|
m_log.DebugFormat("[MOCK INV DB]: Getting items in folder {0} {1}", folder.Name, folder.ID);
|
||||||
|
|
||||||
List<InventoryItemBase> items = new List<InventoryItemBase>();
|
List<InventoryItemBase> items = new List<InventoryItemBase>();
|
||||||
|
|
||||||
foreach (InventoryItemBase item in m_items.Values)
|
foreach (InventoryItemBase item in m_items.Values)
|
||||||
{
|
{
|
||||||
if (item.Folder == folderID)
|
if (item.Folder == folderID)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[MOCK INV DB]: getInventoryInFolder() adding item {0}", item.Name);
|
||||||
items.Add(item);
|
items.Add(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
|
@ -101,7 +106,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public InventoryFolderBase getUserRootFolder(UUID user)
|
public InventoryFolderBase getUserRootFolder(UUID user)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[MOCK INV DB]: Looking for root folder for {0}", user);
|
m_log.DebugFormat("[MOCK INV DB]: Looking for root folder for {0}", user);
|
||||||
|
|
||||||
InventoryFolderBase folder = null;
|
InventoryFolderBase folder = null;
|
||||||
m_rootFolders.TryGetValue(user, out folder);
|
m_rootFolders.TryGetValue(user, out folder);
|
||||||
|
@ -111,12 +116,22 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public List<InventoryFolderBase> getInventoryFolders(UUID parentID)
|
public List<InventoryFolderBase> getInventoryFolders(UUID parentID)
|
||||||
{
|
{
|
||||||
|
InventoryFolderBase parentFolder = m_folders[parentID];
|
||||||
|
|
||||||
|
m_log.DebugFormat("[MOCK INV DB]: Getting folders in folder {0} {1}", parentFolder.Name, parentFolder.ID);
|
||||||
|
|
||||||
List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
|
List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
|
||||||
|
|
||||||
foreach (InventoryFolderBase folder in m_folders.Values)
|
foreach (InventoryFolderBase folder in m_folders.Values)
|
||||||
{
|
{
|
||||||
if (folder.ParentID == parentID)
|
if (folder.ParentID == parentID)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[MOCK INV DB]: Found folder {0} {1} in {2} {3}",
|
||||||
|
folder.Name, folder.ID, parentFolder.Name, parentFolder.ID);
|
||||||
|
|
||||||
folders.Add(folder);
|
folders.Add(folder);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return folders;
|
return folders;
|
||||||
|
@ -137,6 +152,10 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public void addInventoryFolder(InventoryFolderBase folder)
|
public void addInventoryFolder(InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[MOCK INV DB]: Adding inventory folder {0} {1} type {2}",
|
||||||
|
folder.Name, folder.ID, (AssetType)folder.Type);
|
||||||
|
|
||||||
m_folders[folder.ID] = folder;
|
m_folders[folder.ID] = folder;
|
||||||
|
|
||||||
if (folder.ParentID == UUID.Zero)
|
if (folder.ParentID == UUID.Zero)
|
||||||
|
@ -166,8 +185,10 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public void addInventoryItem(InventoryItemBase item)
|
public void addInventoryItem(InventoryItemBase item)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
InventoryFolderBase folder = m_folders[item.Folder];
|
||||||
// "[MOCK INV DB]: Adding inventory item {0} {1} in {2}", item.Name, item.ID, item.Folder);
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[MOCK INV DB]: Adding inventory item {0} {1} in {2} {3}", item.Name, item.ID, folder.Name, folder.ID);
|
||||||
|
|
||||||
m_items[item.ID] = item;
|
m_items[item.ID] = item;
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,10 +285,16 @@ namespace OpenSim.Tests.Common.Setup
|
||||||
config.AddConfig("Modules");
|
config.AddConfig("Modules");
|
||||||
config.AddConfig("InventoryService");
|
config.AddConfig("InventoryService");
|
||||||
config.Configs["Modules"].Set("InventoryServices", "LocalInventoryServicesConnector");
|
config.Configs["Modules"].Set("InventoryServices", "LocalInventoryServicesConnector");
|
||||||
|
|
||||||
if (real)
|
if (real)
|
||||||
|
{
|
||||||
config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:InventoryService");
|
config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Services.InventoryService.dll:InventoryService");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Tests.Common.dll:MockInventoryService");
|
config.Configs["InventoryService"].Set("LocalServiceModule", "OpenSim.Tests.Common.dll:MockInventoryService");
|
||||||
|
}
|
||||||
|
|
||||||
config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
|
config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
|
||||||
inventoryService.Initialise(config);
|
inventoryService.Initialise(config);
|
||||||
inventoryService.AddRegion(testScene);
|
inventoryService.AddRegion(testScene);
|
||||||
|
|
|
@ -100,7 +100,7 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
|
||||||
[UserAccountService]
|
[UserAccountService]
|
||||||
; for the server connector
|
; for the server connector
|
||||||
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||||
; Realm = "usersaccounts"
|
; Realm = "useraccounts"
|
||||||
|
|
||||||
; These are for creating new accounts by the service
|
; These are for creating new accounts by the service
|
||||||
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||||
|
|
Loading…
Reference in New Issue