diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs | 93 |
1 files changed, 86 insertions, 7 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs index 1830d41..9513408 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs | |||
@@ -34,7 +34,6 @@ using OpenSim.Framework; | |||
34 | using OpenSim.Region.CoreModules.Asset; | 34 | using OpenSim.Region.CoreModules.Asset; |
35 | using OpenSim.Region.Framework.Scenes; | 35 | using OpenSim.Region.Framework.Scenes; |
36 | using OpenSim.Tests.Common; | 36 | using OpenSim.Tests.Common; |
37 | using OpenSim.Tests.Common.Mock; | ||
38 | 37 | ||
39 | namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | 38 | namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory |
40 | { | 39 | { |
@@ -48,23 +47,103 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
48 | public void TestSetAppearance() | 47 | public void TestSetAppearance() |
49 | { | 48 | { |
50 | TestHelpers.InMethod(); | 49 | TestHelpers.InMethod(); |
51 | // log4net.Config.XmlConfigurator.Configure(); | 50 | // TestHelpers.EnableLogging(); |
52 | 51 | ||
53 | UUID userId = TestHelpers.ParseTail(0x1); | 52 | UUID userId = TestHelpers.ParseTail(0x1); |
53 | UUID bakedTextureID = TestHelpers.ParseTail(0x2); | ||
54 | 54 | ||
55 | // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly | ||
56 | // to the AssetService, which will then store temporary and local assets permanently | ||
57 | CoreAssetCache assetCache = new CoreAssetCache(); | ||
58 | |||
55 | AvatarFactoryModule afm = new AvatarFactoryModule(); | 59 | AvatarFactoryModule afm = new AvatarFactoryModule(); |
56 | TestScene scene = new SceneHelpers().SetupScene(); | 60 | TestScene scene = new SceneHelpers(assetCache).SetupScene(); |
57 | SceneHelpers.SetupSceneModules(scene, afm); | 61 | SceneHelpers.SetupSceneModules(scene, afm); |
58 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); | 62 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); |
59 | 63 | ||
64 | // TODO: Use the actual BunchOfCaps functionality once we slot in the CapabilitiesModules | ||
65 | AssetBase bakedTextureAsset; | ||
66 | bakedTextureAsset | ||
67 | = new AssetBase( | ||
68 | bakedTextureID, "Test Baked Texture", (sbyte)AssetType.Texture, userId.ToString()); | ||
69 | bakedTextureAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet | ||
70 | bakedTextureAsset.Temporary = true; | ||
71 | bakedTextureAsset.Local = true; | ||
72 | scene.AssetService.Store(bakedTextureAsset); | ||
73 | |||
60 | byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; | 74 | byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; |
61 | for (byte i = 0; i < visualParams.Length; i++) | 75 | for (byte i = 0; i < visualParams.Length; i++) |
62 | visualParams[i] = i; | 76 | visualParams[i] = i; |
63 | 77 | ||
64 | afm.SetAppearance(sp, new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)), visualParams); | 78 | Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); |
79 | uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); | ||
80 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); | ||
81 | |||
82 | int rebakeRequestsReceived = 0; | ||
83 | ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; | ||
84 | |||
85 | // This is the alpha texture | ||
86 | eyesFace.TextureID = bakedTextureID; | ||
87 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); | ||
88 | |||
89 | Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); | ||
90 | |||
91 | AssetBase eyesBake = scene.AssetService.Get(bakedTextureID.ToString()); | ||
92 | Assert.That(eyesBake, Is.Not.Null); | ||
93 | Assert.That(eyesBake.Temporary, Is.True); | ||
94 | Assert.That(eyesBake.Local, Is.True); | ||
95 | } | ||
96 | |||
97 | /// <summary> | ||
98 | /// Test appearance setting where the baked texture UUID are library alpha textures. | ||
99 | /// </summary> | ||
100 | /// <remarks> | ||
101 | /// For a mesh avatar, it appears these 'baked textures' are used. So these should not trigger a request to | ||
102 | /// rebake. | ||
103 | /// </remarks> | ||
104 | [Test] | ||
105 | public void TestSetAppearanceAlphaBakedTextures() | ||
106 | { | ||
107 | TestHelpers.InMethod(); | ||
108 | // TestHelpers.EnableLogging(); | ||
109 | |||
110 | UUID userId = TestHelpers.ParseTail(0x1); | ||
111 | UUID alphaTextureID = new UUID("3a367d1c-bef1-6d43-7595-e88c1e3aadb3"); | ||
112 | |||
113 | // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly | ||
114 | // to the AssetService, which will then store temporary and local assets permanently | ||
115 | CoreAssetCache assetCache = new CoreAssetCache(); | ||
116 | |||
117 | AvatarFactoryModule afm = new AvatarFactoryModule(); | ||
118 | TestScene scene = new SceneHelpers(assetCache).SetupScene(); | ||
119 | SceneHelpers.SetupSceneModules(scene, afm); | ||
120 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); | ||
121 | |||
122 | AssetBase libraryAsset; | ||
123 | libraryAsset | ||
124 | = new AssetBase( | ||
125 | alphaTextureID, "Default Alpha Layer Texture", (sbyte)AssetType.Texture, userId.ToString()); | ||
126 | libraryAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet | ||
127 | libraryAsset.Temporary = false; | ||
128 | libraryAsset.Local = false; | ||
129 | scene.AssetService.Store(libraryAsset); | ||
130 | |||
131 | byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; | ||
132 | for (byte i = 0; i < visualParams.Length; i++) | ||
133 | visualParams[i] = i; | ||
134 | |||
135 | Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); | ||
136 | uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); | ||
137 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); | ||
138 | |||
139 | int rebakeRequestsReceived = 0; | ||
140 | ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; | ||
65 | 141 | ||
66 | // TODO: Check baked texture | 142 | // This is the alpha texture |
67 | Assert.AreEqual(visualParams, sp.Appearance.VisualParams); | 143 | eyesFace.TextureID = alphaTextureID; |
144 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); | ||
145 | |||
146 | Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); | ||
68 | } | 147 | } |
69 | 148 | ||
70 | [Test] | 149 | [Test] |
@@ -102,7 +181,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
102 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); | 181 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); |
103 | eyesFace.TextureID = eyesTextureId; | 182 | eyesFace.TextureID = eyesTextureId; |
104 | 183 | ||
105 | afm.SetAppearance(sp, bakedTextureEntry, visualParams); | 184 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); |
106 | afm.SaveBakedTextures(userId); | 185 | afm.SaveBakedTextures(userId); |
107 | // Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId); | 186 | // Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId); |
108 | 187 | ||