public void T010_StoreSimpleAsset()
        {
            AssetBase a1 = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture, UUID.Zero.ToString());
            AssetBase a2 = new AssetBase(uuid2, "asset two", (sbyte)AssetType.Texture, UUID.Zero.ToString());
            AssetBase a3 = new AssetBase(uuid3, "asset three", (sbyte)AssetType.Texture, UUID.Zero.ToString());
            a1.Data = asset1;
            a2.Data = asset1;
            a3.Data = asset1;

            PropertyScrambler<AssetBase> scrambler = new PropertyScrambler<AssetBase>()
                .DontScramble(x => x.Data)
                .DontScramble(x => x.ID)
                .DontScramble(x => x.FullID)
                .DontScramble(x => x.Metadata.ID)
                .DontScramble(x => x.Metadata.CreatorID)
                .DontScramble(x => x.Metadata.ContentType)
                .DontScramble(x => x.Metadata.FullID);

            scrambler.Scramble(a1);
            scrambler.Scramble(a2);
            scrambler.Scramble(a3);


            db.StoreAsset(a1);
            db.StoreAsset(a2);
            db.StoreAsset(a3);
            
            AssetBase a1a = db.GetAsset(uuid1);
            Assert.That(a1a, Constraints.PropertyCompareConstraint(a1));

            AssetBase a2a = db.GetAsset(uuid2);
            Assert.That(a2a, Constraints.PropertyCompareConstraint(a2));

            AssetBase a3a = db.GetAsset(uuid3);
            Assert.That(a3a, Constraints.PropertyCompareConstraint(a3));

            scrambler.Scramble(a1a);
            scrambler.Scramble(a2a);
            scrambler.Scramble(a3a);

            db.StoreAsset(a1a);
            db.StoreAsset(a2a);
            db.StoreAsset(a3a);

            AssetBase a1b = db.GetAsset(uuid1);
            Assert.That(a1b, Constraints.PropertyCompareConstraint(a1a));

            AssetBase a2b = db.GetAsset(uuid2);
            Assert.That(a2b, Constraints.PropertyCompareConstraint(a2a));

            AssetBase a3b = db.GetAsset(uuid3);
            Assert.That(a3b, Constraints.PropertyCompareConstraint(a3a));

            Assert.That(db.ExistsAsset(uuid1), Is.True);
            Assert.That(db.ExistsAsset(uuid2), Is.True);
            Assert.That(db.ExistsAsset(uuid3), Is.True);

            List<AssetMetadata> metadatas = db.FetchAssetMetadataSet(0, 1000);

            AssetMetadata metadata = metadatas.Find(x => x.FullID == uuid1);
            Assert.That(metadata.Name, Is.EqualTo(a1b.Name));
            Assert.That(metadata.Description, Is.EqualTo(a1b.Description));
            Assert.That(metadata.Type, Is.EqualTo(a1b.Type));
            Assert.That(metadata.Temporary, Is.EqualTo(a1b.Temporary));
            Assert.That(metadata.FullID, Is.EqualTo(a1b.FullID));
        }
        public void T016_RandomSogWithSceneParts()
        {
            PropertyScrambler<SceneObjectPart> scrambler =
                new PropertyScrambler<SceneObjectPart>()
                    .DontScramble(x => x.UUID);
            UUID tmpSog = UUID.Random();
            UUID tmp1 = UUID.Random();
            UUID tmp2 = UUID.Random();
            UUID tmp3 = UUID.Random();
            UUID newregion = UUID.Random();
            SceneObjectPart p1 = new SceneObjectPart();
            SceneObjectPart p2 = new SceneObjectPart();
            SceneObjectPart p3 = new SceneObjectPart();
            p1.Shape = PrimitiveBaseShape.Default;
            p2.Shape = PrimitiveBaseShape.Default;
            p3.Shape = PrimitiveBaseShape.Default;
            p1.UUID = tmp1;
            p2.UUID = tmp2;
            p3.UUID = tmp3;
            scrambler.Scramble(p1);
            scrambler.Scramble(p2);
            scrambler.Scramble(p3);

            SceneObjectGroup sog = NewSOG("Sop 0", tmpSog, newregion);
            PropertyScrambler<SceneObjectGroup> sogScrambler =
                new PropertyScrambler<SceneObjectGroup>()
                    .DontScramble(x => x.UUID);
            sogScrambler.Scramble(sog);
            sog.UUID = tmpSog;
            sog.AddPart(p1);
            sog.AddPart(p2);
            sog.AddPart(p3);

            SceneObjectPart[] parts = sog.GetParts();
            Assert.That(parts.Length, Is.EqualTo(4), "Assert.That(parts.Length,Is.EqualTo(4))");

            db.StoreObject(sog, newregion);
            List<SceneObjectGroup> sogs = db.LoadObjects(newregion);
            Assert.That(sogs.Count, Is.EqualTo(1), "Assert.That(sogs.Count,Is.EqualTo(1))");
            SceneObjectGroup newsog = sogs[0];

            SceneObjectPart[] newparts = newsog.GetParts();
            Assert.That(newparts.Length, Is.EqualTo(4), "Assert.That(newparts.Length,Is.EqualTo(4))");

            Assert.That(newsog, Constraints.PropertyCompareConstraint(sog)
                .IgnoreProperty(x=>x.LocalId)
                .IgnoreProperty(x=>x.HasGroupChanged)
                .IgnoreProperty(x=>x.IsSelected)
                .IgnoreProperty(x=>x.RegionHandle)
                .IgnoreProperty(x=>x.RegionUUID)
                .IgnoreProperty(x=>x.Scene)
                .IgnoreProperty(x=>x.Children)
                .IgnoreProperty(x=>x.RootPart));
        }
        public void T104_RandomUpdateItem()
        {
            PropertyScrambler<InventoryFolderBase> folderScrambler =
                new PropertyScrambler<InventoryFolderBase>()
                    .DontScramble(x => x.Owner)
                    .DontScramble(x => x.ParentID)
                    .DontScramble(x => x.ID);
            UUID owner = UUID.Random();
            UUID folder = UUID.Random();
            UUID rootId = UUID.Random();
            UUID rootAsset = UUID.Random();
            InventoryFolderBase f1 = NewFolder(folder, zero, owner, name1);
            folderScrambler.Scramble(f1);

            db.addInventoryFolder(f1);
            InventoryFolderBase f1a = db.getUserRootFolder(owner);
            Assert.That(f1a, Constraints.PropertyCompareConstraint(f1));

            folderScrambler.Scramble(f1a);

            db.updateInventoryFolder(f1a);

            InventoryFolderBase f1b = db.getUserRootFolder(owner);
            Assert.That(f1b, Constraints.PropertyCompareConstraint(f1a));

            //Now we have a valid folder to insert into, we can insert the item.
            PropertyScrambler<InventoryItemBase> inventoryScrambler =
                new PropertyScrambler<InventoryItemBase>()
                    .DontScramble(x => x.ID)
                    .DontScramble(x => x.AssetID)
                    .DontScramble(x => x.Owner)
                    .DontScramble(x => x.Folder);
            InventoryItemBase root = NewItem(rootId, folder, owner, iname1, rootAsset);
            inventoryScrambler.Scramble(root);
            db.addInventoryItem(root);

            InventoryItemBase expected = db.getInventoryItem(rootId);
            Assert.That(expected, Constraints.PropertyCompareConstraint(root)
                                    .IgnoreProperty(x => x.InvType)
                                    .IgnoreProperty(x => x.CreatorIdAsUuid)
                                    .IgnoreProperty(x => x.Description)
                                    .IgnoreProperty(x => x.CreatorId));

            inventoryScrambler.Scramble(expected);
            db.updateInventoryItem(expected);

            InventoryItemBase actual = db.getInventoryItem(rootId);
            Assert.That(actual, Constraints.PropertyCompareConstraint(expected)
                                    .IgnoreProperty(x => x.InvType)
                                    .IgnoreProperty(x => x.CreatorIdAsUuid)
                                    .IgnoreProperty(x => x.Description)
                                    .IgnoreProperty(x => x.CreatorId));
        }