From 26fe59c35e987283e5df07d3d06b00a886b7fbc4 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 24 Feb 2014 19:43:06 +0000 Subject: [PATCH] Improve regression test TestSetAppearance() --- .../Tests/AvatarFactoryModuleTests.cs | 143 +++++++++++------- 1 file changed, 85 insertions(+), 58 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs index b1f26efbfd..de014ba1bd 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs @@ -48,23 +48,103 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory public void TestSetAppearance() { TestHelpers.InMethod(); -// log4net.Config.XmlConfigurator.Configure(); +// TestHelpers.EnableLogging(); UUID userId = TestHelpers.ParseTail(0x1); + UUID bakedTextureID = TestHelpers.ParseTail(0x2); + // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly + // to the AssetService, which will then store temporary and local assets permanently + CoreAssetCache assetCache = new CoreAssetCache(); + AvatarFactoryModule afm = new AvatarFactoryModule(); - TestScene scene = new SceneHelpers().SetupScene(); + TestScene scene = new SceneHelpers(assetCache).SetupScene(); SceneHelpers.SetupSceneModules(scene, afm); ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); + // TODO: Use the actual BunchOfCaps functionality once we slot in the CapabilitiesModules + AssetBase bakedTextureAsset; + bakedTextureAsset + = new AssetBase( + bakedTextureID, "Test Baked Texture", (sbyte)AssetType.Texture, userId.ToString()); + bakedTextureAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet + bakedTextureAsset.Temporary = true; + bakedTextureAsset.Local = true; + scene.AssetService.Store(bakedTextureAsset); + byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; for (byte i = 0; i < visualParams.Length; i++) visualParams[i] = i; -// afm.SetAppearance(sp, new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)), visualParams); + Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); + uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); + Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); - // TODO: Check baked texture -// Assert.AreEqual(visualParams, sp.Appearance.VisualParams); + int rebakeRequestsReceived = 0; + ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; + + // This is the alpha texture + eyesFace.TextureID = bakedTextureID; + afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); + + Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); + + AssetBase eyesBake = scene.AssetService.Get(bakedTextureID.ToString()); + Assert.That(eyesBake, Is.Not.Null); + Assert.That(eyesBake.Temporary, Is.True); + Assert.That(eyesBake.Local, Is.True); + } + + /// + /// Test appearance setting where the baked texture UUID are library alpha textures. + /// + /// + /// For a mesh avatar, it appears these 'baked textures' are used. So these should not trigger a request to + /// rebake. + /// + [Test] + public void TestSetAppearanceAlphaBakedTextures() + { + TestHelpers.InMethod(); +// TestHelpers.EnableLogging(); + + UUID userId = TestHelpers.ParseTail(0x1); + UUID alphaTextureID = new UUID("3a367d1c-bef1-6d43-7595-e88c1e3aadb3"); + + // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly + // to the AssetService, which will then store temporary and local assets permanently + CoreAssetCache assetCache = new CoreAssetCache(); + + AvatarFactoryModule afm = new AvatarFactoryModule(); + TestScene scene = new SceneHelpers(assetCache).SetupScene(); + SceneHelpers.SetupSceneModules(scene, afm); + ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); + + AssetBase libraryAsset; + libraryAsset + = new AssetBase( + alphaTextureID, "Default Alpha Layer Texture", (sbyte)AssetType.Texture, userId.ToString()); + libraryAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet + libraryAsset.Temporary = false; + libraryAsset.Local = false; + scene.AssetService.Store(libraryAsset); + + byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; + for (byte i = 0; i < visualParams.Length; i++) + visualParams[i] = i; + + Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); + uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); + Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); + + int rebakeRequestsReceived = 0; + ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; + + // This is the alpha texture + eyesFace.TextureID = alphaTextureID; + afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); + + Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); } [Test] @@ -114,58 +194,5 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory Assert.That(eyesBake.Temporary, Is.False); Assert.That(eyesBake.Local, Is.False); } - - /// - /// Test appearance setting where the baked texture UUID are library alpha textures. - /// - /// - /// For a mesh avatar, it appears these 'baked textures' are used. So these should not trigger a request to - /// rebake. - /// - [Test] - public void TestSetAppearanceAlphaBakedTextures() - { - TestHelpers.InMethod(); -// TestHelpers.EnableLogging(); - - UUID userId = TestHelpers.ParseTail(0x1); - UUID alphaTextureID = new UUID("3a367d1c-bef1-6d43-7595-e88c1e3aadb3"); - - - // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly - // to the AssetService, which will then store temporary and local assets permanently - CoreAssetCache assetCache = new CoreAssetCache(); - - AvatarFactoryModule afm = new AvatarFactoryModule(); - TestScene scene = new SceneHelpers(assetCache).SetupScene(); - SceneHelpers.SetupSceneModules(scene, afm); - ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); - - AssetBase libraryAsset; - libraryAsset - = new AssetBase( - alphaTextureID, "Default Alpha Layer Texturee", (sbyte)AssetType.Texture, userId.ToString()); - libraryAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet - libraryAsset.Temporary = false; - libraryAsset.Local = false; - scene.AssetService.Store(libraryAsset); - - byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; - for (byte i = 0; i < visualParams.Length; i++) - visualParams[i] = i; - - Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); - uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); - Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); - - int rebakeRequestsReceived = 0; - ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; - - // This is the alpha texture - eyesFace.TextureID = alphaTextureID; - afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); - - Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); - } } } \ No newline at end of file