From bac8ac32dae4049e84f74d276bb5ce83a2a512ac Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 21 Nov 2012 23:42:34 +0000
Subject: Add regression test for a good request made to the asset service post
handler.
Adds new OpenSim.Server.Handlers.Tests.dll to test suite
---
.../Asset/Tests/AssetServerPostHandlerTests.cs | 84 ++++++++++++++++++++++
1 file changed, 84 insertions(+)
create mode 100644 OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs
(limited to 'OpenSim/Server')
diff --git a/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs b/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs
new file mode 100644
index 0000000..9e82576
--- /dev/null
+++ b/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs
@@ -0,0 +1,84 @@
+/*
+ * 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.IO;
+using System.Text;
+using System.Xml;
+using System.Xml.Serialization;
+using Nini.Config;
+using NUnit.Framework;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Server.Handlers.Asset;
+using OpenSim.Services.AssetService;
+using OpenSim.Services.Interfaces;
+using OpenSim.Tests.Common;
+
+namespace OpenSim.Server.Handlers.Asset.Test
+{
+ [TestFixture]
+ public class AssetServerPostHandlerTests : OpenSimTestCase
+ {
+ [Test]
+ public void TestGoodAssetStoreRequest()
+ {
+ TestHelpers.InMethod();
+
+ UUID assetId = TestHelpers.ParseTail(0x1);
+
+ IConfigSource config = new IniConfigSource();
+ config.AddConfig("AssetService");
+ config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
+
+ AssetService assetService = new AssetService(config);
+
+ AssetServerPostHandler asph = new AssetServerPostHandler(assetService);
+
+ AssetBase asset = AssetHelpers.CreateNotecardAsset(assetId, "Hello World");
+
+ MemoryStream buffer = new MemoryStream();
+
+ XmlWriterSettings settings = new XmlWriterSettings();
+ settings.Encoding = Encoding.UTF8;
+
+ using (XmlWriter writer = XmlWriter.Create(buffer, settings))
+ {
+ XmlSerializer serializer = new XmlSerializer(typeof(AssetBase));
+ serializer.Serialize(writer, asset);
+ writer.Flush();
+ }
+
+ buffer.Position = 0;
+ asph.Handle(null, buffer, null, null);
+
+ AssetBase retrievedAsset = assetService.Get(assetId.ToString());
+
+ Assert.That(retrievedAsset, Is.Not.Null);
+ }
+ }
+}
\ No newline at end of file
--
cgit v1.1
From 448811ccddfa6fb3dbbd7279e240ff9ef805d218 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 03:01:57 +0000
Subject: If an asset POST does not contain well-formed XML, return a 400 (Bad
Request) HTTP status rather than simply dropping the request.
---
.../Handlers/Asset/AssetServerPostHandler.cs | 15 ++++++++++---
.../Asset/Tests/AssetServerPostHandlerTests.cs | 26 ++++++++++++++++++++++
2 files changed, 38 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Server')
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerPostHandler.cs b/OpenSim/Server/Handlers/Asset/AssetServerPostHandler.cs
index 87b3d2d..a006fa8 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerPostHandler.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerPostHandler.cs
@@ -57,14 +57,23 @@ namespace OpenSim.Server.Handlers.Asset
public override byte[] Handle(string path, Stream request,
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
{
+ AssetBase asset;
XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
- AssetBase asset = (AssetBase) xs.Deserialize(request);
+
+ try
+ {
+ asset = (AssetBase)xs.Deserialize(request);
+ }
+ catch (XmlException)
+ {
+ httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
+ return null;
+ }
string[] p = SplitParams(path);
if (p.Length > 1)
{
- bool result =
- m_AssetService.UpdateContent(p[1], asset.Data);
+ bool result = m_AssetService.UpdateContent(p[1], asset.Data);
xs = new XmlSerializer(typeof(bool));
return ServerUtils.SerializeResult(xs, result);
diff --git a/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs b/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs
index 9e82576..427fa16 100644
--- a/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs
+++ b/OpenSim/Server/Handlers/Asset/Tests/AssetServerPostHandlerTests.cs
@@ -27,6 +27,7 @@
using System;
using System.IO;
+using System.Net;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
@@ -38,6 +39,7 @@ using OpenSim.Server.Handlers.Asset;
using OpenSim.Services.AssetService;
using OpenSim.Services.Interfaces;
using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
namespace OpenSim.Server.Handlers.Asset.Test
{
@@ -80,5 +82,29 @@ namespace OpenSim.Server.Handlers.Asset.Test
Assert.That(retrievedAsset, Is.Not.Null);
}
+
+ [Test]
+ public void TestBadXmlAssetStoreRequest()
+ {
+ TestHelpers.InMethod();
+
+ IConfigSource config = new IniConfigSource();
+ config.AddConfig("AssetService");
+ config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
+
+ AssetService assetService = new AssetService(config);
+
+ AssetServerPostHandler asph = new AssetServerPostHandler(assetService);
+
+ MemoryStream buffer = new MemoryStream();
+ byte[] badData = new byte[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f };
+ buffer.Write(badData, 0, badData.Length);
+ buffer.Position = 0;
+
+ TestOSHttpResponse response = new TestOSHttpResponse();
+ asph.Handle(null, buffer, null, response);
+
+ Assert.That(response.StatusCode, Is.EqualTo((int)HttpStatusCode.BadRequest));
+ }
}
}
\ No newline at end of file
--
cgit v1.1
From 74a20a62eee8c565a9410d6896754242eb602abc Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 03:43:21 +0000
Subject: refactor: Factor out copy/pasted server uptime report code
---
OpenSim/Server/Base/ServicesServerBase.cs | 27 ++++-----------------------
1 file changed, 4 insertions(+), 23 deletions(-)
(limited to 'OpenSim/Server')
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index 0cff6ed..56bb7ae 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -34,6 +34,7 @@ using System.Text;
using System.Xml;
using OpenSim.Framework;
using OpenSim.Framework.Console;
+using OpenSim.Framework.Servers;
using log4net;
using log4net.Config;
using log4net.Appender;
@@ -43,7 +44,7 @@ using Nini.Config;
namespace OpenSim.Server.Base
{
- public class ServicesServerBase
+ public class ServicesServerBase : ServerBase
{
// Logger
//
@@ -72,17 +73,10 @@ namespace OpenSim.Server.Base
//
private string m_pidFile = String.Empty;
- ///
- /// Time at which this server was started
- ///
- protected DateTime m_startuptime;
-
// Handle all the automagical stuff
//
- public ServicesServerBase(string prompt, string[] args)
+ public ServicesServerBase(string prompt, string[] args) : base()
{
- m_startuptime = DateTime.Now;
-
// Save raw arguments
//
m_Arguments = args;
@@ -373,18 +367,5 @@ namespace OpenSim.Server.Base
break;
}
}
-
- ///
- /// Return a report about the uptime of this server
- ///
- ///
- protected string GetUptimeReport()
- {
- StringBuilder sb = new StringBuilder(String.Format("Time now is {0}\n", DateTime.Now));
- sb.Append(String.Format("Server has been running since {0}, {1}\n", m_startuptime.DayOfWeek, m_startuptime));
- sb.Append(String.Format("That is an elapsed time of {0}\n", DateTime.Now - m_startuptime));
-
- return sb.ToString();
- }
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From 5c48d7a378ff066f59b9cee02f2803ebe1616481 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:05:09 +0000
Subject: factor out common HandleShow code for "show uptime"
---
OpenSim/Server/Base/ServicesServerBase.cs | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
(limited to 'OpenSim/Server')
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index 56bb7ae..7b49ac9 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -174,6 +174,8 @@ namespace OpenSim.Server.Base
MainConsole.Instance = new LocalConsole(prompt);
}
+ m_console = MainConsole.Instance;
+
// Configure the appenders for log4net
//
OpenSimAppender consoleAppender = null;
@@ -351,21 +353,5 @@ namespace OpenSim.Server.Base
{
}
}
-
- public virtual void HandleShow(string module, string[] cmd)
- {
- List args = new List(cmd);
-
- args.RemoveAt(0);
-
- string[] showParams = args.ToArray();
-
- switch (showParams[0])
- {
- case "uptime":
- MainConsole.Instance.Output(GetUptimeReport());
- break;
- }
- }
}
}
\ No newline at end of file
--
cgit v1.1
From cf03d6ea9223e71c27ca91633a30abcf1368ec58 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:11:03 +0000
Subject: Factor out common registration of "show uptime" command
---
OpenSim/Server/Base/ServicesServerBase.cs | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Server')
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index 7b49ac9..285168c 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -239,6 +239,8 @@ namespace OpenSim.Server.Base
CreatePIDFile(startupConfig.GetString("PIDFile"));
}
+ RegisterCommonCommands();
+
// Register the quit command
//
MainConsole.Instance.Commands.AddCommand("General", false, "quit",
@@ -254,11 +256,6 @@ namespace OpenSim.Server.Base
"command-script