Add regression test for inventory item give, reject and subsequent trash folder purge by receiver.
This commit also actually adds the InventoryTransferModuleTests file which I previously forgotuser_profiles
parent
a7cbb9edc9
commit
0beccf23c0
|
@ -0,0 +1,256 @@
|
||||||
|
/*
|
||||||
|
* 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 log4net.Config;
|
||||||
|
using Nini.Config;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Assets;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.CoreModules.Avatar.Inventory.Transfer;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
using OpenSim.Tests.Common.Mock;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class InventoryTransferModuleTests : OpenSimTestCase
|
||||||
|
{
|
||||||
|
protected TestScene m_scene;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public override void SetUp()
|
||||||
|
{
|
||||||
|
base.SetUp();
|
||||||
|
|
||||||
|
IConfigSource config = new IniConfigSource();
|
||||||
|
config.AddConfig("Messaging");
|
||||||
|
config.Configs["Messaging"].Set("InventoryTransferModule", "InventoryTransferModule");
|
||||||
|
|
||||||
|
m_scene = new SceneHelpers().SetupScene();
|
||||||
|
SceneHelpers.SetupSceneModules(m_scene, config, new InventoryTransferModule());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestAcceptGivenItem()
|
||||||
|
{
|
||||||
|
// TestHelpers.EnableLogging();
|
||||||
|
|
||||||
|
UUID initialSessionId = TestHelpers.ParseTail(0x10);
|
||||||
|
UUID itemId = TestHelpers.ParseTail(0x100);
|
||||||
|
UUID assetId = TestHelpers.ParseTail(0x200);
|
||||||
|
|
||||||
|
UserAccount ua1
|
||||||
|
= UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "One", TestHelpers.ParseTail(0x1), "pw");
|
||||||
|
UserAccount ua2
|
||||||
|
= UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "Two", TestHelpers.ParseTail(0x2), "pw");
|
||||||
|
|
||||||
|
ScenePresence giverSp = SceneHelpers.AddScenePresence(m_scene, ua1);
|
||||||
|
TestClient giverClient = (TestClient)giverSp.ControllingClient;
|
||||||
|
|
||||||
|
ScenePresence receiverSp = SceneHelpers.AddScenePresence(m_scene, ua2);
|
||||||
|
TestClient receiverClient = (TestClient)receiverSp.ControllingClient;
|
||||||
|
|
||||||
|
// Create the object to test give
|
||||||
|
InventoryItemBase originalItem
|
||||||
|
= UserInventoryHelpers.CreateInventoryItem(
|
||||||
|
m_scene, "givenObj", itemId, assetId, giverSp.UUID, InventoryType.Object);
|
||||||
|
|
||||||
|
byte[] giveImBinaryBucket = new byte[17];
|
||||||
|
byte[] itemIdBytes = itemId.GetBytes();
|
||||||
|
Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length);
|
||||||
|
|
||||||
|
GridInstantMessage giveIm
|
||||||
|
= new GridInstantMessage(
|
||||||
|
m_scene,
|
||||||
|
giverSp.UUID,
|
||||||
|
giverSp.Name,
|
||||||
|
receiverSp.UUID,
|
||||||
|
(byte)InstantMessageDialog.InventoryOffered,
|
||||||
|
false,
|
||||||
|
"inventory offered msg",
|
||||||
|
initialSessionId,
|
||||||
|
false,
|
||||||
|
Vector3.Zero,
|
||||||
|
giveImBinaryBucket,
|
||||||
|
true);
|
||||||
|
|
||||||
|
giverClient.HandleImprovedInstantMessage(giveIm);
|
||||||
|
|
||||||
|
// These details might not all be correct.
|
||||||
|
GridInstantMessage acceptIm
|
||||||
|
= new GridInstantMessage(
|
||||||
|
m_scene,
|
||||||
|
receiverSp.UUID,
|
||||||
|
receiverSp.Name,
|
||||||
|
giverSp.UUID,
|
||||||
|
(byte)InstantMessageDialog.InventoryAccepted,
|
||||||
|
false,
|
||||||
|
"inventory accepted msg",
|
||||||
|
initialSessionId,
|
||||||
|
false,
|
||||||
|
Vector3.Zero,
|
||||||
|
null,
|
||||||
|
true);
|
||||||
|
|
||||||
|
receiverClient.HandleImprovedInstantMessage(acceptIm);
|
||||||
|
|
||||||
|
// Test for item remaining in the giver's inventory (here we assume a copy item)
|
||||||
|
// TODO: Test no-copy items.
|
||||||
|
InventoryItemBase originalItemAfterGive
|
||||||
|
= UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
|
||||||
|
|
||||||
|
Assert.That(originalItemAfterGive, Is.Not.Null);
|
||||||
|
Assert.That(originalItemAfterGive.ID, Is.EqualTo(originalItem.ID));
|
||||||
|
|
||||||
|
// Test for item successfully making it into the receiver's inventory
|
||||||
|
InventoryItemBase receivedItem
|
||||||
|
= UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, receiverSp.UUID, "Objects/givenObj");
|
||||||
|
|
||||||
|
Assert.That(receivedItem, Is.Not.Null);
|
||||||
|
Assert.That(receivedItem.ID, Is.Not.EqualTo(originalItem.ID));
|
||||||
|
|
||||||
|
// Test that on a delete, item still exists and is accessible for the giver.
|
||||||
|
m_scene.InventoryService.DeleteItems(receiverSp.UUID, new List<UUID>() { receivedItem.ID });
|
||||||
|
|
||||||
|
InventoryItemBase originalItemAfterDelete
|
||||||
|
= UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
|
||||||
|
|
||||||
|
Assert.That(originalItemAfterDelete, Is.Not.Null);
|
||||||
|
|
||||||
|
// TODO: Test scenario where giver deletes their item first.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test user rejection of a given item.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// A rejected item still ends up in the user's trash folder.
|
||||||
|
/// </remarks>
|
||||||
|
[Test]
|
||||||
|
public void TestRejectGivenItem()
|
||||||
|
{
|
||||||
|
// TestHelpers.EnableLogging();
|
||||||
|
|
||||||
|
UUID initialSessionId = TestHelpers.ParseTail(0x10);
|
||||||
|
UUID itemId = TestHelpers.ParseTail(0x100);
|
||||||
|
UUID assetId = TestHelpers.ParseTail(0x200);
|
||||||
|
|
||||||
|
UserAccount ua1
|
||||||
|
= UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "One", TestHelpers.ParseTail(0x1), "pw");
|
||||||
|
UserAccount ua2
|
||||||
|
= UserAccountHelpers.CreateUserWithInventory(m_scene, "User", "Two", TestHelpers.ParseTail(0x2), "pw");
|
||||||
|
|
||||||
|
ScenePresence giverSp = SceneHelpers.AddScenePresence(m_scene, ua1);
|
||||||
|
TestClient giverClient = (TestClient)giverSp.ControllingClient;
|
||||||
|
|
||||||
|
ScenePresence receiverSp = SceneHelpers.AddScenePresence(m_scene, ua2);
|
||||||
|
TestClient receiverClient = (TestClient)receiverSp.ControllingClient;
|
||||||
|
|
||||||
|
// Create the object to test give
|
||||||
|
InventoryItemBase originalItem
|
||||||
|
= UserInventoryHelpers.CreateInventoryItem(
|
||||||
|
m_scene, "givenObj", itemId, assetId, giverSp.UUID, InventoryType.Object);
|
||||||
|
|
||||||
|
GridInstantMessage receivedIm = null;
|
||||||
|
receiverClient.OnReceivedInstantMessage += im => receivedIm = im;
|
||||||
|
|
||||||
|
byte[] giveImBinaryBucket = new byte[17];
|
||||||
|
byte[] itemIdBytes = itemId.GetBytes();
|
||||||
|
Array.Copy(itemIdBytes, 0, giveImBinaryBucket, 1, itemIdBytes.Length);
|
||||||
|
|
||||||
|
GridInstantMessage giveIm
|
||||||
|
= new GridInstantMessage(
|
||||||
|
m_scene,
|
||||||
|
giverSp.UUID,
|
||||||
|
giverSp.Name,
|
||||||
|
receiverSp.UUID,
|
||||||
|
(byte)InstantMessageDialog.InventoryOffered,
|
||||||
|
false,
|
||||||
|
"inventory offered msg",
|
||||||
|
initialSessionId,
|
||||||
|
false,
|
||||||
|
Vector3.Zero,
|
||||||
|
giveImBinaryBucket,
|
||||||
|
true);
|
||||||
|
|
||||||
|
giverClient.HandleImprovedInstantMessage(giveIm);
|
||||||
|
|
||||||
|
// These details might not all be correct.
|
||||||
|
// Session ID is now the created item ID (!)
|
||||||
|
GridInstantMessage rejectIm
|
||||||
|
= new GridInstantMessage(
|
||||||
|
m_scene,
|
||||||
|
receiverSp.UUID,
|
||||||
|
receiverSp.Name,
|
||||||
|
giverSp.UUID,
|
||||||
|
(byte)InstantMessageDialog.InventoryDeclined,
|
||||||
|
false,
|
||||||
|
"inventory declined msg",
|
||||||
|
new UUID(receivedIm.imSessionID),
|
||||||
|
false,
|
||||||
|
Vector3.Zero,
|
||||||
|
null,
|
||||||
|
true);
|
||||||
|
|
||||||
|
receiverClient.HandleImprovedInstantMessage(rejectIm);
|
||||||
|
|
||||||
|
// Test for item remaining in the giver's inventory (here we assume a copy item)
|
||||||
|
// TODO: Test no-copy items.
|
||||||
|
InventoryItemBase originalItemAfterGive
|
||||||
|
= UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
|
||||||
|
|
||||||
|
Assert.That(originalItemAfterGive, Is.Not.Null);
|
||||||
|
Assert.That(originalItemAfterGive.ID, Is.EqualTo(originalItem.ID));
|
||||||
|
|
||||||
|
// Test for item successfully making it into the receiver's inventory
|
||||||
|
InventoryItemBase receivedItem
|
||||||
|
= UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, receiverSp.UUID, "Trash/givenObj");
|
||||||
|
|
||||||
|
InventoryFolderBase trashFolder
|
||||||
|
= m_scene.InventoryService.GetFolderForType(receiverSp.UUID, AssetType.TrashFolder);
|
||||||
|
|
||||||
|
Assert.That(receivedItem, Is.Not.Null);
|
||||||
|
Assert.That(receivedItem.ID, Is.Not.EqualTo(originalItem.ID));
|
||||||
|
Assert.That(receivedItem.Folder, Is.EqualTo(trashFolder.ID));
|
||||||
|
|
||||||
|
// Test that on a delete, item still exists and is accessible for the giver.
|
||||||
|
m_scene.InventoryService.PurgeFolder(trashFolder);
|
||||||
|
|
||||||
|
InventoryItemBase originalItemAfterDelete
|
||||||
|
= UserInventoryHelpers.GetInventoryItem(m_scene.InventoryService, giverSp.UUID, "Objects/givenObj");
|
||||||
|
|
||||||
|
Assert.That(originalItemAfterDelete, Is.Not.Null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,6 +61,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
// Test client specific events - for use by tests to implement some IClientAPI behaviour.
|
// Test client specific events - for use by tests to implement some IClientAPI behaviour.
|
||||||
public event Action<RegionInfo, Vector3, Vector3> OnReceivedMoveAgentIntoRegion;
|
public event Action<RegionInfo, Vector3, Vector3> OnReceivedMoveAgentIntoRegion;
|
||||||
public event Action<ulong, IPEndPoint> OnTestClientInformClientOfNeighbour;
|
public event Action<ulong, IPEndPoint> OnTestClientInformClientOfNeighbour;
|
||||||
|
public event Action<GridInstantMessage> OnReceivedInstantMessage;
|
||||||
|
|
||||||
// disable warning: public events, part of the public API
|
// disable warning: public events, part of the public API
|
||||||
#pragma warning disable 67
|
#pragma warning disable 67
|
||||||
|
@ -550,7 +551,8 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
|
|
||||||
public void SendInstantMessage(GridInstantMessage im)
|
public void SendInstantMessage(GridInstantMessage im)
|
||||||
{
|
{
|
||||||
|
if (OnReceivedInstantMessage != null)
|
||||||
|
OnReceivedInstantMessage(im);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendGenericMessage(string method, UUID invoice, List<string> message)
|
public void SendGenericMessage(string method, UUID invoice, List<string> message)
|
||||||
|
|
Loading…
Reference in New Issue