Add automated test at the opensim 'api' level to check that a given item goes to the correct directory

Also removes some mono compiler warnings
prebuild-update
Justin Clark-Casey (justincc) 2010-08-24 16:50:31 +01:00
parent c72d298202
commit 289c21099c
11 changed files with 170 additions and 32 deletions

View File

@ -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
{ {

View File

@ -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;

View File

@ -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;

View File

@ -218,26 +218,37 @@ 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;
} }
} }
}
return m_InventoryService.AddItem(item); return m_InventoryService.AddItem(item);
} }

View File

@ -240,11 +240,18 @@ 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;
} }
} }
}
return m_RemoteConnector.AddItem(item); return m_RemoteConnector.AddItem(item);
} }

View File

@ -106,7 +106,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;

View File

@ -0,0 +1,104 @@
/*
* 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.Tests.Common;
using OpenSim.Tests.Common.Mock;
using OpenSim.Tests.Common.Setup;
namespace OpenSim.Region.Framework.Tests
{
[TestFixture]
public class TaskInventoryTests
{
/// <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");
// Create user
string userFirstName = "Jock";
string userLastName = "Stirrup";
string userPassword = "troll";
UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword);
// Create scene object
string part1Name = "part1";
UUID part1Id = UUID.Parse("10000000-0000-0000-0000-000000000000");
SceneObjectPart part1
= new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero)
{ Name = part1Name, UUID = part1Id };
SceneObjectGroup so = new SceneObjectGroup(part1);
// Create scene object inventory item
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 };
part1.Inventory.AddInventoryItem(ncItem, true);
// Perform test
scene.MoveTaskInventoryItem(userId, UUID.Zero, part1, ncItemUuid);
InventoryItemBase ncUserItem
= InventoryArchiveUtils.FindItemByPath(scene.InventoryService, userId, "Notecards/ncItem");
Assert.That(ncUserItem, Is.Not.Null, "Notecards/ncItem was not found");
}
}
}

View File

@ -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,9 +278,14 @@ 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;
} }
} }
}
// we didn't find any folder of that type. Return the root folder // we didn't find any folder of that type. Return the root folder
// hopefully the root folder is not null. If it is, too bad // hopefully the root folder is not null. If it is, too bad

View File

@ -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)

View File

@ -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,15 +84,20 @@ 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,13 +116,23 @@ 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;
} }

View File

@ -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);