From f3e177814a30ee91a2fdd27f2a1aebf06a39cd15 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 17 Mar 2014 20:51:35 +0000
Subject: Add regression test for http inventory fetch.
Involved some restructuring to allow regression tests to dequeue inventory requests and perform poll responses synchronously rather than async
---
OpenSim/Tests/Common/Mock/TestHttpClientContext.cs | 110 +++++++++++++
OpenSim/Tests/Common/Mock/TestHttpRequest.cs | 174 +++++++++++++++++++++
OpenSim/Tests/Common/Mock/TestHttpResponse.cs | 171 ++++++++++++++++++++
3 files changed, 455 insertions(+)
create mode 100644 OpenSim/Tests/Common/Mock/TestHttpClientContext.cs
create mode 100644 OpenSim/Tests/Common/Mock/TestHttpRequest.cs
create mode 100644 OpenSim/Tests/Common/Mock/TestHttpResponse.cs
(limited to 'OpenSim/Tests/Common')
diff --git a/OpenSim/Tests/Common/Mock/TestHttpClientContext.cs b/OpenSim/Tests/Common/Mock/TestHttpClientContext.cs
new file mode 100644
index 0000000..5a55b09
--- /dev/null
+++ b/OpenSim/Tests/Common/Mock/TestHttpClientContext.cs
@@ -0,0 +1,110 @@
+/*
+ * 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.IO;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using HttpServer;
+using OpenSim.Framework;
+
+namespace OpenSim.Tests.Common
+{
+ public class TestHttpClientContext: IHttpClientContext
+ {
+ ///
+ /// Bodies of responses from the server.
+ ///
+ public string ResponseBody
+ {
+ get { return Encoding.UTF8.GetString(m_responseStream.ToArray()); }
+ }
+
+ public Byte[] ResponseBodyBytes
+ {
+ get{ return m_responseStream.ToArray(); }
+ }
+
+ private MemoryStream m_responseStream = new MemoryStream();
+
+ public bool IsSecured { get; set; }
+
+ public bool Secured
+ {
+ get { return IsSecured; }
+ set { IsSecured = value; }
+ }
+
+ public TestHttpClientContext(bool secured)
+ {
+ Secured = secured;
+ }
+
+ public void Disconnect(SocketError error)
+ {
+// Console.WriteLine("TestHttpClientContext.Disconnect Received disconnect with status {0}", error);
+ }
+
+ public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body) {Console.WriteLine("x");}
+ public void Respond(string httpVersion, HttpStatusCode statusCode, string reason) {Console.WriteLine("xx");}
+ public void Respond(string body) { Console.WriteLine("xxx");}
+
+ public void Send(byte[] buffer)
+ {
+ // Getting header data here
+// Console.WriteLine("xxxx: Got {0}", Encoding.UTF8.GetString(buffer));
+ }
+
+ public void Send(byte[] buffer, int offset, int size)
+ {
+// Util.PrintCallStack();
+//
+// Console.WriteLine(
+// "TestHttpClientContext.Send(byte[], int, int) got offset={0}, size={1}, buffer={2}",
+// offset, size, Encoding.UTF8.GetString(buffer));
+
+ m_responseStream.Write(buffer, offset, size);
+ }
+
+ public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType) {Console.WriteLine("xxxxxx");}
+ public void Close() { }
+ public bool EndWhenDone { get { return false;} set { return;}}
+
+ public HTTPNetworkContext GiveMeTheNetworkStreamIKnowWhatImDoing()
+ {
+ return new HTTPNetworkContext();
+ }
+
+ public event EventHandler Disconnected = delegate { };
+ ///
+ /// A request have been received in the context.
+ ///
+ public event EventHandler RequestReceived = delegate { };
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Tests/Common/Mock/TestHttpRequest.cs b/OpenSim/Tests/Common/Mock/TestHttpRequest.cs
new file mode 100644
index 0000000..b868895
--- /dev/null
+++ b/OpenSim/Tests/Common/Mock/TestHttpRequest.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.Specialized;
+using System.IO;
+using HttpServer;
+using HttpServer.FormDecoders;
+
+namespace OpenSim.Tests.Common
+{
+ public class TestHttpRequest: IHttpRequest
+ {
+ private string _uriPath;
+ public bool BodyIsComplete
+ {
+ get { return true; }
+ }
+ public string[] AcceptTypes
+ {
+ get {return _acceptTypes; }
+ }
+ private string[] _acceptTypes;
+ public Stream Body
+ {
+ get { return _body; }
+ set { _body = value;}
+ }
+ private Stream _body;
+ public ConnectionType Connection
+ {
+ get { return _connection; }
+ set { _connection = value; }
+ }
+ private ConnectionType _connection;
+ public int ContentLength
+ {
+ get { return _contentLength; }
+ set { _contentLength = value; }
+ }
+ private int _contentLength;
+ public NameValueCollection Headers
+ {
+ get { return _headers; }
+ }
+ private NameValueCollection _headers = new NameValueCollection();
+
+ public string HttpVersion { get; set; }
+
+ public string Method
+ {
+ get { return _method; }
+ set { _method = value; }
+ }
+ private string _method = null;
+ public HttpInput QueryString
+ {
+ get { return _queryString; }
+ }
+ private HttpInput _queryString = null;
+ public Uri Uri
+ {
+ get { return _uri; }
+ set { _uri = value; }
+ }
+ private Uri _uri = null;
+ public string[] UriParts
+ {
+ get { return _uri.Segments; }
+ }
+ public HttpParam Param
+ {
+ get { return null; }
+ }
+ public HttpForm Form
+ {
+ get { return null; }
+ }
+ public bool IsAjax
+ {
+ get { return false; }
+ }
+ public RequestCookies Cookies
+ {
+ get { return null; }
+ }
+
+ public TestHttpRequest()
+ {
+ HttpVersion = "HTTP/1.1";
+ }
+
+ public TestHttpRequest(string contentEncoding, string contentType, string userAgent,
+ string remoteAddr, string remotePort, string[] acceptTypes,
+ ConnectionType connectionType, int contentLength, Uri uri) : base()
+ {
+ _headers["content-encoding"] = contentEncoding;
+ _headers["content-type"] = contentType;
+ _headers["user-agent"] = userAgent;
+ _headers["remote_addr"] = remoteAddr;
+ _headers["remote_port"] = remotePort;
+
+ _acceptTypes = acceptTypes;
+ _connection = connectionType;
+ _contentLength = contentLength;
+ _uri = uri;
+ }
+
+ public void DecodeBody(FormDecoderProvider providers) {}
+ public void SetCookies(RequestCookies cookies) {}
+ public void AddHeader(string name, string value)
+ {
+ _headers.Add(name, value);
+ }
+ public int AddToBody(byte[] bytes, int offset, int length)
+ {
+ return 0;
+ }
+ public void Clear() {}
+
+ public object Clone()
+ {
+ TestHttpRequest clone = new TestHttpRequest();
+ clone._acceptTypes = _acceptTypes;
+ clone._connection = _connection;
+ clone._contentLength = _contentLength;
+ clone._uri = _uri;
+ clone._headers = new NameValueCollection(_headers);
+
+ return clone;
+ }
+ public IHttpResponse CreateResponse(IHttpClientContext context)
+ {
+ return new HttpResponse(context, this);
+ }
+ ///
+ /// Path and query (will be merged with the host header) and put in Uri
+ ///
+ ///
+ public string UriPath
+ {
+ get { return _uriPath; }
+ set
+ {
+ _uriPath = value;
+
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Tests/Common/Mock/TestHttpResponse.cs b/OpenSim/Tests/Common/Mock/TestHttpResponse.cs
new file mode 100644
index 0000000..ff47c10
--- /dev/null
+++ b/OpenSim/Tests/Common/Mock/TestHttpResponse.cs
@@ -0,0 +1,171 @@
+/*
+ * 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.Net;
+using System.Text;
+using HttpServer;
+
+namespace OpenSim.Tests.Common
+{
+ public class TestHttpResponse: IHttpResponse
+ {
+ public Stream Body
+ {
+ get { return _body; }
+
+ set { _body = value; }
+ }
+ private Stream _body;
+
+ public string ProtocolVersion
+ {
+ get { return _protocolVersion; }
+ set { _protocolVersion = value; }
+ }
+ private string _protocolVersion;
+
+ public bool Chunked
+ {
+ get { return _chunked; }
+
+ set { _chunked = value; }
+ }
+ private bool _chunked;
+
+ public ConnectionType Connection
+ {
+ get { return _connection; }
+
+ set { _connection = value; }
+ }
+ private ConnectionType _connection;
+
+ public Encoding Encoding
+ {
+ get { return _encoding; }
+
+ set { _encoding = value; }
+ }
+ private Encoding _encoding;
+
+ public int KeepAlive
+ {
+ get { return _keepAlive; }
+
+ set { _keepAlive = value; }
+ }
+ private int _keepAlive;
+
+ public HttpStatusCode Status
+ {
+ get { return _status; }
+
+ set { _status = value; }
+ }
+ private HttpStatusCode _status;
+
+ public string Reason
+ {
+ get { return _reason; }
+
+ set { _reason = value; }
+ }
+ private string _reason;
+
+ public long ContentLength
+ {
+ get { return _contentLength; }
+
+ set { _contentLength = value; }
+ }
+ private long _contentLength;
+
+ public string ContentType
+ {
+ get { return _contentType; }
+
+ set { _contentType = value; }
+ }
+ private string _contentType;
+
+ public bool HeadersSent
+ {
+ get { return _headersSent; }
+ }
+ private bool _headersSent;
+
+ public bool Sent
+ {
+ get { return _sent; }
+ }
+ private bool _sent;
+
+ public ResponseCookies Cookies
+ {
+ get { return _cookies; }
+ }
+ private ResponseCookies _cookies = null;
+
+ public TestHttpResponse()
+ {
+ _headersSent = false;
+ _sent = false;
+ }
+
+ public void AddHeader(string name, string value) {}
+
+ public void Send()
+ {
+ if (!_headersSent) SendHeaders();
+ if (_sent) throw new InvalidOperationException("stuff already sent");
+ _sent = true;
+ }
+
+ public void SendBody(byte[] buffer, int offset, int count)
+ {
+ if (!_headersSent) SendHeaders();
+ _sent = true;
+ }
+
+ public void SendBody(byte[] buffer)
+ {
+ if (!_headersSent) SendHeaders();
+ _sent = true;
+ }
+
+ public void SendHeaders()
+ {
+ if (_headersSent) throw new InvalidOperationException("headers already sent");
+ _headersSent = true;
+ }
+
+ public void Redirect(Uri uri) {}
+ public void Redirect(string url) {}
+ }
+}
\ No newline at end of file
--
cgit v1.1