opensim-development – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 eva 1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Net;
5 using System.Reflection;
6 using System.Text;
7 using log4net;
8 using Nini.Config;
9 using NUnit.Framework;
10 using OpenMetaverse;
11 using OpenSim.Framework;
12 using OpenSim.Framework.Servers;
13 using OpenSim.Framework.Servers.HttpServer;
14 using OpenSim.Region.CoreModules.Scripting.LSLHttp;
15 using OpenSim.Region.Framework.Scenes;
16 using OpenSim.Region.ScriptEngine.Shared;
17 using OpenSim.Region.ScriptEngine.Shared.Api;
18 using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
19 using OpenSim.Services.Interfaces;
20 using OpenSim.Tests.Common;
21 using OpenSim.Tests.Common.Mock;
22  
23 namespace OpenSim.Region.ScriptEngine.Shared.Tests
24 {
25 /// <summary>
26 /// Tests for notecard related functions in LSL
27 /// </summary>
28 [TestFixture]
29 public class LSL_ApiNotecardTests : OpenSimTestCase
30 {
31 private Scene m_scene;
32 private MockScriptEngine m_engine;
33  
34 private SceneObjectGroup m_so;
35 private TaskInventoryItem m_scriptItem;
36 private LSL_Api m_lslApi;
37  
38 [TestFixtureSetUp]
39 public void TestFixtureSetUp()
40 {
41 // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
42 Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
43 }
44  
45 [TestFixtureTearDown]
46 public void TestFixureTearDown()
47 {
48 // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
49 // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
50 // tests really shouldn't).
51 Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
52 }
53  
54 [SetUp]
55 public override void SetUp()
56 {
57 base.SetUp();
58  
59 m_engine = new MockScriptEngine();
60  
61 m_scene = new SceneHelpers().SetupScene();
62 SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine);
63  
64 m_so = SceneHelpers.AddSceneObject(m_scene);
65 m_scriptItem = TaskInventoryHelpers.AddScript(m_scene, m_so.RootPart);
66  
67 // This is disconnected from the actual script - the mock engine does not set up any LSL_Api atm.
68 // Possibly this could be done and we could obtain it directly from the MockScriptEngine.
69 m_lslApi = new LSL_Api();
70 m_lslApi.Initialize(m_engine, m_so.RootPart, m_scriptItem, null);
71 }
72  
73 [Test]
74 public void TestLlGetNotecardLine()
75 {
76 TestHelpers.InMethod();
77  
78 string[] ncLines = { "One", "Twoè", "Three" };
79  
80 TaskInventoryItem ncItem
81 = TaskInventoryHelpers.AddNotecard(m_scene, m_so.RootPart, "nc", "1", "10", string.Join("\n", ncLines));
82  
83 AssertValidNotecardLine(ncItem.Name, 0, ncLines[0]);
84 AssertValidNotecardLine(ncItem.Name, 2, ncLines[2]);
85 AssertValidNotecardLine(ncItem.Name, 3, ScriptBaseClass.EOF);
86 AssertValidNotecardLine(ncItem.Name, 4, ScriptBaseClass.EOF);
87  
88 // XXX: Is this correct or do we really expect no dataserver event to fire at all?
89 AssertValidNotecardLine(ncItem.Name, -1, "");
90 AssertValidNotecardLine(ncItem.Name, -2, "");
91 }
92  
93 [Test]
94 public void TestLlGetNotecardLine_NoNotecard()
95 {
96 TestHelpers.InMethod();
97  
98 AssertInValidNotecardLine("nc", 0);
99 }
100  
101 [Test]
102 public void TestLlGetNotecardLine_NotANotecard()
103 {
104 TestHelpers.InMethod();
105  
106 TaskInventoryItem ncItem = TaskInventoryHelpers.AddScript(m_scene, m_so.RootPart, "nc1", "Not important");
107  
108 AssertInValidNotecardLine(ncItem.Name, 0);
109 }
110  
111 private void AssertValidNotecardLine(string ncName, int lineNumber, string assertLine)
112 {
113 string key = m_lslApi.llGetNotecardLine(ncName, lineNumber);
114 Assert.That(key, Is.Not.EqualTo(UUID.Zero.ToString()));
115  
116 Assert.That(m_engine.PostedEvents.Count, Is.EqualTo(1));
117 Assert.That(m_engine.PostedEvents.ContainsKey(m_scriptItem.ItemID));
118  
119 List<EventParams> events = m_engine.PostedEvents[m_scriptItem.ItemID];
120 Assert.That(events.Count, Is.EqualTo(1));
121 EventParams eventParams = events[0];
122  
123 Assert.That(eventParams.EventName, Is.EqualTo("dataserver"));
124 Assert.That(eventParams.Params[0].ToString(), Is.EqualTo(key));
125 Assert.That(eventParams.Params[1].ToString(), Is.EqualTo(assertLine));
126  
127 m_engine.ClearPostedEvents();
128 }
129  
130 private void AssertInValidNotecardLine(string ncName, int lineNumber)
131 {
132 string key = m_lslApi.llGetNotecardLine(ncName, lineNumber);
133 Assert.That(key, Is.EqualTo(UUID.Zero.ToString()));
134  
135 Assert.That(m_engine.PostedEvents.Count, Is.EqualTo(0));
136 }
137  
138 // [Test]
139 // public void TestLlReleaseUrl()
140 // {
141 // TestHelpers.InMethod();
142 //
143 // m_lslApi.llRequestURL();
144 // string returnedUri = m_engine.PostedEvents[m_scriptItem.ItemID][0].Params[2].ToString();
145 //
146 // {
147 // // Check that the initial number of URLs is correct
148 // Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
149 // }
150 //
151 // {
152 // // Check releasing a non-url
153 // m_lslApi.llReleaseURL("GARBAGE");
154 // Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
155 // }
156 //
157 // {
158 // // Check releasing a non-existing url
159 // m_lslApi.llReleaseURL("http://example.com");
160 // Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
161 // }
162 //
163 // {
164 // // Check URL release
165 // m_lslApi.llReleaseURL(returnedUri);
166 // Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls));
167 //
168 // HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(returnedUri);
169 //
170 // bool gotExpectedException = false;
171 //
172 // try
173 // {
174 // using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
175 // {}
176 // }
177 // catch (WebException e)
178 // {
179 // using (HttpWebResponse response = (HttpWebResponse)e.Response)
180 // gotExpectedException = response.StatusCode == HttpStatusCode.NotFound;
181 // }
182 //
183 // Assert.That(gotExpectedException, Is.True);
184 // }
185 //
186 // {
187 // // Check releasing the same URL again
188 // m_lslApi.llReleaseURL(returnedUri);
189 // Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls));
190 // }
191 // }
192 //
193 // [Test]
194 // public void TestLlRequestUrl()
195 // {
196 // TestHelpers.InMethod();
197 //
198 // string requestId = m_lslApi.llRequestURL();
199 // Assert.That(requestId, Is.Not.EqualTo(UUID.Zero.ToString()));
200 // string returnedUri;
201 //
202 // {
203 // // Check that URL is correctly set up
204 // Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
205 //
206 // Assert.That(m_engine.PostedEvents.ContainsKey(m_scriptItem.ItemID));
207 //
208 // List<EventParams> events = m_engine.PostedEvents[m_scriptItem.ItemID];
209 // Assert.That(events.Count, Is.EqualTo(1));
210 // EventParams eventParams = events[0];
211 // Assert.That(eventParams.EventName, Is.EqualTo("http_request"));
212 //
213 // UUID returnKey;
214 // string rawReturnKey = eventParams.Params[0].ToString();
215 // string method = eventParams.Params[1].ToString();
216 // returnedUri = eventParams.Params[2].ToString();
217 //
218 // Assert.That(UUID.TryParse(rawReturnKey, out returnKey), Is.True);
219 // Assert.That(method, Is.EqualTo(ScriptBaseClass.URL_REQUEST_GRANTED));
220 // Assert.That(Uri.IsWellFormedUriString(returnedUri, UriKind.Absolute), Is.True);
221 // }
222 //
223 // {
224 // // Check that request to URL works.
225 // string testResponse = "Hello World";
226 //
227 // m_engine.ClearPostedEvents();
228 // m_engine.PostEventHook
229 // += (itemId, evp) => m_lslApi.llHTTPResponse(evp.Params[0].ToString(), 200, testResponse);
230 //
231 //// Console.WriteLine("Trying {0}", returnedUri);
232 // HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(returnedUri);
233 //
234 // AssertHttpResponse(returnedUri, testResponse);
235 //
236 // Assert.That(m_engine.PostedEvents.ContainsKey(m_scriptItem.ItemID));
237 //
238 // List<EventParams> events = m_engine.PostedEvents[m_scriptItem.ItemID];
239 // Assert.That(events.Count, Is.EqualTo(1));
240 // EventParams eventParams = events[0];
241 // Assert.That(eventParams.EventName, Is.EqualTo("http_request"));
242 //
243 // UUID returnKey;
244 // string rawReturnKey = eventParams.Params[0].ToString();
245 // string method = eventParams.Params[1].ToString();
246 // string body = eventParams.Params[2].ToString();
247 //
248 // Assert.That(UUID.TryParse(rawReturnKey, out returnKey), Is.True);
249 // Assert.That(method, Is.EqualTo("GET"));
250 // Assert.That(body, Is.EqualTo(""));
251 // }
252 // }
253 //
254 // private void AssertHttpResponse(string uri, string expectedResponse)
255 // {
256 // HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
257 //
258 // using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
259 // {
260 // using (Stream stream = webResponse.GetResponseStream())
261 // {
262 // using (StreamReader reader = new StreamReader(stream))
263 // {
264 // Assert.That(reader.ReadToEnd(), Is.EqualTo(expectedResponse));
265 // }
266 // }
267 // }
268 // }
269 }
270 }