aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs24
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs72
-rw-r--r--prebuild.xml1
3 files changed, 88 insertions, 9 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index d02a305..1955e5b 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -116,16 +116,20 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
116 #endregion 116 #endregion
117 117
118 /// <summary> 118 /// <summary>
119 /// Check for the existence of the baked texture assets. Request a rebake 119 /// Check for the existence of the baked texture assets.
120 /// unless checkonly is true.
121 /// </summary> 120 /// </summary>
122 /// <param name="client"></param> 121 /// <param name="client"></param>
123 /// <param name="checkonly"></param>
124 public bool ValidateBakedTextureCache(IClientAPI client) 122 public bool ValidateBakedTextureCache(IClientAPI client)
125 { 123 {
126 return ValidateBakedTextureCache(client, true); 124 return ValidateBakedTextureCache(client, true);
127 } 125 }
128 126
127 /// <summary>
128 /// Check for the existence of the baked texture assets. Request a rebake
129 /// unless checkonly is true.
130 /// </summary>
131 /// <param name="client"></param>
132 /// <param name="checkonly"></param>
129 private bool ValidateBakedTextureCache(IClientAPI client, bool checkonly) 133 private bool ValidateBakedTextureCache(IClientAPI client, bool checkonly)
130 { 134 {
131 ScenePresence sp = m_scene.GetScenePresence(client.AgentId); 135 ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
@@ -156,13 +160,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
156 160
157 defonly = false; // found a non-default texture reference 161 defonly = false; // found a non-default texture reference
158 162
159 if (! CheckBakedTextureAsset(client,face.TextureID,idx)) 163 if (!CheckBakedTextureAsset(client, face.TextureID, idx))
160 { 164 {
161 // the asset didn't exist if we are only checking, then we found a bad 165 // the asset didn't exist if we are only checking, then we found a bad
162 // one and we're done otherwise, ask for a rebake 166 // one and we're done otherwise, ask for a rebake
163 if (checkonly) return false; 167 if (checkonly)
168 return false;
164 169
165 m_log.InfoFormat("[AVFACTORY]: missing baked texture {0}, requesting rebake", face.TextureID); 170 m_log.InfoFormat("[AVFACTORY]: missing baked texture {0}, requesting rebake", face.TextureID);
171
166 client.SendRebakeAvatarTextures(face.TextureID); 172 client.SendRebakeAvatarTextures(face.TextureID);
167 } 173 }
168 } 174 }
@@ -183,7 +189,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
183 ScenePresence sp = m_scene.GetScenePresence(client.AgentId); 189 ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
184 if (sp == null) 190 if (sp == null)
185 { 191 {
186 m_log.WarnFormat("[AVFACTORY]: SetAppearance unable to find presence for {0}",client.AgentId); 192 m_log.WarnFormat("[AVFACTORY]: SetAppearance unable to find presence for {0}", client.AgentId);
187 return; 193 return;
188 } 194 }
189 195
@@ -211,7 +217,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
211 changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; 217 changed = sp.Appearance.SetTextureEntries(textureEntry) || changed;
212 218
213 m_log.InfoFormat("[AVFACTORY]: received texture update for {0}", client.AgentId); 219 m_log.InfoFormat("[AVFACTORY]: received texture update for {0}", client.AgentId);
214 Util.FireAndForget(delegate(object o) { ValidateBakedTextureCache(client,false); }); 220 Util.FireAndForget(delegate(object o) { ValidateBakedTextureCache(client, false); });
215 221
216 // This appears to be set only in the final stage of the appearance 222 // This appears to be set only in the final stage of the appearance
217 // update transaction. In theory, we should be able to do an immediate 223 // update transaction. In theory, we should be able to do an immediate
@@ -220,9 +226,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
220 // save only if there were changes, send no matter what (doesn't hurt to send twice) 226 // save only if there were changes, send no matter what (doesn't hurt to send twice)
221 if (changed) 227 if (changed)
222 QueueAppearanceSave(client.AgentId); 228 QueueAppearanceSave(client.AgentId);
229
223 QueueAppearanceSend(client.AgentId); 230 QueueAppearanceSend(client.AgentId);
224 } 231 }
225
226 } 232 }
227 233
228 // m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString()); 234 // m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString());
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs
new file mode 100644
index 0000000..cf4c331
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs
@@ -0,0 +1,72 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using NUnit.Framework;
30using OpenMetaverse;
31using OpenSim.Framework;
32using OpenSim.Region.Framework.Scenes;
33using OpenSim.Tests.Common;
34using OpenSim.Tests.Common.Mock;
35
36namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
37{
38 [TestFixture]
39 public class AvatarFactoryModuleTests
40 {
41 /// <summary>
42 /// Only partial right now since we don't yet test that it's ended up in the avatar appearance service.
43 /// </summary>
44 [Test]
45 public void TestSetAppearance()
46 {
47 TestHelper.InMethod();
48// log4net.Config.XmlConfigurator.Configure();
49
50 UUID userId = TestHelper.ParseTail(0x1);
51
52 AvatarFactoryModule afm = new AvatarFactoryModule();
53 TestScene scene = SceneSetupHelpers.SetupScene();
54 SceneSetupHelpers.SetupSceneModules(scene, afm);
55
56 AgentCircuitData acd = new AgentCircuitData();
57 acd.AgentID = userId;
58 TestClient tc = SceneSetupHelpers.AddRootAgent(scene, acd);
59
60 byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT];
61 for (byte i = 0; i < visualParams.Length; i++)
62 visualParams[i] = i;
63
64 afm.SetAppearance(tc, new Primitive.TextureEntry(TestHelper.ParseTail(0x10)), visualParams);
65
66 ScenePresence sp = scene.GetScenePresence(userId);
67
68 // TODO: Check baked texture
69 Assert.AreEqual(visualParams, sp.Appearance.VisualParams);
70 }
71 }
72} \ No newline at end of file
diff --git a/prebuild.xml b/prebuild.xml
index 8536a48..09450eb 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -2954,6 +2954,7 @@
2954 <!-- SADLY the way this works means you need to keep adding these paths --> 2954 <!-- SADLY the way this works means you need to keep adding these paths -->
2955 <Match path="Agent/TextureSender/Tests" pattern="*.cs" recurse="true"/> 2955 <Match path="Agent/TextureSender/Tests" pattern="*.cs" recurse="true"/>
2956 <Match path="Asset/Tests" pattern="*.cs" recurse="true"/> 2956 <Match path="Asset/Tests" pattern="*.cs" recurse="true"/>
2957 <Match path="Avatar/AvatarFactory/Tests" pattern="*.cs" recurse="true"/>
2957 <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/> 2958 <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/>
2958 <Match path="Framework/InventoryAccess/Tests" pattern="*.cs" recurse="true"/> 2959 <Match path="Framework/InventoryAccess/Tests" pattern="*.cs" recurse="true"/>
2959 <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/> 2960 <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/>