aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2015-03-13 20:09:29 +0000
committerJustin Clark-Casey (justincc)2015-03-13 20:09:29 +0000
commit0aeea89258af7adef04337f3cb3cb74aeb8619d5 (patch)
tree0d1e37ef73ae6fab2c92e68ecb85bf75e1e36a38
parentMove state change in progress in ScriptInstance.PostEvent() to the top of the... (diff)
downloadopensim-SC_OLD-0aeea89258af7adef04337f3cb3cb74aeb8619d5.zip
opensim-SC_OLD-0aeea89258af7adef04337f3cb3cb74aeb8619d5.tar.gz
opensim-SC_OLD-0aeea89258af7adef04337f3cb3cb74aeb8619d5.tar.bz2
opensim-SC_OLD-0aeea89258af7adef04337f3cb3cb74aeb8619d5.tar.xz
Fix script state not being preserved in objects sent via Hypergrid.
This was because attributes were not being included in the transformation, hence losing the script state identity. Symptoms are messages like "[SCENE OBJECT GROUP]: SavedScriptState element had no UUID in object test box" Regression since the conference code merge. Regression test extended for this case. Relates to http://opensimulator.org/mantis/view.php?id=7439
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs11
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/HGAssetMapperTests.cs77
2 files changed, 79 insertions, 9 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
index 8b09b3e..75f0774 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
@@ -199,11 +199,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
199 199
200 while (reader.Read()) 200 while (reader.Read())
201 { 201 {
202 //Console.WriteLine("Depth: {0}", reader.Depth); 202// Console.WriteLine("Depth: {0}, name {1}", reader.Depth, reader.Name);
203 203
204 switch (reader.NodeType) 204 switch (reader.NodeType)
205 { 205 {
206 case XmlNodeType.Attribute: 206 case XmlNodeType.Attribute:
207// Console.WriteLine("FOUND ATTRIBUTE {0}", reader.Name);
207 writer.WriteAttributeString(reader.Prefix, reader.Name, reader.NamespaceURI, reader.Value); 208 writer.WriteAttributeString(reader.Prefix, reader.Name, reader.NamespaceURI, reader.Value);
208 break; 209 break;
209 210
@@ -224,6 +225,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
224 225
225 writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI); 226 writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
226 227
228 if (reader.HasAttributes)
229 {
230 while (reader.MoveToNextAttribute())
231 writer.WriteAttributeString(reader.Prefix, reader.Name, reader.NamespaceURI, reader.Value);
232
233 reader.MoveToElement();
234 }
235
227 if (reader.LocalName == "SceneObjectPart") 236 if (reader.LocalName == "SceneObjectPart")
228 { 237 {
229 if (sopDepth < 0) 238 if (sopDepth < 0)
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/HGAssetMapperTests.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/HGAssetMapperTests.cs
index 779da43..007ff63 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/HGAssetMapperTests.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/HGAssetMapperTests.cs
@@ -26,12 +26,15 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Threading;
29using System.Xml; 30using System.Xml;
31using Nini.Config;
30using NUnit.Framework; 32using NUnit.Framework;
31using OpenMetaverse; 33using OpenMetaverse;
32using OpenSim.Framework; 34using OpenSim.Framework;
33using OpenSim.Region.CoreModules.Framework.InventoryAccess; 35using OpenSim.Region.CoreModules.Framework.InventoryAccess;
34using OpenSim.Region.Framework.Scenes; 36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Region.ScriptEngine.XEngine;
35using OpenSim.Services.Interfaces; 38using OpenSim.Services.Interfaces;
36using OpenSim.Tests.Common; 39using OpenSim.Tests.Common;
37 40
@@ -46,30 +49,54 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
46 TestHelpers.InMethod(); 49 TestHelpers.InMethod();
47// TestHelpers.EnableLogging(); 50// TestHelpers.EnableLogging();
48 51
52 XEngine xengine = new OpenSim.Region.ScriptEngine.XEngine.XEngine();
53 xengine.DebugLevel = 1;
54
55 IniConfigSource configSource = new IniConfigSource();
56
57 IConfig startupConfig = configSource.AddConfig("Startup");
58 startupConfig.Set("DefaultScriptEngine", "XEngine");
59
60 IConfig xEngineConfig = configSource.AddConfig("XEngine");
61 xEngineConfig.Set("Enabled", "true");
62 xEngineConfig.Set("StartDelay", "0");
63 xEngineConfig.Set("AppDomainLoading", "false");
64
49 string homeUrl = "http://hg.HomeTestPostAssetRewriteGrid.com"; 65 string homeUrl = "http://hg.HomeTestPostAssetRewriteGrid.com";
50 string foreignUrl = "http://hg.ForeignTestPostAssetRewriteGrid.com"; 66 string foreignUrl = "http://hg.ForeignTestPostAssetRewriteGrid.com";
51 UUID assetId = TestHelpers.ParseTail(0x1); 67 int soIdTail = 0x1;
52 UUID userId = TestHelpers.ParseTail(0x10); 68 UUID assetId = TestHelpers.ParseTail(0x10);
69 UUID userId = TestHelpers.ParseTail(0x100);
70 UUID sceneId = TestHelpers.ParseTail(0x1000);
53 string userFirstName = "TestPostAsset"; 71 string userFirstName = "TestPostAsset";
54 string userLastName = "Rewrite"; 72 string userLastName = "Rewrite";
55 int soPartsCount = 3; 73 int soPartsCount = 3;
56 74
57 Scene scene = new SceneHelpers().SetupScene(); 75 Scene scene = new SceneHelpers().SetupScene("TestPostAssetRewriteScene", sceneId, 1000, 1000, configSource);
76 SceneHelpers.SetupSceneModules(scene, configSource, xengine);
77 scene.StartScripts();
78
58 HGAssetMapper hgam = new HGAssetMapper(scene, homeUrl); 79 HGAssetMapper hgam = new HGAssetMapper(scene, homeUrl);
59 UserAccount ua 80 UserAccount ua
60 = UserAccountHelpers.CreateUserWithInventory(scene, userFirstName, userLastName, userId, "password"); 81 = UserAccountHelpers.CreateUserWithInventory(scene, userFirstName, userLastName, userId, "password");
61 82
62 //AssetBase ncAssetSet = AssetHelpers.CreateNotecardAsset(assetId, "TestPostAssetRewriteNotecard"); 83 SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, soPartsCount, ua.PrincipalID, "part", soIdTail);
63 SceneObjectGroup so = SceneHelpers.CreateSceneObject(soPartsCount, ua.PrincipalID); 84 RezScript(
64 AssetBase ncAssetSet = AssetHelpers.CreateAsset(assetId, so); 85 scene, so.UUID, "default { state_entry() { llSay(0, \"Hello World\"); } }", "item1", ua.PrincipalID);
65 ncAssetSet.CreatorID = foreignUrl;
66 hgam.PostAsset(foreignUrl, ncAssetSet);
67 86
87 AssetBase asset = AssetHelpers.CreateAsset(assetId, so);
88 asset.CreatorID = foreignUrl;
89 hgam.PostAsset(foreignUrl, asset);
90
91 // Check transformed asset.
68 AssetBase ncAssetGet = scene.AssetService.Get(assetId.ToString()); 92 AssetBase ncAssetGet = scene.AssetService.Get(assetId.ToString());
69 Assert.AreEqual(foreignUrl, ncAssetGet.CreatorID); 93 Assert.AreEqual(foreignUrl, ncAssetGet.CreatorID);
70 string xmlData = Utils.BytesToString(ncAssetGet.Data); 94 string xmlData = Utils.BytesToString(ncAssetGet.Data);
71 XmlDocument ncAssetGetXmlDoc = new XmlDocument(); 95 XmlDocument ncAssetGetXmlDoc = new XmlDocument();
72 ncAssetGetXmlDoc.LoadXml(xmlData); 96 ncAssetGetXmlDoc.LoadXml(xmlData);
97
98// Console.WriteLine(ncAssetGetXmlDoc.OuterXml);
99
73 XmlNodeList creatorDataNodes = ncAssetGetXmlDoc.GetElementsByTagName("CreatorData"); 100 XmlNodeList creatorDataNodes = ncAssetGetXmlDoc.GetElementsByTagName("CreatorData");
74 101
75 Assert.AreEqual(soPartsCount, creatorDataNodes.Count); 102 Assert.AreEqual(soPartsCount, creatorDataNodes.Count);
@@ -80,6 +107,40 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
80 Assert.AreEqual( 107 Assert.AreEqual(
81 string.Format("{0};{1} {2}", homeUrl, ua.FirstName, ua.LastName), creatorDataNode.InnerText); 108 string.Format("{0};{1} {2}", homeUrl, ua.FirstName, ua.LastName), creatorDataNode.InnerText);
82 } 109 }
110
111 // Check that saved script nodes have attributes
112 XmlNodeList savedScriptStateNodes = ncAssetGetXmlDoc.GetElementsByTagName("SavedScriptState");
113
114 Assert.AreEqual(1, savedScriptStateNodes.Count);
115 Assert.AreEqual(1, savedScriptStateNodes[0].Attributes.Count);
116 XmlNode uuidAttribute = savedScriptStateNodes[0].Attributes.GetNamedItem("UUID");
117 Assert.NotNull(uuidAttribute);
118 // XXX: To check the actual UUID attribute we would have to do some work to retreive the UUID of the task
119 // item created earlier.
120 }
121
122 private void RezScript(Scene scene, UUID soId, string script, string itemName, UUID userId)
123 {
124 InventoryItemBase itemTemplate = new InventoryItemBase();
125 // itemTemplate.ID = itemId;
126 itemTemplate.Name = itemName;
127 itemTemplate.Folder = soId;
128 itemTemplate.InvType = (int)InventoryType.LSL;
129
130 // XXX: Ultimately it would be better to be able to directly manipulate the script engine to rez a script
131 // immediately for tests rather than chunter through it's threaded mechanisms.
132 AutoResetEvent chatEvent = new AutoResetEvent(false);
133
134 scene.EventManager.OnChatFromWorld += (s, c) =>
135 {
136// Console.WriteLine("Got chat [{0}]", c.Message);
137 chatEvent.Set();
138 };
139
140 scene.RezNewScript(userId, itemTemplate, script);
141
142// Console.WriteLine("HERE");
143 Assert.IsTrue(chatEvent.WaitOne(60000), "Chat event in HGAssetMapperTests.RezScript not received");
83 } 144 }
84 } 145 }
85} \ No newline at end of file 146} \ No newline at end of file