diff options
author | Justin Clark-Casey (justincc) | 2014-02-12 23:16:42 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2014-02-12 23:18:10 +0000 |
commit | e10012a7a6a047287c193c4beb1afdcd62922e3e (patch) | |
tree | 3d12589e49e53c85ab744a97f92fa0c3d2ad02bd /OpenSim/Region/ClientStack/Linden/Caps | |
parent | Make sure Web streams are disposed after use (diff) | |
download | opensim-SC-e10012a7a6a047287c193c4beb1afdcd62922e3e.zip opensim-SC-e10012a7a6a047287c193c4beb1afdcd62922e3e.tar.gz opensim-SC-e10012a7a6a047287c193c4beb1afdcd62922e3e.tar.bz2 opensim-SC-e10012a7a6a047287c193c4beb1afdcd62922e3e.tar.xz |
If a caller tries to queue a CAPs message to a scene presence that has no event queue (e.g. an NPC), only warn if event queue debugging is greater than zero.
Removes the spurious log warnings if groups are active when NPCs are used.
Adds more regression tests associated with adding messages to the event queue
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | 16 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs | 90 |
2 files changed, 99 insertions, 7 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index 0dbdbaf..0447bc4 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | |||
@@ -228,12 +228,18 @@ namespace OpenSim.Region.ClientStack.Linden | |||
228 | lock (queue) | 228 | lock (queue) |
229 | queue.Enqueue(ev); | 229 | queue.Enqueue(ev); |
230 | } | 230 | } |
231 | else | 231 | else if (DebugLevel > 0) |
232 | { | 232 | { |
233 | OSDMap evMap = (OSDMap)ev; | 233 | ScenePresence sp = m_scene.GetScenePresence(avatarID); |
234 | m_log.WarnFormat( | 234 | |
235 | "[EVENTQUEUE]: (Enqueue) No queue found for agent {0} when placing message {1} in region {2}", | 235 | // This assumes that an NPC should never have a queue. |
236 | avatarID, evMap["message"], m_scene.Name); | 236 | if (sp != null && sp.PresenceType != PresenceType.Npc) |
237 | { | ||
238 | OSDMap evMap = (OSDMap)ev; | ||
239 | m_log.WarnFormat( | ||
240 | "[EVENTQUEUE]: (Enqueue) No queue found for agent {0} {1} when placing message {2} in region {3}", | ||
241 | sp.Name, sp.UUID, evMap["message"], m_scene.Name); | ||
242 | } | ||
237 | } | 243 | } |
238 | } | 244 | } |
239 | catch (NullReferenceException e) | 245 | catch (NullReferenceException e) |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs index 9e24bce..fb24f58 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | ||
29 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
30 | using System.Net; | 31 | using System.Net; |
31 | using log4net.Config; | 32 | using log4net.Config; |
@@ -33,11 +34,14 @@ using Nini.Config; | |||
33 | using NUnit.Framework; | 34 | using NUnit.Framework; |
34 | using OpenMetaverse; | 35 | using OpenMetaverse; |
35 | using OpenMetaverse.Packets; | 36 | using OpenMetaverse.Packets; |
37 | using OpenMetaverse.StructuredData; | ||
36 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
37 | using OpenSim.Framework.Servers; | 39 | using OpenSim.Framework.Servers; |
38 | using OpenSim.Framework.Servers.HttpServer; | 40 | using OpenSim.Framework.Servers.HttpServer; |
39 | using OpenSim.Region.ClientStack.Linden; | 41 | using OpenSim.Region.ClientStack.Linden; |
40 | using OpenSim.Region.CoreModules.Framework; | 42 | using OpenSim.Region.CoreModules.Framework; |
43 | using OpenSim.Region.Framework.Scenes; | ||
44 | using OpenSim.Region.OptionalModules.World.NPC; | ||
41 | using OpenSim.Tests.Common; | 45 | using OpenSim.Tests.Common; |
42 | using OpenSim.Tests.Common.Mock; | 46 | using OpenSim.Tests.Common.Mock; |
43 | 47 | ||
@@ -47,6 +51,8 @@ namespace OpenSim.Region.ClientStack.Linden.Tests | |||
47 | public class EventQueueTests : OpenSimTestCase | 51 | public class EventQueueTests : OpenSimTestCase |
48 | { | 52 | { |
49 | private TestScene m_scene; | 53 | private TestScene m_scene; |
54 | private EventQueueGetModule m_eqgMod; | ||
55 | private NPCModule m_npcMod; | ||
50 | 56 | ||
51 | [SetUp] | 57 | [SetUp] |
52 | public override void SetUp() | 58 | public override void SetUp() |
@@ -69,10 +75,15 @@ namespace OpenSim.Region.ClientStack.Linden.Tests | |||
69 | config.Configs["Startup"].Set("EventQueue", "true"); | 75 | config.Configs["Startup"].Set("EventQueue", "true"); |
70 | 76 | ||
71 | CapabilitiesModule capsModule = new CapabilitiesModule(); | 77 | CapabilitiesModule capsModule = new CapabilitiesModule(); |
72 | EventQueueGetModule eqgModule = new EventQueueGetModule(); | 78 | m_eqgMod = new EventQueueGetModule(); |
79 | |||
80 | // For NPC test support | ||
81 | config.AddConfig("NPC"); | ||
82 | config.Configs["NPC"].Set("Enabled", "true"); | ||
83 | m_npcMod = new NPCModule(); | ||
73 | 84 | ||
74 | m_scene = new SceneHelpers().SetupScene(); | 85 | m_scene = new SceneHelpers().SetupScene(); |
75 | SceneHelpers.SetupSceneModules(m_scene, config, capsModule, eqgModule); | 86 | SceneHelpers.SetupSceneModules(m_scene, config, capsModule, m_eqgMod, m_npcMod); |
76 | } | 87 | } |
77 | 88 | ||
78 | [Test] | 89 | [Test] |
@@ -101,5 +112,80 @@ namespace OpenSim.Region.ClientStack.Linden.Tests | |||
101 | // TODO: Add more assertions for the other aspects of event queues | 112 | // TODO: Add more assertions for the other aspects of event queues |
102 | Assert.That(MainServer.Instance.GetPollServiceHandlerKeys().Count, Is.EqualTo(0)); | 113 | Assert.That(MainServer.Instance.GetPollServiceHandlerKeys().Count, Is.EqualTo(0)); |
103 | } | 114 | } |
115 | |||
116 | [Test] | ||
117 | public void TestEnqueueMessage() | ||
118 | { | ||
119 | TestHelpers.InMethod(); | ||
120 | // log4net.Config.XmlConfigurator.Configure(); | ||
121 | |||
122 | ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, TestHelpers.ParseTail(0x1)); | ||
123 | |||
124 | string messageName = "TestMessage"; | ||
125 | |||
126 | m_eqgMod.Enqueue(m_eqgMod.BuildEvent(messageName, new OSDMap()), sp.UUID); | ||
127 | |||
128 | Hashtable eventsResponse = m_eqgMod.GetEvents(UUID.Zero, sp.UUID); | ||
129 | |||
130 | Assert.That((int)eventsResponse["int_response_code"], Is.EqualTo((int)HttpStatusCode.OK)); | ||
131 | |||
132 | // Console.WriteLine("Response [{0}]", (string)eventsResponse["str_response_string"]); | ||
133 | |||
134 | OSDMap rawOsd = (OSDMap)OSDParser.DeserializeLLSDXml((string)eventsResponse["str_response_string"]); | ||
135 | OSDArray eventsOsd = (OSDArray)rawOsd["events"]; | ||
136 | |||
137 | bool foundUpdate = false; | ||
138 | foreach (OSD osd in eventsOsd) | ||
139 | { | ||
140 | OSDMap eventOsd = (OSDMap)osd; | ||
141 | |||
142 | if (eventOsd["message"] == messageName) | ||
143 | foundUpdate = true; | ||
144 | } | ||
145 | |||
146 | Assert.That(foundUpdate, Is.True, string.Format("Did not find {0} in response", messageName)); | ||
147 | } | ||
148 | |||
149 | /// <summary> | ||
150 | /// Test an attempt to put a message on the queue of a user that is not in the region. | ||
151 | /// </summary> | ||
152 | [Test] | ||
153 | public void TestEnqueueMessageNoUser() | ||
154 | { | ||
155 | TestHelpers.InMethod(); | ||
156 | TestHelpers.EnableLogging(); | ||
157 | |||
158 | string messageName = "TestMessage"; | ||
159 | |||
160 | m_eqgMod.Enqueue(m_eqgMod.BuildEvent(messageName, new OSDMap()), TestHelpers.ParseTail(0x1)); | ||
161 | |||
162 | Hashtable eventsResponse = m_eqgMod.GetEvents(UUID.Zero, TestHelpers.ParseTail(0x1)); | ||
163 | |||
164 | Assert.That((int)eventsResponse["int_response_code"], Is.EqualTo((int)HttpStatusCode.BadGateway)); | ||
165 | } | ||
166 | |||
167 | /// <summary> | ||
168 | /// NPCs do not currently have an event queue but a caller may try to send a message anyway, so check behaviour. | ||
169 | /// </summary> | ||
170 | [Test] | ||
171 | public void TestEnqueueMessageToNpc() | ||
172 | { | ||
173 | TestHelpers.InMethod(); | ||
174 | // TestHelpers.EnableLogging(); | ||
175 | |||
176 | UUID npcId | ||
177 | = m_npcMod.CreateNPC( | ||
178 | "John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, m_scene, new AvatarAppearance()); | ||
179 | |||
180 | ScenePresence npc = m_scene.GetScenePresence(npcId); | ||
181 | |||
182 | string messageName = "TestMessage"; | ||
183 | |||
184 | m_eqgMod.Enqueue(m_eqgMod.BuildEvent(messageName, new OSDMap()), npc.UUID); | ||
185 | |||
186 | Hashtable eventsResponse = m_eqgMod.GetEvents(UUID.Zero, npc.UUID); | ||
187 | |||
188 | Assert.That((int)eventsResponse["int_response_code"], Is.EqualTo((int)HttpStatusCode.BadGateway)); | ||
189 | } | ||
104 | } | 190 | } |
105 | } \ No newline at end of file | 191 | } \ No newline at end of file |