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