From 81bccd6d132956e2de9e5ad473f87931df76cde8 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 14 Dec 2010 23:36:34 +0000
Subject: Start implementing a test for 'share with group' object
 functionality.  Not yet complete.

While implementing this, a bug was fixed in scene setup helpers where module RegionLoaded() was called immediately after AddRegion() instead of waiting for all AddRegions() to complete.
Also, XmlRpcGroupsModule non-message functionality will now work without a message transfer module (as indicated in the comments but with a contradictory implementation)
---
 .../Scenes/Tests/SceneObjectUserGroupTests.cs      | 87 ++++++++++++++++++++++
 .../Avatar/XmlRpcGroups/GroupsModule.cs            |  6 +-
 .../Common/Mock/MockGroupsServicesConnector.cs     |  5 +-
 OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs    |  5 +-
 4 files changed, 96 insertions(+), 7 deletions(-)
 create mode 100644 OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs

(limited to 'OpenSim')

diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs
new file mode 100644
index 0000000..bceacda
--- /dev/null
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs
@@ -0,0 +1,87 @@
+/*
+ * 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 Nini.Config;
+using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Communications;
+using OpenSim.Region.CoreModules.Avatar.InstantMessage;
+using OpenSim.Region.CoreModules.World.Permissions;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
+using OpenSim.Tests.Common.Setup;
+
+namespace OpenSim.Region.Framework.Scenes.Tests
+{
+    [TestFixture]
+    public class SceneObjectUserGroupTests
+    {
+        /// <summary>
+        /// Test share with group object functionality
+        /// </summary>
+        /// <remarks>This test is not yet fully implemented</remarks>
+        [Test]
+        public void TestShareWithGroup()
+        {
+            TestHelper.InMethod();
+            log4net.Config.XmlConfigurator.Configure();
+                        
+            UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
+            
+            TestScene scene = SceneSetupHelpers.SetupScene();
+            IConfigSource configSource = new IniConfigSource();
+            
+            IConfig startupConfig = configSource.AddConfig("Startup");
+            startupConfig.Set("serverside_object_permissions", true);
+            
+            IConfig groupsConfig = configSource.AddConfig("Groups");            
+            groupsConfig.Set("Enabled", true);
+            groupsConfig.Set("Module", "GroupsModule");            
+            groupsConfig.Set("DebugEnabled", true);            
+                       
+            SceneSetupHelpers.SetupSceneModules(
+                scene, configSource, new object[] 
+                   { new PermissionsModule(), 
+                     new GroupsModule(), 
+                     new MockGroupsServicesConnector() });
+            
+            TestClient client = SceneSetupHelpers.AddRootAgent(scene, userId);            
+            
+            IGroupsModule groupsModule = scene.RequestModuleInterface<IGroupsModule>();     
+            
+            groupsModule.CreateGroup(client, "group1", "To boldly go", true, UUID.Zero, 5, true, true, true);
+        }
+    }
+}
\ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index ccf5289..4aab87f 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -163,9 +163,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                 if (m_msgTransferModule == null)
                 {
                     m_groupsEnabled = false;
-                    m_log.Error("[GROUPS]: Could not get MessageTransferModule");
-                    Close();
-                    return;
+                    m_log.Warn("[GROUPS]: Could not get MessageTransferModule");
                 }
             }
 
@@ -1299,7 +1297,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                 if (m_debugEnabled) m_log.InfoFormat("[GROUPS]: MsgTo ({0}) is local, delivering directly", localClient.Name);
                 localClient.SendInstantMessage(msg);
             }
-            else
+            else if (m_msgTransferModule != null)
             {
                 if (m_debugEnabled) m_log.InfoFormat("[GROUPS]: MsgTo ({0}) is not local, delivering via TransferModule", msgTo);
                 m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: Message Sent: {0}", success?"Succeeded":"Failed"); });
diff --git a/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs b/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs
index aa48754..6fb9df1 100644
--- a/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs
+++ b/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs
@@ -42,7 +42,7 @@ namespace OpenSim.Tests.Common.Mock
     [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
     public class MockGroupsServicesConnector : ISharedRegionModule, IGroupsServicesConnector
     {
-//        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 
         public string Name
         {
@@ -64,6 +64,7 @@ namespace OpenSim.Tests.Common.Mock
 
         public void AddRegion(Scene scene)
         {
+            m_log.DebugFormat("[MOCK GROUPS SERVICES CONNECTOR]: Adding to region {0}", scene.RegionInfo.RegionName);
             scene.RegisterModuleInterface<IGroupsServicesConnector>(this);
         }
 
@@ -174,7 +175,7 @@ namespace OpenSim.Tests.Common.Mock
 
         public List<GroupMembershipData> GetAgentGroupMemberships(UUID requestingAgentID, UUID AgentID)
         {
-            return null;
+            return new List<GroupMembershipData>();
         }
 
         public List<GroupRolesData> GetAgentGroupRoles(UUID requestingAgentID, UUID AgentID, UUID GroupID)
diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
index 9d7733e..8b16496 100644
--- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
+++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
@@ -424,9 +424,12 @@ namespace OpenSim.Tests.Common.Setup
             foreach (IRegionModuleBase module in newModules)
             {
                 module.AddRegion(scene);
-                module.RegionLoaded(scene);
                 scene.AddRegionModule(module.Name, module);
             }
+            
+            // RegionLoaded is fired after all modules have been appropriately added to all scenes
+            foreach (IRegionModuleBase module in newModules)
+                module.RegionLoaded(scene);                
 
             scene.SetModuleInterfaces();
         }
-- 
cgit v1.1