|
@@ -63,13 +63,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet).
|
|
|
+ /// Test saving an inventory path to a V0.1 OpenSim Inventory Archive
|
|
|
+ /// (subject to change since there is no fixed format yet).
|
|
|
/// </summary>
|
|
|
- // Commenting for now! The mock inventory service needs more beef, at least for
|
|
|
- // GetFolderForType
|
|
|
- // REFACTORING PROBLEM. This needs to be rewritten.
|
|
|
[Test]
|
|
|
- public void TestSaveIarV0_1()
|
|
|
+ public void TestSavePathToIarV0_1()
|
|
|
{
|
|
|
TestHelper.InMethod();
|
|
|
// log4net.Config.XmlConfigurator.Configure();
|
|
@@ -181,6 +179,123 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
|
|
// TODO: Test presence of more files and contents of files.
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Test saving a single inventory item to a V0.1 OpenSim Inventory Archive
|
|
|
+ /// (subject to change since there is no fixed format yet).
|
|
|
+ /// </summary>
|
|
|
+ [Test]
|
|
|
+ public void TestSaveItemToIarV0_1()
|
|
|
+ {
|
|
|
+ TestHelper.InMethod();
|
|
|
+// log4net.Config.XmlConfigurator.Configure();
|
|
|
+
|
|
|
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
|
|
|
+
|
|
|
+ Scene scene = SceneSetupHelpers.SetupScene("Inventory");
|
|
|
+ SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
|
|
|
+
|
|
|
+ // Create user
|
|
|
+ string userFirstName = "Jock";
|
|
|
+ string userLastName = "Stirrup";
|
|
|
+ string userPassword = "troll";
|
|
|
+ UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
|
|
|
+ UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword);
|
|
|
+
|
|
|
+ // Create asset
|
|
|
+ SceneObjectGroup object1;
|
|
|
+ SceneObjectPart part1;
|
|
|
+ {
|
|
|
+ string partName = "My Little Dog Object";
|
|
|
+ UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040");
|
|
|
+ PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
|
|
|
+ Vector3 groupPosition = new Vector3(10, 20, 30);
|
|
|
+ Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
|
|
+ Vector3 offsetPosition = new Vector3(5, 10, 15);
|
|
|
+
|
|
|
+ part1
|
|
|
+ = new SceneObjectPart(
|
|
|
+ ownerId, shape, groupPosition, rotationOffset, offsetPosition);
|
|
|
+ part1.Name = partName;
|
|
|
+
|
|
|
+ object1 = new SceneObjectGroup(part1);
|
|
|
+ scene.AddNewSceneObject(object1, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
|
|
+ AssetBase asset1 = AssetHelpers.CreateAsset(asset1Id, object1);
|
|
|
+ scene.AssetService.Store(asset1);
|
|
|
+
|
|
|
+ // Create item
|
|
|
+ UUID item1Id = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
|
|
+ string item1Name = "My Little Dog";
|
|
|
+ InventoryItemBase item1 = new InventoryItemBase();
|
|
|
+ item1.Name = item1Name;
|
|
|
+ item1.AssetID = asset1.FullID;
|
|
|
+ item1.ID = item1Id;
|
|
|
+ InventoryFolderBase objsFolder
|
|
|
+ = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects")[0];
|
|
|
+ item1.Folder = objsFolder.ID;
|
|
|
+ scene.AddInventoryItem(userId, item1);
|
|
|
+
|
|
|
+ MemoryStream archiveWriteStream = new MemoryStream();
|
|
|
+ archiverModule.OnInventoryArchiveSaved += SaveCompleted;
|
|
|
+
|
|
|
+ mre.Reset();
|
|
|
+ archiverModule.ArchiveInventory(
|
|
|
+ Guid.NewGuid(), userFirstName, userLastName, "Objects/" + item1Name, userPassword, archiveWriteStream);
|
|
|
+ mre.WaitOne(60000, false);
|
|
|
+
|
|
|
+ byte[] archive = archiveWriteStream.ToArray();
|
|
|
+ MemoryStream archiveReadStream = new MemoryStream(archive);
|
|
|
+ TarArchiveReader tar = new TarArchiveReader(archiveReadStream);
|
|
|
+
|
|
|
+ //bool gotControlFile = false;
|
|
|
+ bool gotObject1File = false;
|
|
|
+ //bool gotObject2File = false;
|
|
|
+ string expectedObject1FileName = InventoryArchiveWriteRequest.CreateArchiveItemName(item1);
|
|
|
+ string expectedObject1FilePath = string.Format(
|
|
|
+ "{0}{1}",
|
|
|
+ ArchiveConstants.INVENTORY_PATH,
|
|
|
+ expectedObject1FileName);
|
|
|
+
|
|
|
+ string filePath;
|
|
|
+ TarArchiveReader.TarEntryType tarEntryType;
|
|
|
+
|
|
|
+// Console.WriteLine("Reading archive");
|
|
|
+
|
|
|
+ while (tar.ReadEntry(out filePath, out tarEntryType) != null)
|
|
|
+ {
|
|
|
+ Console.WriteLine("Got {0}", filePath);
|
|
|
+
|
|
|
+// if (ArchiveConstants.CONTROL_FILE_PATH == filePath)
|
|
|
+// {
|
|
|
+// gotControlFile = true;
|
|
|
+// }
|
|
|
+
|
|
|
+ if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH) && filePath.EndsWith(".xml"))
|
|
|
+ {
|
|
|
+// string fileName = filePath.Remove(0, "Objects/".Length);
|
|
|
+//
|
|
|
+// if (fileName.StartsWith(part1.Name))
|
|
|
+// {
|
|
|
+ Assert.That(expectedObject1FilePath, Is.EqualTo(filePath));
|
|
|
+ gotObject1File = true;
|
|
|
+// }
|
|
|
+// else if (fileName.StartsWith(part2.Name))
|
|
|
+// {
|
|
|
+// Assert.That(fileName, Is.EqualTo(expectedObject2FileName));
|
|
|
+// gotObject2File = true;
|
|
|
+// }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// Assert.That(gotControlFile, Is.True, "No control file in archive");
|
|
|
+ Assert.That(gotObject1File, Is.True, "No item1 file in archive");
|
|
|
+// Assert.That(gotObject2File, Is.True, "No object2 file in archive");
|
|
|
+
|
|
|
+ // TODO: Test presence of more files and contents of files.
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where
|
|
|
/// an account exists with the creator name.
|