Fix obvious bug in XInventoryService.GetFolderItems() which was preventing the iar module from being able to save single item iars
							parent
							
								
									86f3f83250
								
							
						
					
					
						commit
						71433075a9
					
				| 
						 | 
				
			
			@ -206,11 +206,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
 | 
			
		|||
 | 
			
		||||
            if (components.Length == 1)
 | 
			
		||||
            {
 | 
			
		||||
//                m_log.DebugFormat("FOUND SINGLE COMPONENT [{0}]", components[0]);
 | 
			
		||||
//                m_log.DebugFormat(
 | 
			
		||||
//                    "FOUND SINGLE COMPONENT [{0}].  Looking for this in [{1}] {2}", 
 | 
			
		||||
//                    components[0], startFolder.Name, startFolder.ID);
 | 
			
		||||
                
 | 
			
		||||
                List<InventoryItemBase> items = inventoryService.GetFolderItems(startFolder.Owner, startFolder.ID);
 | 
			
		||||
                
 | 
			
		||||
//                m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Found {0} items in FindItemByPath()", items.Count);
 | 
			
		||||
                
 | 
			
		||||
                foreach (InventoryItemBase item in items)
 | 
			
		||||
                {
 | 
			
		||||
//                    m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Inspecting item {0} {1}", item.Name, item.ID);
 | 
			
		||||
                    
 | 
			
		||||
                    if (item.Name == components[0])
 | 
			
		||||
                        return item;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -259,13 +259,15 @@ namespace OpenSim.Services.InventoryService
 | 
			
		|||
        
 | 
			
		||||
        public virtual List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat("[XINVENTORY]: Fetch items for folder {0}", folderID);
 | 
			
		||||
            
 | 
			
		||||
            // Since we probably don't get a valid principal here, either ...
 | 
			
		||||
            //
 | 
			
		||||
            List<InventoryItemBase> invItems = new List<InventoryItemBase>();
 | 
			
		||||
 | 
			
		||||
            XInventoryItem[] items = m_Database.GetItems(
 | 
			
		||||
                    new string[] { "parentFolderID"},
 | 
			
		||||
                    new string[] { UUID.Zero.ToString() });
 | 
			
		||||
                    new string[] { "parentFolderID" },
 | 
			
		||||
                    new string[] { folderID.ToString() });
 | 
			
		||||
 | 
			
		||||
            foreach (XInventoryItem i in items)
 | 
			
		||||
                invItems.Add(ConvertToOpenSim(i));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue