From 18aa2ea0c5ebd8d5131902ed9856e68f46e76e11 Mon Sep 17 00:00:00 2001 From: Arthur Valadares Date: Tue, 11 Aug 2009 12:07:54 -0300 Subject: * Improves SceneSetupHelper to allow the tester to choose a real or mock, inventory and asset, service modules. The boolean startServices was replaced with realServices string. If the string contains the word asset, it will start a real asset module, if it contains inventory, it starts a real inventory. Otherwise, it use mock (NullPlugin-like) objects, for tests that don't really need functionality. * SetupScene is now actually sharing the asset and inventory modules if the tester wishes to have multiple regions connected. To link regions, just start SetupScene with the same CommunicationManager for all scenes. SceneSetupHelper will hold a static reference to the modules and won't initialize them again, just run the scenes through the modules AddRegion, RegionLoaded and PostInitialize. * With the recent changes, both asset and inventory (and in the future, user) services should always be asked from the scene, not instantiated alone. The tests should reflect this new behavior and always start a scene. --- .../Tests/Cache/UserProfileCacheServiceTests.cs | 13 ++- .../Communications/Tests/LoginServiceTests.cs | 128 ++------------------- .../Framework/Communications/UserManagerBase.cs | 2 +- 3 files changed, 15 insertions(+), 128 deletions(-) (limited to 'OpenSim/Framework/Communications') diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs index fdc20dd..0402883 100644 --- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs @@ -54,6 +54,7 @@ namespace OpenSim.Framework.Communications.Tests CachedUserInfo nonExistingUserInfo; TestCommunicationsManager commsManager = new TestCommunicationsManager(); + Scene myScene = SceneSetupHelpers.SetupScene(commsManager, ""); // Check we can't retrieve info before it exists by uuid nonExistingUserInfo = commsManager.UserProfileCacheService.GetUserDetails(userId); @@ -116,7 +117,7 @@ namespace OpenSim.Framework.Communications.Tests { TestHelper.InMethod(); - Scene myScene = SceneSetupHelpers.SetupScene(); + Scene myScene = SceneSetupHelpers.SetupScene("inventory"); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); for (int i = 0 ; i < 50 ; i++) { @@ -132,7 +133,7 @@ namespace OpenSim.Framework.Communications.Tests { TestHelper.InMethod(); - Scene myScene = SceneSetupHelpers.SetupScene(); + Scene myScene = SceneSetupHelpers.SetupScene("inventory"); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); for (int i = 0 ; i < 50 ; i++) { @@ -154,7 +155,7 @@ namespace OpenSim.Framework.Communications.Tests { TestHelper.InMethod(); - Scene myScene = SceneSetupHelpers.SetupScene(); + Scene myScene = SceneSetupHelpers.SetupScene("inventory"); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); for (int i = 0 ; i < 50 ; i++) { @@ -190,7 +191,7 @@ namespace OpenSim.Framework.Communications.Tests { TestHelper.InMethod(); - Scene myScene = SceneSetupHelpers.SetupScene(); + Scene myScene = SceneSetupHelpers.SetupScene("inventory"); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); for (int i = 0 ; i < 50 ; i++) { @@ -256,7 +257,7 @@ namespace OpenSim.Framework.Communications.Tests { TestHelper.InMethod(); - Scene myScene = SceneSetupHelpers.SetupScene(); + Scene myScene = SceneSetupHelpers.SetupScene("inventory"); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); for (int i = 0 ; i < 50 ; i++) { @@ -297,7 +298,7 @@ namespace OpenSim.Framework.Communications.Tests TestHelper.InMethod(); //log4net.Config.XmlConfigurator.Configure(); - Scene myScene = SceneSetupHelpers.SetupScene(); + Scene myScene = SceneSetupHelpers.SetupScene("inventory"); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); for (int i = 0 ; i < 50 ; i++) { diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index 47e0293..9e181f3 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs @@ -36,6 +36,7 @@ using Nwc.XmlRpc; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Communications.Services; using OpenSim.Region.Communications.Local; +using OpenSim.Tests.Common.Setup; using OpenSim.Tests.Common.Mock; using OpenSim.Client.Linden; using OpenSim.Tests.Common; @@ -57,11 +58,12 @@ namespace OpenSim.Framework.Communications.Tests private string m_regionExternalName = "localhost"; private IPEndPoint m_capsEndPoint; - private CommunicationsManager m_commsManager; + private TestCommunicationsManager m_commsManager; private TestLoginToRegionConnector m_regionConnector; private LocalUserServices m_localUserServices; private LoginService m_loginService; private UserProfileData m_userProfileData; + private TestScene m_testScene; [SetUp] public void SetUpLoginEnviroment() @@ -69,13 +71,16 @@ namespace OpenSim.Framework.Communications.Tests m_capsEndPoint = new IPEndPoint(IPAddress.Loopback, 9123); m_commsManager = new TestCommunicationsManager(new NetworkServersInfo(42, 43)); m_regionConnector = new TestLoginToRegionConnector(); + m_testScene = SceneSetupHelpers.SetupScene(m_commsManager, ""); m_regionConnector.AddRegion(new RegionInfo(42, 43, m_capsEndPoint, m_regionExternalName)); + //IInventoryService m_inventoryService = new TestInventoryService(); + m_localUserServices = (LocalUserServices) m_commsManager.UserService; m_localUserServices.AddUser(m_firstName,m_lastName,"boingboing","abc@ftw.com",42,43); - m_loginService = new LLStandaloneLoginService((UserManagerBase) m_localUserServices, "Hello folks", new TestInventoryService(), + m_loginService = new LLStandaloneLoginService((UserManagerBase) m_localUserServices, "Hello folks", m_testScene.InventoryService, m_commsManager.NetworkServersInfo, true, new LibraryRootFolder(String.Empty), m_regionConnector); m_userProfileData = m_localUserServices.GetUserProfile(m_firstName, m_lastName); @@ -442,123 +447,4 @@ namespace OpenSim.Framework.Communications.Tests #endregion } } - - class TestInventoryService : IInventoryService - { - public TestInventoryService() - { - } - - /// - /// - /// - /// - /// - public bool CreateUserInventory(UUID userId) - { - return false; - } - - /// - /// - /// - /// - /// - public List GetInventorySkeleton(UUID userId) - { - List folders = new List(); - InventoryFolderBase folder = new InventoryFolderBase(); - folder.ID = UUID.Random(); - folder.Owner = userId; - folders.Add(folder); - return folders; - } - - /// - /// Returns a list of all the active gestures in a user's inventory. - /// - /// - /// The of the user - /// - /// - /// A flat list of the gesture items. - /// - public List GetActiveGestures(UUID userId) - { - return null; - } - - public InventoryCollection GetUserInventory(UUID userID) - { - return null; - } - - public void GetUserInventory(UUID userID, OpenSim.Services.Interfaces.InventoryReceiptCallback callback) - { - } - - public List GetFolderItems(UUID userID, UUID folderID) - { - return null; - } - - public bool AddFolder(InventoryFolderBase folder) - { - return false; - } - - public bool UpdateFolder(InventoryFolderBase folder) - { - return false; - } - - public bool MoveFolder(InventoryFolderBase folder) - { - return false; - } - - public bool PurgeFolder(InventoryFolderBase folder) - { - return false; - } - - public bool AddItem(InventoryItemBase item) - { - return false; - } - - public bool UpdateItem(InventoryItemBase item) - { - return false; - } - - public bool DeleteItem(InventoryItemBase item) - { - return false; - } - - public InventoryItemBase QueryItem(InventoryItemBase item) - { - return null; - } - - public InventoryFolderBase QueryFolder(InventoryFolderBase folder) - { - return null; - } - - public bool HasInventoryForUser(UUID userID) - { - return false; - } - - public InventoryFolderBase RequestRootFolder(UUID userID) - { - InventoryFolderBase root = new InventoryFolderBase(); - root.ID = UUID.Random(); - root.Owner = userID; - root.ParentID = UUID.Zero; - return root; - } - } } diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs index bd5d0e3..b9044eb 100644 --- a/OpenSim/Framework/Communications/UserManagerBase.cs +++ b/OpenSim/Framework/Communications/UserManagerBase.cs @@ -698,7 +698,7 @@ namespace OpenSim.Framework.Communications if (rootfolder != null) userProf.RootInventoryFolderID = rootfolder.ID; } - else if (m_commsManager.InterServiceInventoryService != null) + else { // used by the user server m_log.Debug("[USERSTORAGE]: using m_commsManager.InterServiceInventoryService to create user's inventory"); -- cgit v1.1 From 226c082ed417f4a5f2295595e45eca2fcb1e42c9 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 11 Aug 2009 16:45:16 +0100 Subject: Establish CachedUserInfo.OnInventoryReceived event so that region/test inventory code can be written with the async inventory fetch --- .../Communications/Cache/CachedUserInfo.cs | 19 ++++- .../Tests/Cache/UserProfileCacheServiceTests.cs | 96 ++++++++++++---------- 2 files changed, 68 insertions(+), 47 deletions(-) (limited to 'OpenSim/Framework/Communications') diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 10aff42..8ee1b1a 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -49,16 +49,24 @@ namespace OpenSim.Framework.Communications.Cache IClientAPI client, UUID folderID, bool fetchFolders, bool fetchItems); public delegate void OnItemReceivedDelegate(UUID itemID); + public delegate void OnInventoryReceivedDelegate(UUID userID); /// /// Stores user profile and inventory data received from backend services for a particular user. /// public class CachedUserInfo - { + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + //// + /// Fired when a particular item has been received from the inventory service + /// public event OnItemReceivedDelegate OnItemReceived; - private static readonly ILog m_log - = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + /// + /// Fired once the entire inventory has been received for the user + /// + public event OnInventoryReceivedDelegate OnInventoryReceived; /// /// The comms manager holds references to services (user, grid, inventory, etc.) @@ -133,7 +141,9 @@ namespace OpenSim.Framework.Communications.Cache UUID parentFolderId = folder.ParentID; if (dictionary.ContainsKey(parentFolderId)) + { dictionary[parentFolderId].Add(folder); + } else { IList folders = new List(); @@ -299,6 +309,9 @@ namespace OpenSim.Framework.Communications.Cache request.Execute(); } } + + if (OnInventoryReceived != null) + OnInventoryReceived(UserProfile.ID); } /// diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs index 0402883..fe88cf5 100644 --- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs @@ -43,6 +43,18 @@ namespace OpenSim.Framework.Communications.Tests [TestFixture] public class UserProfileCacheServiceTests { + /// Used by tests to indicate whether an async operation timed out + private bool timedOut; + + private void InventoryReceived(UUID userId) + { + lock (this) + { + timedOut = false; + Monitor.PulseAll(this); + } + } + [Test] public void TestGetUserDetails() { @@ -118,14 +130,15 @@ namespace OpenSim.Framework.Communications.Tests TestHelper.InMethod(); Scene myScene = SceneSetupHelpers.SetupScene("inventory"); - CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); - for (int i = 0 ; i < 50 ; i++) - { - if (userInfo.HasReceivedInventory == true) - break; - Thread.Sleep(200); - } - Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)"); + + timedOut = true; + lock (this) + { + UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived); + Monitor.Wait(this, 60000); + } + + Assert.That(timedOut, Is.False, "Timed out"); } [Test] @@ -134,14 +147,13 @@ namespace OpenSim.Framework.Communications.Tests TestHelper.InMethod(); Scene myScene = SceneSetupHelpers.SetupScene("inventory"); - CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); - for (int i = 0 ; i < 50 ; i++) - { - if (userInfo.HasReceivedInventory == true) - break; - Thread.Sleep(200); + CachedUserInfo userInfo; + + lock (this) + { + userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived); + Monitor.Wait(this, 60000); } - Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)"); UUID folderId = UUID.Parse("00000000-0000-0000-0000-000000000011"); Assert.That(userInfo.RootFolder.GetChildFolder(folderId), Is.Null); @@ -156,14 +168,13 @@ namespace OpenSim.Framework.Communications.Tests TestHelper.InMethod(); Scene myScene = SceneSetupHelpers.SetupScene("inventory"); - CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); - for (int i = 0 ; i < 50 ; i++) - { - if (userInfo.HasReceivedInventory == true) - break; - Thread.Sleep(200); + CachedUserInfo userInfo; + + lock (this) + { + userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived); + Monitor.Wait(this, 60000); } - Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)"); UUID folderId = UUID.Parse("00000000-0000-0000-0000-000000000010"); Assert.That(userInfo.RootFolder.ContainsChildFolder(folderId), Is.False); @@ -192,14 +203,13 @@ namespace OpenSim.Framework.Communications.Tests TestHelper.InMethod(); Scene myScene = SceneSetupHelpers.SetupScene("inventory"); - CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); - for (int i = 0 ; i < 50 ; i++) - { - if (userInfo.HasReceivedInventory == true) - break; - Thread.Sleep(200); + CachedUserInfo userInfo; + + lock (this) + { + userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived); + Monitor.Wait(this, 60000); } - Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)"); UUID folder1Id = UUID.Parse("00000000-0000-0000-0000-000000000060"); InventoryFolderImpl rootFolder = userInfo.RootFolder; @@ -258,14 +268,13 @@ namespace OpenSim.Framework.Communications.Tests TestHelper.InMethod(); Scene myScene = SceneSetupHelpers.SetupScene("inventory"); - CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); - for (int i = 0 ; i < 50 ; i++) - { - if (userInfo.HasReceivedInventory == true) - break; - Thread.Sleep(200); + CachedUserInfo userInfo; + + lock (this) + { + userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived); + Monitor.Wait(this, 60000); } - Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)"); UUID folder1Id = UUID.Parse("00000000-0000-0000-0000-000000000020"); UUID folder2Id = UUID.Parse("00000000-0000-0000-0000-000000000021"); @@ -299,14 +308,13 @@ namespace OpenSim.Framework.Communications.Tests //log4net.Config.XmlConfigurator.Configure(); Scene myScene = SceneSetupHelpers.SetupScene("inventory"); - CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager); - for (int i = 0 ; i < 50 ; i++) - { - if (userInfo.HasReceivedInventory == true) - break; - Thread.Sleep(200); + CachedUserInfo userInfo; + + lock (this) + { + userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived); + Monitor.Wait(this, 60000); } - Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)"); UUID folder1Id = UUID.Parse("00000000-0000-0000-0000-000000000070"); InventoryFolderImpl rootFolder = userInfo.RootFolder; @@ -323,4 +331,4 @@ namespace OpenSim.Framework.Communications.Tests Assert.That(myScene.InventoryService.QueryFolder(myFolder), Is.Null); } } -} +} \ No newline at end of file -- cgit v1.1