diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs | 209 |
1 files changed, 111 insertions, 98 deletions
diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs index 9f197f5..6885299 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs | |||
@@ -65,7 +65,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
65 | protected SerialiserModule m_serialiserModule; | 65 | protected SerialiserModule m_serialiserModule; |
66 | 66 | ||
67 | protected TaskInventoryItem m_soundItem; | 67 | protected TaskInventoryItem m_soundItem; |
68 | 68 | ||
69 | private AutoResetEvent m_oarEvent = new AutoResetEvent(false); | ||
70 | |||
69 | [SetUp] | 71 | [SetUp] |
70 | public override void SetUp() | 72 | public override void SetUp() |
71 | { | 73 | { |
@@ -87,11 +89,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
87 | m_lastRequestId = requestId; | 89 | m_lastRequestId = requestId; |
88 | m_lastErrorMessage = errorMessage; | 90 | m_lastErrorMessage = errorMessage; |
89 | Console.WriteLine("About to pulse ArchiverTests on LoadCompleted"); | 91 | Console.WriteLine("About to pulse ArchiverTests on LoadCompleted"); |
90 | 92 | m_oarEvent.Set(); | |
91 | Monitor.PulseAll(this); | ||
92 | } | 93 | } |
93 | } | 94 | } |
94 | 95 | ||
95 | private void SaveCompleted(Guid requestId, string errorMessage) | 96 | private void SaveCompleted(Guid requestId, string errorMessage) |
96 | { | 97 | { |
97 | lock (this) | 98 | lock (this) |
@@ -99,7 +100,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
99 | m_lastRequestId = requestId; | 100 | m_lastRequestId = requestId; |
100 | m_lastErrorMessage = errorMessage; | 101 | m_lastErrorMessage = errorMessage; |
101 | Console.WriteLine("About to pulse ArchiverTests on SaveCompleted"); | 102 | Console.WriteLine("About to pulse ArchiverTests on SaveCompleted"); |
102 | Monitor.PulseAll(this); | 103 | m_oarEvent.Set(); |
103 | } | 104 | } |
104 | } | 105 | } |
105 | 106 | ||
@@ -110,6 +111,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
110 | PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere(); | 111 | PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere(); |
111 | Vector3 groupPosition = new Vector3(10, 20, 30); | 112 | Vector3 groupPosition = new Vector3(10, 20, 30); |
112 | Quaternion rotationOffset = new Quaternion(20, 30, 40, 50); | 113 | Quaternion rotationOffset = new Quaternion(20, 30, 40, 50); |
114 | rotationOffset.Normalize(); | ||
113 | // Vector3 offsetPosition = new Vector3(5, 10, 15); | 115 | // Vector3 offsetPosition = new Vector3(5, 10, 15); |
114 | 116 | ||
115 | return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, Vector3.Zero) { Name = partName }; | 117 | return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, Vector3.Zero) { Name = partName }; |
@@ -122,11 +124,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
122 | PrimitiveBaseShape shape = PrimitiveBaseShape.CreateCylinder(); | 124 | PrimitiveBaseShape shape = PrimitiveBaseShape.CreateCylinder(); |
123 | Vector3 groupPosition = new Vector3(90, 80, 70); | 125 | Vector3 groupPosition = new Vector3(90, 80, 70); |
124 | Quaternion rotationOffset = new Quaternion(60, 70, 80, 90); | 126 | Quaternion rotationOffset = new Quaternion(60, 70, 80, 90); |
127 | rotationOffset.Normalize(); | ||
125 | Vector3 offsetPosition = new Vector3(20, 25, 30); | 128 | Vector3 offsetPosition = new Vector3(20, 25, 30); |
126 | 129 | ||
127 | return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName }; | 130 | return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName }; |
128 | } | 131 | } |
129 | 132 | ||
130 | private void CreateTestObjects(Scene scene, out SceneObjectGroup sog1, out SceneObjectGroup sog2, out UUID ncAssetUuid) | 133 | private void CreateTestObjects(Scene scene, out SceneObjectGroup sog1, out SceneObjectGroup sog2, out UUID ncAssetUuid) |
131 | { | 134 | { |
132 | SceneObjectPart part1 = CreateSceneObjectPart1(); | 135 | SceneObjectPart part1 = CreateSceneObjectPart1(); |
@@ -192,17 +195,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
192 | m_scene.EventManager.OnOarFileSaved += SaveCompleted; | 195 | m_scene.EventManager.OnOarFileSaved += SaveCompleted; |
193 | 196 | ||
194 | Guid requestId = new Guid("00000000-0000-0000-0000-808080808080"); | 197 | Guid requestId = new Guid("00000000-0000-0000-0000-808080808080"); |
195 | 198 | ||
196 | lock (this) | 199 | m_oarEvent.Reset(); |
197 | { | 200 | m_archiverModule.ArchiveRegion(archiveWriteStream, requestId); |
198 | m_archiverModule.ArchiveRegion(archiveWriteStream, requestId); | 201 | //AssetServerBase assetServer = (AssetServerBase)scene.CommsManager.AssetCache.AssetServer; |
199 | //AssetServerBase assetServer = (AssetServerBase)scene.CommsManager.AssetCache.AssetServer; | 202 | //while (assetServer.HasWaitingRequests()) |
200 | //while (assetServer.HasWaitingRequests()) | 203 | // assetServer.ProcessNextRequest(); |
201 | // assetServer.ProcessNextRequest(); | 204 | |
202 | 205 | m_oarEvent.WaitOne(60000); | |
203 | Monitor.Wait(this, 60000); | 206 | |
204 | } | ||
205 | |||
206 | Assert.That(m_lastRequestId, Is.EqualTo(requestId)); | 207 | Assert.That(m_lastRequestId, Is.EqualTo(requestId)); |
207 | 208 | ||
208 | byte[] archive = archiveWriteStream.ToArray(); | 209 | byte[] archive = archiveWriteStream.ToArray(); |
@@ -210,7 +211,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
210 | TarArchiveReader tar = new TarArchiveReader(archiveReadStream); | 211 | TarArchiveReader tar = new TarArchiveReader(archiveReadStream); |
211 | 212 | ||
212 | bool gotNcAssetFile = false; | 213 | bool gotNcAssetFile = false; |
213 | 214 | ||
214 | string expectedNcAssetFileName = string.Format("{0}_{1}", ncAssetUuid, "notecard.txt"); | 215 | string expectedNcAssetFileName = string.Format("{0}_{1}", ncAssetUuid, "notecard.txt"); |
215 | 216 | ||
216 | List<string> foundPaths = new List<string>(); | 217 | List<string> foundPaths = new List<string>(); |
@@ -219,7 +220,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
219 | expectedPaths.Add(ArchiveHelpers.CreateObjectPath(sog2)); | 220 | expectedPaths.Add(ArchiveHelpers.CreateObjectPath(sog2)); |
220 | 221 | ||
221 | string filePath; | 222 | string filePath; |
222 | TarArchiveReader.TarEntryType tarEntryType; | 223 | TarArchiveReader.TarEntryType tarEntryType; |
223 | 224 | ||
224 | byte[] data = tar.ReadEntry(out filePath, out tarEntryType); | 225 | byte[] data = tar.ReadEntry(out filePath, out tarEntryType); |
225 | Assert.That(filePath, Is.EqualTo(ArchiveConstants.CONTROL_FILE_PATH)); | 226 | Assert.That(filePath, Is.EqualTo(ArchiveConstants.CONTROL_FILE_PATH)); |
@@ -227,9 +228,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
227 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); | 228 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); |
228 | ArchiveReadRequest arr = new ArchiveReadRequest(m_scene, (Stream)null, Guid.Empty, archiveOptions); | 229 | ArchiveReadRequest arr = new ArchiveReadRequest(m_scene, (Stream)null, Guid.Empty, archiveOptions); |
229 | arr.LoadControlFile(filePath, data, new DearchiveScenesInfo()); | 230 | arr.LoadControlFile(filePath, data, new DearchiveScenesInfo()); |
230 | 231 | ||
231 | Assert.That(arr.ControlFileLoaded, Is.True); | 232 | Assert.That(arr.ControlFileLoaded, Is.True); |
232 | 233 | ||
233 | while (tar.ReadEntry(out filePath, out tarEntryType) != null) | 234 | while (tar.ReadEntry(out filePath, out tarEntryType) != null) |
234 | { | 235 | { |
235 | if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) | 236 | if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) |
@@ -265,7 +266,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
265 | m_scene.AddNewSceneObject(sog1, false); | 266 | m_scene.AddNewSceneObject(sog1, false); |
266 | 267 | ||
267 | SceneObjectPart part2 = CreateSceneObjectPart2(); | 268 | SceneObjectPart part2 = CreateSceneObjectPart2(); |
268 | 269 | ||
269 | AssetNotecard nc = new AssetNotecard(); | 270 | AssetNotecard nc = new AssetNotecard(); |
270 | nc.BodyText = "Hello World!"; | 271 | nc.BodyText = "Hello World!"; |
271 | nc.Encode(); | 272 | nc.Encode(); |
@@ -275,10 +276,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
275 | = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); | 276 | = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); |
276 | m_scene.AssetService.Store(ncAsset); | 277 | m_scene.AssetService.Store(ncAsset); |
277 | SceneObjectGroup sog2 = new SceneObjectGroup(part2); | 278 | SceneObjectGroup sog2 = new SceneObjectGroup(part2); |
278 | TaskInventoryItem ncItem | 279 | TaskInventoryItem ncItem |
279 | = new TaskInventoryItem { Name = "ncItem", AssetID = ncAssetUuid, ItemID = ncItemUuid }; | 280 | = new TaskInventoryItem { Name = "ncItem", AssetID = ncAssetUuid, ItemID = ncItemUuid }; |
280 | part2.Inventory.AddInventoryItem(ncItem, true); | 281 | part2.Inventory.AddInventoryItem(ncItem, true); |
281 | 282 | ||
282 | m_scene.AddNewSceneObject(sog2, false); | 283 | m_scene.AddNewSceneObject(sog2, false); |
283 | 284 | ||
284 | MemoryStream archiveWriteStream = new MemoryStream(); | 285 | MemoryStream archiveWriteStream = new MemoryStream(); |
@@ -287,6 +288,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
287 | 288 | ||
288 | Dictionary<string, Object> options = new Dictionary<string, Object>(); | 289 | Dictionary<string, Object> options = new Dictionary<string, Object>(); |
289 | options.Add("noassets", true); | 290 | options.Add("noassets", true); |
291 | |||
290 | m_archiverModule.ArchiveRegion(archiveWriteStream, requestId, options); | 292 | m_archiverModule.ArchiveRegion(archiveWriteStream, requestId, options); |
291 | 293 | ||
292 | // Don't wait for completion - with --noassets save oar happens synchronously | 294 | // Don't wait for completion - with --noassets save oar happens synchronously |
@@ -304,7 +306,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
304 | expectedPaths.Add(ArchiveHelpers.CreateObjectPath(sog2)); | 306 | expectedPaths.Add(ArchiveHelpers.CreateObjectPath(sog2)); |
305 | 307 | ||
306 | string filePath; | 308 | string filePath; |
307 | TarArchiveReader.TarEntryType tarEntryType; | 309 | TarArchiveReader.TarEntryType tarEntryType; |
308 | 310 | ||
309 | byte[] data = tar.ReadEntry(out filePath, out tarEntryType); | 311 | byte[] data = tar.ReadEntry(out filePath, out tarEntryType); |
310 | Assert.That(filePath, Is.EqualTo(ArchiveConstants.CONTROL_FILE_PATH)); | 312 | Assert.That(filePath, Is.EqualTo(ArchiveConstants.CONTROL_FILE_PATH)); |
@@ -312,9 +314,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
312 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); | 314 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); |
313 | ArchiveReadRequest arr = new ArchiveReadRequest(m_scene, (Stream)null, Guid.Empty, archiveOptions); | 315 | ArchiveReadRequest arr = new ArchiveReadRequest(m_scene, (Stream)null, Guid.Empty, archiveOptions); |
314 | arr.LoadControlFile(filePath, data, new DearchiveScenesInfo()); | 316 | arr.LoadControlFile(filePath, data, new DearchiveScenesInfo()); |
315 | 317 | ||
316 | Assert.That(arr.ControlFileLoaded, Is.True); | 318 | Assert.That(arr.ControlFileLoaded, Is.True); |
317 | 319 | ||
318 | while (tar.ReadEntry(out filePath, out tarEntryType) != null) | 320 | while (tar.ReadEntry(out filePath, out tarEntryType) != null) |
319 | { | 321 | { |
320 | if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) | 322 | if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) |
@@ -343,11 +345,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
343 | 345 | ||
344 | MemoryStream archiveWriteStream = new MemoryStream(); | 346 | MemoryStream archiveWriteStream = new MemoryStream(); |
345 | TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); | 347 | TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); |
346 | 348 | ||
347 | // Put in a random blank directory to check that this doesn't upset the load process | 349 | // Put in a random blank directory to check that this doesn't upset the load process |
348 | tar.WriteDir("ignoreme"); | 350 | tar.WriteDir("ignoreme"); |
349 | 351 | ||
350 | // Also check that direct entries which will also have a file entry containing that directory doesn't | 352 | // Also check that direct entries which will also have a file entry containing that directory doesn't |
351 | // upset load | 353 | // upset load |
352 | tar.WriteDir(ArchiveConstants.TERRAINS_PATH); | 354 | tar.WriteDir(ArchiveConstants.TERRAINS_PATH); |
353 | 355 | ||
@@ -390,17 +392,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
390 | Math.Round(part1.GroupPosition.X), Math.Round(part1.GroupPosition.Y), Math.Round(part1.GroupPosition.Z), | 392 | Math.Round(part1.GroupPosition.X), Math.Round(part1.GroupPosition.Y), Math.Round(part1.GroupPosition.Z), |
391 | part1.UUID); | 393 | part1.UUID); |
392 | tar.WriteFile(ArchiveConstants.OBJECTS_PATH + object1FileName, SceneObjectSerializer.ToXml2Format(object1)); | 394 | tar.WriteFile(ArchiveConstants.OBJECTS_PATH + object1FileName, SceneObjectSerializer.ToXml2Format(object1)); |
393 | 395 | ||
394 | tar.Close(); | 396 | tar.Close(); |
395 | 397 | ||
396 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 398 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
397 | 399 | ||
398 | lock (this) | 400 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; |
399 | { | 401 | m_oarEvent.Reset(); |
400 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; | 402 | m_archiverModule.DearchiveRegion(archiveReadStream); |
401 | m_archiverModule.DearchiveRegion(archiveReadStream); | 403 | |
402 | } | 404 | m_oarEvent.WaitOne(60000); |
403 | 405 | ||
404 | Assert.That(m_lastErrorMessage, Is.Null); | 406 | Assert.That(m_lastErrorMessage, Is.Null); |
405 | 407 | ||
406 | TestLoadedRegion(part1, soundItemName, soundData); | 408 | TestLoadedRegion(part1, soundItemName, soundData); |
@@ -444,11 +446,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
444 | 446 | ||
445 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 447 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
446 | 448 | ||
447 | lock (this) | 449 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; |
448 | { | 450 | m_oarEvent.Reset(); |
449 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; | 451 | m_archiverModule.DearchiveRegion(archiveReadStream); |
450 | m_archiverModule.DearchiveRegion(archiveReadStream); | 452 | |
451 | } | 453 | m_oarEvent.WaitOne(60000); |
452 | 454 | ||
453 | Assert.That(m_lastErrorMessage, Is.Null); | 455 | Assert.That(m_lastErrorMessage, Is.Null); |
454 | 456 | ||
@@ -473,35 +475,33 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
473 | m_scene.AddNewSceneObject(sog1, false); | 475 | m_scene.AddNewSceneObject(sog1, false); |
474 | 476 | ||
475 | SceneObjectPart part2 = CreateSceneObjectPart2(); | 477 | SceneObjectPart part2 = CreateSceneObjectPart2(); |
476 | 478 | ||
477 | AssetNotecard nc = new AssetNotecard(); | 479 | AssetNotecard nc = new AssetNotecard(); |
478 | nc.BodyText = "Hello World!"; | 480 | nc.BodyText = "Hello World!"; |
479 | nc.Encode(); | 481 | nc.Encode(); |
480 | UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); | 482 | UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); |
481 | UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); | 483 | UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); |
482 | AssetBase ncAsset | 484 | AssetBase ncAsset |
483 | = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); | 485 | = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); |
484 | m_scene.AssetService.Store(ncAsset); | 486 | m_scene.AssetService.Store(ncAsset); |
485 | SceneObjectGroup sog2 = new SceneObjectGroup(part2); | 487 | SceneObjectGroup sog2 = new SceneObjectGroup(part2); |
486 | TaskInventoryItem ncItem | 488 | TaskInventoryItem ncItem |
487 | = new TaskInventoryItem { Name = "ncItem", AssetID = ncAssetUuid, ItemID = ncItemUuid }; | 489 | = new TaskInventoryItem { Name = "ncItem", AssetID = ncAssetUuid, ItemID = ncItemUuid }; |
488 | part2.Inventory.AddInventoryItem(ncItem, true); | 490 | part2.Inventory.AddInventoryItem(ncItem, true); |
489 | 491 | ||
490 | m_scene.AddNewSceneObject(sog2, false); | 492 | m_scene.AddNewSceneObject(sog2, false); |
491 | 493 | ||
492 | MemoryStream archiveWriteStream = new MemoryStream(); | 494 | MemoryStream archiveWriteStream = new MemoryStream(); |
493 | m_scene.EventManager.OnOarFileSaved += SaveCompleted; | 495 | m_scene.EventManager.OnOarFileSaved += SaveCompleted; |
494 | 496 | ||
495 | Guid requestId = new Guid("00000000-0000-0000-0000-808080808080"); | 497 | Guid requestId = new Guid("00000000-0000-0000-0000-808080808080"); |
496 | 498 | ||
497 | lock (this) | 499 | m_oarEvent.Reset(); |
498 | { | 500 | m_archiverModule.ArchiveRegion( |
499 | m_archiverModule.ArchiveRegion( | ||
500 | archiveWriteStream, requestId, new Dictionary<string, Object>() { { "wipe-owners", Boolean.TrueString } }); | 501 | archiveWriteStream, requestId, new Dictionary<string, Object>() { { "wipe-owners", Boolean.TrueString } }); |
501 | 502 | ||
502 | Monitor.Wait(this, 60000); | 503 | m_oarEvent.WaitOne(60000); |
503 | } | 504 | |
504 | |||
505 | Assert.That(m_lastRequestId, Is.EqualTo(requestId)); | 505 | Assert.That(m_lastRequestId, Is.EqualTo(requestId)); |
506 | 506 | ||
507 | byte[] archive = archiveWriteStream.ToArray(); | 507 | byte[] archive = archiveWriteStream.ToArray(); |
@@ -526,11 +526,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
526 | 526 | ||
527 | scene2.RegionInfo.EstateSettings.EstateOwner = estateOwner; | 527 | scene2.RegionInfo.EstateSettings.EstateOwner = estateOwner; |
528 | 528 | ||
529 | lock (this) | 529 | scene2.EventManager.OnOarFileLoaded += LoadCompleted; |
530 | { | 530 | m_oarEvent.Reset(); |
531 | scene2.EventManager.OnOarFileLoaded += LoadCompleted; | 531 | archiverModule.DearchiveRegion(archiveReadStream); |
532 | archiverModule.DearchiveRegion(archiveReadStream); | 532 | |
533 | } | 533 | m_oarEvent.WaitOne(60000); |
534 | 534 | ||
535 | Assert.That(m_lastErrorMessage, Is.Null); | 535 | Assert.That(m_lastErrorMessage, Is.Null); |
536 | 536 | ||
@@ -557,16 +557,16 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
557 | MockGroupsServicesConnector groupsService = new MockGroupsServicesConnector(); | 557 | MockGroupsServicesConnector groupsService = new MockGroupsServicesConnector(); |
558 | 558 | ||
559 | IConfigSource configSource = new IniConfigSource(); | 559 | IConfigSource configSource = new IniConfigSource(); |
560 | IConfig config = configSource.AddConfig("Groups"); | 560 | IConfig config = configSource.AddConfig("Groups"); |
561 | config.Set("Enabled", true); | 561 | config.Set("Enabled", true); |
562 | config.Set("Module", "GroupsModule"); | 562 | config.Set("Module", "GroupsModule"); |
563 | config.Set("DebugEnabled", true); | 563 | config.Set("DebugEnabled", true); |
564 | SceneHelpers.SetupSceneModules( | 564 | SceneHelpers.SetupSceneModules( |
565 | m_scene, configSource, new object[] { new GroupsModule(), groupsService, new LandManagementModule() }); | 565 | m_scene, configSource, new object[] { new GroupsModule(), groupsService, new LandManagementModule() }); |
566 | 566 | ||
567 | // Create group in scene for loading | 567 | // Create group in scene for loading |
568 | // FIXME: For now we'll put up with the issue that we'll get a group ID that varies across tests. | 568 | // FIXME: For now we'll put up with the issue that we'll get a group ID that varies across tests. |
569 | UUID groupID | 569 | UUID groupID |
570 | = groupsService.CreateGroup(UUID.Zero, "group1", "", true, UUID.Zero, 3, true, true, true, UUID.Zero); | 570 | = groupsService.CreateGroup(UUID.Zero, "group1", "", true, UUID.Zero, 3, true, true, true, UUID.Zero); |
571 | 571 | ||
572 | // Construct OAR | 572 | // Construct OAR |
@@ -591,11 +591,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
591 | oarStream = new MemoryStream(oarStream.ToArray()); | 591 | oarStream = new MemoryStream(oarStream.ToArray()); |
592 | 592 | ||
593 | // Load OAR | 593 | // Load OAR |
594 | lock (this) | 594 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; |
595 | { | 595 | m_oarEvent.Reset(); |
596 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; | 596 | m_archiverModule.DearchiveRegion(oarStream); |
597 | m_archiverModule.DearchiveRegion(oarStream); | 597 | |
598 | } | 598 | m_oarEvent.WaitOne(60000); |
599 | 599 | ||
600 | ILandObject rLo = m_scene.LandChannel.GetLandObject(16, 16); | 600 | ILandObject rLo = m_scene.LandChannel.GetLandObject(16, 16); |
601 | LandData rLd = rLo.LandData; | 601 | LandData rLd = rLo.LandData; |
@@ -617,7 +617,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
617 | 617 | ||
618 | MemoryStream archiveWriteStream = new MemoryStream(); | 618 | MemoryStream archiveWriteStream = new MemoryStream(); |
619 | TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); | 619 | TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); |
620 | 620 | ||
621 | tar.WriteDir(ArchiveConstants.TERRAINS_PATH); | 621 | tar.WriteDir(ArchiveConstants.TERRAINS_PATH); |
622 | tar.WriteFile( | 622 | tar.WriteFile( |
623 | ArchiveConstants.CONTROL_FILE_PATH, | 623 | ArchiveConstants.CONTROL_FILE_PATH, |
@@ -658,17 +658,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
658 | rs.AddSpawnPoint(SpawnPoint.Parse("1,-2,0.33")); | 658 | rs.AddSpawnPoint(SpawnPoint.Parse("1,-2,0.33")); |
659 | 659 | ||
660 | tar.WriteFile(ArchiveConstants.SETTINGS_PATH + "region1.xml", RegionSettingsSerializer.Serialize(rs)); | 660 | tar.WriteFile(ArchiveConstants.SETTINGS_PATH + "region1.xml", RegionSettingsSerializer.Serialize(rs)); |
661 | 661 | ||
662 | tar.Close(); | 662 | tar.Close(); |
663 | 663 | ||
664 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 664 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
665 | 665 | ||
666 | lock (this) | 666 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; |
667 | { | 667 | m_oarEvent.Reset(); |
668 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; | 668 | m_archiverModule.DearchiveRegion(archiveReadStream); |
669 | m_archiverModule.DearchiveRegion(archiveReadStream); | 669 | |
670 | } | 670 | m_oarEvent.WaitOne(60000); |
671 | 671 | ||
672 | Assert.That(m_lastErrorMessage, Is.Null); | 672 | Assert.That(m_lastErrorMessage, Is.Null); |
673 | RegionSettings loadedRs = m_scene.RegionInfo.RegionSettings; | 673 | RegionSettings loadedRs = m_scene.RegionInfo.RegionSettings; |
674 | 674 | ||
@@ -705,7 +705,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
705 | Assert.AreEqual(UUID.Zero, loadedRs.TelehubObject); // because no object was found with the original UUID | 705 | Assert.AreEqual(UUID.Zero, loadedRs.TelehubObject); // because no object was found with the original UUID |
706 | Assert.AreEqual(0, loadedRs.SpawnPoints().Count); | 706 | Assert.AreEqual(0, loadedRs.SpawnPoints().Count); |
707 | } | 707 | } |
708 | 708 | ||
709 | /// <summary> | 709 | /// <summary> |
710 | /// Test merging an OpenSim Region Archive into an existing scene | 710 | /// Test merging an OpenSim Region Archive into an existing scene |
711 | /// </summary> | 711 | /// </summary> |
@@ -737,13 +737,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
737 | m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false); | 737 | m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false); |
738 | 738 | ||
739 | // Write out this scene | 739 | // Write out this scene |
740 | |||
740 | scene.EventManager.OnOarFileSaved += SaveCompleted; | 741 | scene.EventManager.OnOarFileSaved += SaveCompleted; |
742 | m_oarEvent.Reset(); | ||
743 | m_archiverModule.ArchiveRegion(archiveWriteStream); | ||
741 | 744 | ||
742 | lock (this) | 745 | m_oarEvent.WaitOne(60000); |
743 | { | ||
744 | m_archiverModule.ArchiveRegion(archiveWriteStream); | ||
745 | Monitor.Wait(this, 60000); | ||
746 | } | ||
747 | } | 746 | } |
748 | 747 | ||
749 | { | 748 | { |
@@ -754,10 +753,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
754 | byte[] archive = archiveWriteStream.ToArray(); | 753 | byte[] archive = archiveWriteStream.ToArray(); |
755 | MemoryStream archiveReadStream = new MemoryStream(archive); | 754 | MemoryStream archiveReadStream = new MemoryStream(archive); |
756 | 755 | ||
756 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; | ||
757 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); | 757 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); |
758 | archiveOptions.Add("merge", null); | 758 | archiveOptions.Add("merge", null); |
759 | m_oarEvent.Reset(); | ||
759 | m_archiverModule.DearchiveRegion(archiveReadStream, Guid.Empty, archiveOptions); | 760 | m_archiverModule.DearchiveRegion(archiveReadStream, Guid.Empty, archiveOptions); |
760 | 761 | ||
762 | m_oarEvent.WaitOne(60000); | ||
763 | |||
761 | SceneObjectPart object1Existing = m_scene.GetSceneObjectPart(part1.Name); | 764 | SceneObjectPart object1Existing = m_scene.GetSceneObjectPart(part1.Name); |
762 | Assert.That(object1Existing, Is.Not.Null, "object1 was not present after merge"); | 765 | Assert.That(object1Existing, Is.Not.Null, "object1 was not present after merge"); |
763 | Assert.That(object1Existing.Name, Is.EqualTo(part1.Name), "object1 names not identical after merge"); | 766 | Assert.That(object1Existing.Name, Is.EqualTo(part1.Name), "object1 names not identical after merge"); |
@@ -816,7 +819,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
816 | SceneObjectGroup sog1; | 819 | SceneObjectGroup sog1; |
817 | SceneObjectGroup sog2; | 820 | SceneObjectGroup sog2; |
818 | UUID ncAssetUuid; | 821 | UUID ncAssetUuid; |
819 | 822 | ||
820 | CreateTestObjects(scene, out sog1, out sog2, out ncAssetUuid); | 823 | CreateTestObjects(scene, out sog1, out sog2, out ncAssetUuid); |
821 | 824 | ||
822 | expectedPaths[scene.RegionInfo.RegionID] = new List<string>(); | 825 | expectedPaths[scene.RegionInfo.RegionID] = new List<string>(); |
@@ -829,18 +832,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
829 | 832 | ||
830 | // Save OAR | 833 | // Save OAR |
831 | MemoryStream archiveWriteStream = new MemoryStream(); | 834 | MemoryStream archiveWriteStream = new MemoryStream(); |
832 | m_scene.EventManager.OnOarFileSaved += SaveCompleted; | ||
833 | 835 | ||
834 | Guid requestId = new Guid("00000000-0000-0000-0000-808080808080"); | 836 | Guid requestId = new Guid("00000000-0000-0000-0000-808080808080"); |
835 | 837 | ||
836 | Dictionary<string, Object> options = new Dictionary<string, Object>(); | 838 | Dictionary<string, Object> options = new Dictionary<string, Object>(); |
837 | options.Add("all", true); | 839 | options.Add("all", true); |
838 | 840 | ||
839 | lock (this) | 841 | m_scene.EventManager.OnOarFileSaved += SaveCompleted; |
840 | { | 842 | m_oarEvent.Reset(); |
841 | m_archiverModule.ArchiveRegion(archiveWriteStream, requestId, options); | 843 | m_archiverModule.ArchiveRegion(archiveWriteStream, requestId, options); |
842 | Monitor.Wait(this, 60000); | 844 | |
843 | } | 845 | m_oarEvent.WaitOne(60000); |
844 | 846 | ||
845 | 847 | ||
846 | // Check that the OAR contains the expected data | 848 | // Check that the OAR contains the expected data |
@@ -991,7 +993,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
991 | 993 | ||
992 | tar.Close(); | 994 | tar.Close(); |
993 | 995 | ||
994 | 996 | ||
995 | // Delete the current objects, to test that they're loaded from the OAR and didn't | 997 | // Delete the current objects, to test that they're loaded from the OAR and didn't |
996 | // just remain in the scene. | 998 | // just remain in the scene. |
997 | m_sceneHelpers.SceneManager.ForEachScene(delegate(Scene scene) | 999 | m_sceneHelpers.SceneManager.ForEachScene(delegate(Scene scene) |
@@ -1007,11 +1009,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
1007 | 1009 | ||
1008 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 1010 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
1009 | 1011 | ||
1010 | lock (this) | 1012 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; |
1011 | { | 1013 | m_oarEvent.Reset(); |
1012 | m_scene.EventManager.OnOarFileLoaded += LoadCompleted; | 1014 | m_archiverModule.DearchiveRegion(archiveReadStream); |
1013 | m_archiverModule.DearchiveRegion(archiveReadStream); | 1015 | |
1014 | } | 1016 | m_oarEvent.WaitOne(60000); |
1015 | 1017 | ||
1016 | Assert.That(m_lastErrorMessage, Is.Null); | 1018 | Assert.That(m_lastErrorMessage, Is.Null); |
1017 | 1019 | ||
@@ -1027,8 +1029,19 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
1027 | Assert.That(object1PartLoaded, Is.Not.Null, "object1 was not loaded"); | 1029 | Assert.That(object1PartLoaded, Is.Not.Null, "object1 was not loaded"); |
1028 | Assert.That(object1PartLoaded.Name, Is.EqualTo(part1.Name), "object1 names not identical"); | 1030 | Assert.That(object1PartLoaded.Name, Is.EqualTo(part1.Name), "object1 names not identical"); |
1029 | Assert.That(object1PartLoaded.GroupPosition, Is.EqualTo(part1.GroupPosition), "object1 group position not equal"); | 1031 | Assert.That(object1PartLoaded.GroupPosition, Is.EqualTo(part1.GroupPosition), "object1 group position not equal"); |
1030 | Assert.That( | 1032 | |
1031 | object1PartLoaded.RotationOffset, Is.EqualTo(part1.RotationOffset), "object1 rotation offset not equal"); | 1033 | Quaternion qtmp1 = new Quaternion ( |
1034 | (float)Math.Round(object1PartLoaded.RotationOffset.X,5), | ||
1035 | (float)Math.Round(object1PartLoaded.RotationOffset.Y,5), | ||
1036 | (float)Math.Round(object1PartLoaded.RotationOffset.Z,5), | ||
1037 | (float)Math.Round(object1PartLoaded.RotationOffset.W,5)); | ||
1038 | Quaternion qtmp2 = new Quaternion ( | ||
1039 | (float)Math.Round(part1.RotationOffset.X,5), | ||
1040 | (float)Math.Round(part1.RotationOffset.Y,5), | ||
1041 | (float)Math.Round(part1.RotationOffset.Z,5), | ||
1042 | (float)Math.Round(part1.RotationOffset.W,5)); | ||
1043 | |||
1044 | Assert.That(qtmp1, Is.EqualTo(qtmp2), "object1 rotation offset not equal"); | ||
1032 | Assert.That( | 1045 | Assert.That( |
1033 | object1PartLoaded.OffsetPosition, Is.EqualTo(part1.OffsetPosition), "object1 offset position not equal"); | 1046 | object1PartLoaded.OffsetPosition, Is.EqualTo(part1.OffsetPosition), "object1 offset position not equal"); |
1034 | Assert.That(object1PartLoaded.SitTargetOrientation, Is.EqualTo(part1.SitTargetOrientation)); | 1047 | Assert.That(object1PartLoaded.SitTargetOrientation, Is.EqualTo(part1.SitTargetOrientation)); |