Example #1
0
        public void TestPurgeCreateConsistent()
        {
            Amib.Threading.SmartThreadPool pool = new Amib.Threading.SmartThreadPool(1000, 20);
            pool.Start();

            var userId = UUID.Parse("01EAE367-3A88-48B2-A226-AB3234EE506B");

            InventoryFolderBase folder1 = new InventoryFolderBase();
            folder1.ID = UUID.Parse("F1EAE367-3A88-48B2-A226-AB3234EE506B");
            folder1.Name = "Folder1";
            folder1.Level = InventoryFolderBase.FolderLevel.TopLevel;
            folder1.Owner = userId;
            folder1.ParentID = UUID.Zero;
            folder1.Type = (short)OpenMetaverse.FolderType.Root;

            try
            {
                _storage.GetFolderAttributes(folder1.ID);
            }
            catch (InventoryObjectMissingException e)
            {
                _storage.CreateFolder(folder1);
            }

            for (int i = 0; i < 100; i++)
            {
                UUID assetId = UUID.Random();
                UUID itemId = UUID.Random();
                InventoryItemBase item = new InventoryItemBase
                {
                    AssetID = assetId,
                    AssetType = (int)OpenMetaverse.AssetType.Texture,
                    BasePermissions = UInt32.MaxValue,
                    CreationDate = Util.UnixTimeSinceEpoch(),
                    CreatorId = userId.ToString(),
                    CurrentPermissions = unchecked((uint)-1),
                    Description = "A good item, of goodness",
                    EveryOnePermissions = Int32.MaxValue + (uint)1,
                    Flags = unchecked((uint)Int32.MinValue),
                    Folder = folder1.ID,
                    GroupID = UUID.Zero,
                    GroupOwned = false,
                    GroupPermissions = 0x123,
                    ID = itemId,
                    InvType = (int)OpenMetaverse.InventoryType.Texture,
                    Name = "Item of Goodness",
                    NextPermissions = 0xF,
                    Owner = userId,
                    SalePrice = 100,
                    SaleType = 1
                };
                pool.QueueWorkItem(() =>
                {
                    _storage.CreateItem(item);
                });

                pool.QueueWorkItem(() =>
                {
                    _storage.PurgeItem(item);
                });
                pool.QueueWorkItem(() =>
                {
                    _storage.CreateItem(item);
                });

                pool.QueueWorkItem(() =>
                {
                    _storage.PurgeItem(item);
                });

                pool.WaitForIdle();

                InventoryFolderBase newFolder = _storage.GetFolder(folder1.ID);
                //either the item should completely exist or not
                if (newFolder.Items.Exists((InventoryItemBase litem) => { return litem.ID == itemId; }))
                {
                    Assert.DoesNotThrow(delegate()
                    {
                        InventoryItemBase itemCopy = _storage.GetItem(itemId, UUID.Zero);
                    });

                    //cleanup
                    _storage.PurgeItem(item);
                }
                else
                {
                    var ex =
                        Assert.Throws<InventoryObjectMissingException>(delegate()
                        {
                            InventoryItemBase itemCopy = _storage.GetItem(itemId, UUID.Zero);
                        });

                    Assert.AreEqual("Item was not found in the index", ex.ErrorDetails);
                }
            }

            InventoryFolderBase finalFolder = _storage.GetFolder(folder1.ID);
            Assert.AreEqual(0, finalFolder.Items.Count);
        }
Example #2
0
        public void TestItemPurge()
        {
            UUID userId = UUID.Random();

            InventoryFolderBase folder1 = new InventoryFolderBase();
            folder1.ID = UUID.Random();
            folder1.Name = "Folder1";
            folder1.Level = InventoryFolderBase.FolderLevel.TopLevel;
            folder1.Owner = userId;
            folder1.ParentID = UUID.Zero;
            folder1.Type = (short)OpenMetaverse.FolderType.Root;

            _storage.CreateFolder(folder1);

            Amib.Threading.SmartThreadPool pool = new Amib.Threading.SmartThreadPool(1000, 20);
            pool.Start();
            for (int i = 0; i < 1000; i++)
            {
                pool.QueueWorkItem(() =>
                    {
                        UUID assetId = UUID.Random();
                        UUID itemId = UUID.Random();
                        InventoryItemBase item = new InventoryItemBase
                        {
                            AssetID = assetId,
                            AssetType = (int)OpenMetaverse.AssetType.Texture,
                            BasePermissions = UInt32.MaxValue,
                            CreationDate = Util.UnixTimeSinceEpoch(),
                            CreatorId = userId.ToString(),
                            CurrentPermissions = unchecked((uint)-1),
                            Description = "A good item, of goodness",
                            EveryOnePermissions = Int32.MaxValue + (uint)1,
                            Flags = unchecked((uint)Int32.MinValue),
                            Folder = folder1.ID,
                            GroupID = UUID.Zero,
                            GroupOwned = false,
                            GroupPermissions = 0x123,
                            ID = itemId,
                            InvType = (int)OpenMetaverse.InventoryType.Texture,
                            Name = "Item of Goodness",
                            NextPermissions = 0xF,
                            Owner = userId,
                            SalePrice = 100,
                            SaleType = 1
                        };

                        _storage.PurgeItem(item);
                        _storage.CreateItem(item);
                        _storage.PurgeItem(item);
                        _storage.CreateItem(item);
                        _storage.PurgeItem(item);

                        var ex =
                            Assert.Throws<InventoryObjectMissingException>(delegate()
                            {
                                InventoryItemBase itemCopy = _storage.GetItem(itemId, UUID.Zero);
                            });

                        Assert.AreEqual("Item was not found in the index", ex.ErrorDetails);
                    });
            }

            pool.WaitForIdle();

            InventoryFolderBase newFolder = _storage.GetFolder(folder1.ID);
            Assert.AreEqual(0, newFolder.Items.Count);
            Assert.AreEqual(5001, newFolder.Version);
        }