From 4d1758985f64fbdbfd142684c1a4ac82c9a4b97a Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 7 Feb 2013 00:54:09 +0000
Subject: Make json store tests operate on a single thread to ensure we don't
run into any race related test failures in the future.
---
.../JsonStore/Tests/JsonStoreScriptModuleTests.cs | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
index 8042a93..34422b4 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
@@ -54,6 +54,22 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests
private MockScriptEngine m_engine;
private ScriptModuleCommsModule m_smcm;
+ [TestFixtureSetUp]
+ public void FixtureInit()
+ {
+ // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
+ Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown()
+ {
+ // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
+ // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
+ // tests really shouldn't).
+ Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
+ }
+
[SetUp]
public override void SetUp()
{
--
cgit v1.1
From 3657a08844731e5a24eeda3195c23f417b4570a5 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 7 Feb 2013 02:19:26 +0000
Subject: Add TestJsonWriteReadNotecard() regression test
---
.../JsonStore/Tests/JsonStoreScriptModuleTests.cs | 45 +++++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
index 34422b4..98b5624 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
@@ -101,7 +101,12 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests
private object InvokeOp(string name, params object[] args)
{
- return m_smcm.InvokeOperation(UUID.Zero, UUID.Zero, name, args);
+ return InvokeOpOnHost(name, UUID.Zero, args);
+ }
+
+ private object InvokeOpOnHost(string name, UUID hostId, params object[] args)
+ {
+ return m_smcm.InvokeOperation(hostId, UUID.Zero, name, args);
}
[Test]
@@ -209,6 +214,44 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests
Assert.That(value, Is.EqualTo("World"));
}
+ ///
+ /// Test for reading and writing json to a notecard
+ ///
+ ///
+ /// TODO: Really needs to test correct receipt of the link_message event. Could do this by directly fetching
+ /// it via the MockScriptEngine or perhaps by a dummy script instance.
+ ///
+ [Test]
+ public void TestJsonWriteReadNotecard()
+ {
+ TestHelpers.InMethod();
+ TestHelpers.EnableLogging();
+
+ string notecardName = "nc1";
+
+ SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, TestHelpers.ParseTail(0x1));
+ m_scene.AddSceneObject(so);
+
+ UUID storeId = (UUID)InvokeOp("JsonCreateStore", "{ 'Hello':'World' }");
+
+ // Write notecard
+ UUID writeNotecardRequestId = (UUID)InvokeOpOnHost("JsonWriteNotecard", so.UUID, storeId, "/", notecardName);
+ Assert.That(writeNotecardRequestId, Is.Not.EqualTo(UUID.Zero));
+
+ TaskInventoryItem nc1Item = so.RootPart.Inventory.GetInventoryItem(notecardName);
+ Assert.That(nc1Item, Is.Not.Null);
+
+ // TODO: Should probably independently check the contents.
+
+ // Read notecard
+ UUID receivingStoreId = (UUID)InvokeOp("JsonCreateStore", "{ 'Hello':'World' }");
+ UUID readNotecardRequestId = (UUID)InvokeOpOnHost("JsonReadNotecard", so.UUID, receivingStoreId, "/", notecardName);
+ Assert.That(readNotecardRequestId, Is.Not.EqualTo(UUID.Zero));
+
+ string value = (string)InvokeOp("JsonGetValue", storeId, "Hello");
+ Assert.That(value, Is.EqualTo("World"));
+ }
+
public object DummyTestMethod(object o1, object o2, object o3, object o4, object o5) { return null; }
}
}
\ No newline at end of file
--
cgit v1.1
From 4bd1794b5a05147788950208f9644c2b9d731859 Mon Sep 17 00:00:00 2001
From: teravus
Date: Thu, 7 Feb 2013 12:19:54 -0500
Subject: * missing example module.. Oops.
---
.../WebSocketEchoTest/WebSocketEchoModule.cs | 174 +++++++++++++++++++++
1 file changed, 174 insertions(+)
create mode 100644 OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs b/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs
new file mode 100644
index 0000000..34e20b7
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs
@@ -0,0 +1,174 @@
+/*
+ * 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 OpenSim.Framework.Servers;
+using Mono.Addins;
+using log4net;
+using Nini.Config;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+
+using OpenSim.Framework.Servers.HttpServer;
+
+
+namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
+{
+
+ [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "WebSocketEchoModule")]
+ public class WebSocketEchoModule : ISharedRegionModule
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private bool enabled;
+ public string Name { get { return "WebSocketEchoModule"; } }
+
+ public Type ReplaceableInterface { get { return null; } }
+
+
+ private HashSet _activeHandlers = new HashSet();
+
+ public void Initialise(IConfigSource pConfig)
+ {
+ enabled = true;// (pConfig.Configs["WebSocketEcho"] != null);
+ if (enabled)
+ m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE");
+ }
+
+ ///
+ /// This method sets up the callback to WebSocketHandlerCallback below when a HTTPRequest comes in for /echo
+ ///
+ public void PostInitialise()
+ {
+ if (enabled)
+ MainServer.Instance.AddWebSocketHandler("/echo", WebSocketHandlerCallback);
+ }
+
+ // This gets called by BaseHttpServer and gives us an opportunity to set things on the WebSocket handler before we turn it on
+ public void WebSocketHandlerCallback(string path, WebSocketHttpServerHandler handler)
+ {
+ SubscribeToEvents(handler);
+ handler.SetChunksize(8192);
+ handler.NoDelay_TCP_Nagle = true;
+ handler.HandshakeAndUpgrade();
+ }
+
+ //These are our normal events
+ public void SubscribeToEvents(WebSocketHttpServerHandler handler)
+ {
+ handler.OnClose += HandlerOnOnClose;
+ handler.OnText += HandlerOnOnText;
+ handler.OnUpgradeCompleted += HandlerOnOnUpgradeCompleted;
+ handler.OnData += HandlerOnOnData;
+ handler.OnPong += HandlerOnOnPong;
+ }
+
+ public void UnSubscribeToEvents(WebSocketHttpServerHandler handler)
+ {
+ handler.OnClose -= HandlerOnOnClose;
+ handler.OnText -= HandlerOnOnText;
+ handler.OnUpgradeCompleted -= HandlerOnOnUpgradeCompleted;
+ handler.OnData -= HandlerOnOnData;
+ handler.OnPong -= HandlerOnOnPong;
+ }
+
+ private void HandlerOnOnPong(object sender, PongEventArgs pongdata)
+ {
+ m_log.Info("[WebSocketEchoModule]: Got a pong.. ping time: " + pongdata.PingResponseMS);
+ }
+
+ private void HandlerOnOnData(object sender, WebsocketDataEventArgs data)
+ {
+ WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler;
+ obj.SendData(data.Data);
+ m_log.Info("[WebSocketEchoModule]: We received a bunch of ugly non-printable bytes");
+ obj.SendPingCheck();
+ }
+
+
+ private void HandlerOnOnUpgradeCompleted(object sender, UpgradeCompletedEventArgs completeddata)
+ {
+ WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler;
+ _activeHandlers.Add(obj);
+ }
+
+ private void HandlerOnOnText(object sender, WebsocketTextEventArgs text)
+ {
+ WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler;
+ obj.SendMessage(text.Data);
+ m_log.Info("[WebSocketEchoModule]: We received this: " + text.Data);
+ }
+
+ // Remove the references to our handler
+ private void HandlerOnOnClose(object sender, CloseEventArgs closedata)
+ {
+ WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler;
+ UnSubscribeToEvents(obj);
+
+ lock (_activeHandlers)
+ _activeHandlers.Remove(obj);
+ obj.Dispose();
+ }
+
+ // Shutting down.. so shut down all sockets.
+ // Note.. this should be done outside of an ienumerable if you're also hook to the close event.
+ public void Close()
+ {
+ if (!enabled)
+ return;
+
+ // We convert this to a for loop so we're not in in an IEnumerable when the close
+ //call triggers an event which then removes item from _activeHandlers that we're enumerating
+ WebSocketHttpServerHandler[] items = new WebSocketHttpServerHandler[_activeHandlers.Count];
+ _activeHandlers.CopyTo(items);
+
+ for (int i = 0; i < items.Length; i++)
+ {
+ items[i].Close(string.Empty);
+ items[i].Dispose();
+ }
+ _activeHandlers.Clear();
+ MainServer.Instance.RemoveWebSocketHandler("/echo");
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} LOADED", scene.RegionInfo.RegionName);
+ }
+ }
+}
\ No newline at end of file
--
cgit v1.1
From a5c83f7505bf897c2d445391802f1ac7a2143d3d Mon Sep 17 00:00:00 2001
From: teravus
Date: Thu, 7 Feb 2013 12:22:03 -0500
Subject: Websocket Echo module should not be on by default.
---
.../OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs b/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs
index 34e20b7..112ba4e 100644
--- a/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs
+++ b/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs
@@ -55,7 +55,7 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
public void Initialise(IConfigSource pConfig)
{
- enabled = true;// (pConfig.Configs["WebSocketEcho"] != null);
+ enabled =(pConfig.Configs["WebSocketEcho"] != null);
if (enabled)
m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE");
}
--
cgit v1.1
From af73ea909cad78eee78bd4e9d9e3a42cf8856263 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Wed, 6 Feb 2013 22:34:03 -0800
Subject: Change passed PhysicsParameter value from float to the more general
string value
---
.../PhysicsParameters/PhysicsParameters.cs | 19 +++++--------------
1 file changed, 5 insertions(+), 14 deletions(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs b/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs
index 40f7fbc..3083a33 100755
--- a/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs
+++ b/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs
@@ -146,7 +146,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters
{
foreach (PhysParameterEntry ppe in physScene.GetParameterList())
{
- float val = 0.0f;
+ string val = string.Empty;
if (physScene.GetPhysicsParameter(ppe.name, out val))
{
WriteOut(" {0}/{1} = {2}", scene.RegionInfo.RegionName, ppe.name, val);
@@ -159,7 +159,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters
}
else
{
- float val = 0.0f;
+ string val = string.Empty;
if (physScene.GetPhysicsParameter(parm, out val))
{
WriteOut(" {0}/{1} = {2}", scene.RegionInfo.RegionName, parm, val);
@@ -185,21 +185,12 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters
return;
}
string parm = "xxx";
- float val = 0f;
+ string valparm = String.Empty;
uint localID = (uint)PhysParameterEntry.APPLY_TO_NONE; // set default value
try
{
parm = cmdparms[2];
- string valparm = cmdparms[3].ToLower();
- if (valparm == "true")
- val = PhysParameterEntry.NUMERIC_TRUE;
- else
- {
- if (valparm == "false")
- val = PhysParameterEntry.NUMERIC_FALSE;
- else
- val = float.Parse(valparm, Culture.NumberFormatInfo);
- }
+ valparm = cmdparms[3].ToLower();
if (cmdparms.Length > 4)
{
if (cmdparms[4].ToLower() == "all")
@@ -224,7 +215,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters
IPhysicsParameters physScene = scene.PhysicsScene as IPhysicsParameters;
if (physScene != null)
{
- if (!physScene.SetPhysicsParameter(parm, val, localID))
+ if (!physScene.SetPhysicsParameter(parm, valparm, localID))
{
WriteError("Failed set of parameter '{0}' for region '{1}'", parm, scene.RegionInfo.RegionName);
}
--
cgit v1.1
From 7bf33d333af6e7393a05940d1ab436f5dce73814 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 22:25:28 +0000
Subject: Plumb the path from the client to the extra physics params and back
---
.../Agent/InternetRelayClientView/Server/IRCClientView.cs | 5 +++++
OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | 5 +++++
2 files changed, 10 insertions(+)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index 781539a..0ac56fa 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1678,5 +1678,10 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
public void SendPlacesReply(UUID queryID, UUID transactionID, PlacesReplyData[] data)
{
}
+
+ public void SendPartPhysicsProprieties(ISceneEntity entity)
+ {
+ }
+
}
}
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 5ea2bcd..6bd27f0 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -1234,5 +1234,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public void SendPlacesReply(UUID queryID, UUID transactionID, PlacesReplyData[] data)
{
}
+
+ public void SendPartPhysicsProprieties(ISceneEntity entity)
+ {
+ }
+
}
}
--
cgit v1.1