aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-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