aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
diff options
context:
space:
mode:
authoronefang2019-05-19 21:24:15 +1000
committeronefang2019-05-19 21:24:15 +1000
commit5e4d6cab00cb29cd088ab7b62ab13aff103b64cb (patch)
treea9fbc62df9eb2d1d9ba2698d8552eae71eca20d8 /OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
parentAdd a build script. (diff)
downloadopensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.zip
opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.gz
opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.bz2
opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.xz
Dump OpenSim 0.9.0.1 into it's own branch.
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs209
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));