diff --git a/.nant/local.include b/.nant/local.include
index 97c0c0fb56..03dc1b9f1d 100644
--- a/.nant/local.include
+++ b/.nant/local.include
@@ -128,6 +128,11 @@
+
+
+
+
+
@@ -201,6 +206,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -298,6 +314,11 @@
+
+
+
+
+
@@ -314,6 +335,7 @@
+
@@ -338,6 +360,7 @@
+
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
similarity index 100%
rename from OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserTests.cs
rename to OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs
new file mode 100644
index 0000000000..c78038f7a7
--- /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
+ {
+ ///
+ /// Test share with group object functionality
+ ///
+ /// This test is not yet fully implemented
+ [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();
+
+ 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 ccf52892dc..4aab87fb3c 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/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs
index a046e094cd..5c779debc5 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs
@@ -27,14 +27,12 @@
using System;
using System.Collections.Generic;
-
using OpenMetaverse;
-
using OpenSim.Framework;
namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
{
- interface IGroupsServicesConnector
+ public interface IGroupsServicesConnector
{
UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish, UUID founderID);
void UpdateGroup(UUID RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish);
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/Tests/GroupsModuleTests.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/Tests/GroupsModuleTests.cs
new file mode 100644
index 0000000000..bc55b04743
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/Tests/GroupsModuleTests.cs
@@ -0,0 +1,65 @@
+/*
+ * 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.Reflection;
+using Nini.Config;
+using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Communications;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
+using OpenSim.Tests.Common.Setup;
+
+namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.Tests
+{
+ ///
+ /// Basic groups module tests
+ ///
+ [TestFixture]
+ public class GroupsModuleTests
+ {
+ [Test]
+ public void TestBasic()
+ {
+ TestHelper.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestScene scene = SceneSetupHelpers.SetupScene();
+ IConfigSource configSource = new IniConfigSource();
+ IConfig config = configSource.AddConfig("Groups");
+ config.Set("Enabled", true);
+ config.Set("Module", "GroupsModule");
+ config.Set("DebugEnabled", true);
+ SceneSetupHelpers.SetupSceneModules(
+ scene, configSource, new object[] { new MockGroupsServicesConnector() });
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs b/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs
new file mode 100644
index 0000000000..6fb9df1313
--- /dev/null
+++ b/OpenSim/Tests/Common/Mock/MockGroupsServicesConnector.cs
@@ -0,0 +1,237 @@
+/*
+ * 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;
+using Mono.Addins;
+using Nini.Config;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups;
+
+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);
+
+ public string Name
+ {
+ get { return "MockGroupsServicesConnector"; }
+ }
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public void Initialise(IConfigSource config)
+ {
+ }
+
+ public void Close()
+ {
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ m_log.DebugFormat("[MOCK GROUPS SERVICES CONNECTOR]: Adding to region {0}", scene.RegionInfo.RegionName);
+ scene.RegisterModuleInterface(this);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ }
+
+ public void PostInitialise()
+ {
+ }
+
+ public UUID CreateGroup(UUID requestingAgentID, string name, string charter, bool showInList, UUID insigniaID,
+ int membershipFee, bool openEnrollment, bool allowPublish,
+ bool maturePublish, UUID founderID)
+ {
+ return UUID.Zero;
+ }
+
+ public void UpdateGroup(UUID requestingAgentID, UUID groupID, string charter, bool showInList,
+ UUID insigniaID, int membershipFee, bool openEnrollment,
+ bool allowPublish, bool maturePublish)
+ {
+ }
+
+ public void AddGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
+ string title, ulong powers)
+ {
+ }
+
+ public void RemoveGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID)
+ {
+ }
+
+ public void UpdateGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
+ string title, ulong powers)
+ {
+ }
+
+ public GroupRecord GetGroupRecord(UUID requestingAgentID, UUID GroupID, string GroupName)
+ {
+ return null;
+ }
+
+ public GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID)
+ {
+ return default(GroupProfileData);
+ }
+
+ public void SetAgentActiveGroup(UUID requestingAgentID, UUID AgentID, UUID GroupID)
+ {
+ }
+
+ public void SetAgentActiveGroupRole(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
+ {
+ }
+
+ public void SetAgentGroupInfo(UUID requestingAgentID, UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile)
+ {
+ }
+
+ public void AddAgentToGroupInvite(UUID requestingAgentID, UUID inviteID, UUID groupID, UUID roleID, UUID agentID)
+ {
+ }
+
+ public GroupInviteInfo GetAgentToGroupInvite(UUID requestingAgentID, UUID inviteID)
+ {
+ return null;
+ }
+
+ public void RemoveAgentToGroupInvite(UUID requestingAgentID, UUID inviteID)
+ {
+ }
+
+ public void AddAgentToGroup(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
+ {
+ }
+
+ public void RemoveAgentFromGroup(UUID requestingAgentID, UUID AgentID, UUID GroupID)
+ {
+ }
+
+ public void AddAgentToGroupRole(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
+ {
+ }
+
+ public void RemoveAgentFromGroupRole(UUID requestingAgentID, UUID AgentID, UUID GroupID, UUID RoleID)
+ {
+ }
+
+ public List FindGroups(UUID requestingAgentID, string search)
+ {
+ return null;
+ }
+
+ public GroupMembershipData GetAgentGroupMembership(UUID requestingAgentID, UUID AgentID, UUID GroupID)
+ {
+ return null;
+ }
+
+ public GroupMembershipData GetAgentActiveMembership(UUID requestingAgentID, UUID AgentID)
+ {
+ return null;
+ }
+
+ public List GetAgentGroupMemberships(UUID requestingAgentID, UUID AgentID)
+ {
+ return new List();
+ }
+
+ public List GetAgentGroupRoles(UUID requestingAgentID, UUID AgentID, UUID GroupID)
+ {
+ return null;
+ }
+
+ public List GetGroupRoles(UUID requestingAgentID, UUID GroupID)
+ {
+ return null;
+ }
+
+ public List GetGroupMembers(UUID requestingAgentID, UUID GroupID)
+ {
+ return null;
+ }
+
+ public List GetGroupRoleMembers(UUID requestingAgentID, UUID GroupID)
+ {
+ return null;
+ }
+
+ public List GetGroupNotices(UUID requestingAgentID, UUID GroupID)
+ {
+ return null;
+ }
+
+ public GroupNoticeInfo GetGroupNotice(UUID requestingAgentID, UUID noticeID)
+ {
+ return null;
+ }
+
+ public void AddGroupNotice(UUID requestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket)
+ {
+ }
+
+ public void ResetAgentGroupChatSessions(UUID agentID)
+ {
+ }
+
+ public bool hasAgentBeenInvitedToGroupChatSession(UUID agentID, UUID groupID)
+ {
+ return false;
+ }
+
+ public bool hasAgentDroppedGroupChatSession(UUID agentID, UUID groupID)
+ {
+ return false;
+ }
+
+ public void AgentDroppedFromGroupChatSession(UUID agentID, UUID groupID)
+ {
+ }
+
+ public void AgentInvitedToGroupChatSession(UUID agentID, UUID groupID)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
index 9d7733e465..8b1649635c 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();
}
diff --git a/prebuild.xml b/prebuild.xml
index 9f2ef432d0..e408ccd26f 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -2733,6 +2733,7 @@
+
@@ -2747,6 +2748,7 @@
+
@@ -2974,6 +2976,62 @@
+
+
+
+ ../../../bin/
+
+
+
+
+ ../../../bin/
+
+
+
+ ../../../bin/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3002,6 +3060,7 @@
+