opensim – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | eva | 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 | |||
28 | using System; |
||
29 | using System.Collections.Generic; |
||
30 | using System.Drawing; |
||
31 | using System.Text; |
||
32 | using log4net.Config; |
||
33 | using NUnit.Framework; |
||
34 | using OpenMetaverse; |
||
35 | using OpenSim.Framework; |
||
36 | using OpenSim.Region.Framework.Interfaces; |
||
37 | using OpenSim.Region.Framework.Scenes; |
||
38 | using OpenSim.Tests.Common; |
||
39 | using log4net; |
||
40 | using System.Reflection; |
||
41 | using System.Data.Common; |
||
42 | |||
43 | // DBMS-specific: |
||
44 | using MySql.Data.MySqlClient; |
||
45 | using OpenSim.Data.MySQL; |
||
46 | |||
47 | using System.Data.SqlClient; |
||
48 | using OpenSim.Data.MSSQL; |
||
49 | |||
50 | using Mono.Data.Sqlite; |
||
51 | using OpenSim.Data.SQLite; |
||
52 | |||
53 | namespace OpenSim.Data.Tests |
||
54 | { |
||
55 | [TestFixture(Description = "Region store tests (SQLite)")] |
||
56 | public class SQLiteRegionTests : RegionTests<SqliteConnection, SQLiteSimulationData> |
||
57 | { |
||
58 | } |
||
59 | |||
60 | [TestFixture(Description = "Region store tests (MySQL)")] |
||
61 | public class MySqlRegionTests : RegionTests<MySqlConnection, MySQLSimulationData> |
||
62 | { |
||
63 | } |
||
64 | |||
65 | [TestFixture(Description = "Region store tests (MS SQL Server)")] |
||
66 | public class MSSQLRegionTests : RegionTests<SqlConnection, MSSQLSimulationData> |
||
67 | { |
||
68 | } |
||
69 | |||
70 | public class RegionTests<TConn, TRegStore> : BasicDataServiceTest<TConn, TRegStore> |
||
71 | where TConn : DbConnection, new() |
||
72 | where TRegStore : class, ISimulationDataStore, new() |
||
73 | { |
||
74 | bool m_rebuildDB; |
||
75 | |||
76 | public ISimulationDataStore db; |
||
77 | public UUID zero = UUID.Zero; |
||
78 | public UUID region1 = UUID.Random(); |
||
79 | public UUID region2 = UUID.Random(); |
||
80 | public UUID region3 = UUID.Random(); |
||
81 | public UUID region4 = UUID.Random(); |
||
82 | public UUID prim1 = UUID.Random(); |
||
83 | public UUID prim2 = UUID.Random(); |
||
84 | public UUID prim3 = UUID.Random(); |
||
85 | public UUID prim4 = UUID.Random(); |
||
86 | public UUID prim5 = UUID.Random(); |
||
87 | public UUID prim6 = UUID.Random(); |
||
88 | public UUID item1 = UUID.Random(); |
||
89 | public UUID item2 = UUID.Random(); |
||
90 | public UUID item3 = UUID.Random(); |
||
91 | |||
92 | public static Random random = new Random(); |
||
93 | |||
94 | public string itemname1 = "item1"; |
||
95 | |||
96 | public uint localID = 1; |
||
97 | |||
98 | public double height1 = 20; |
||
99 | public double height2 = 100; |
||
100 | |||
101 | public RegionTests(string conn, bool rebuild) |
||
102 | : base(conn) |
||
103 | { |
||
104 | m_rebuildDB = rebuild; |
||
105 | } |
||
106 | |||
107 | public RegionTests() : this("", true) { } |
||
108 | public RegionTests(string conn) : this(conn, true) {} |
||
109 | public RegionTests(bool rebuild): this("", rebuild) {} |
||
110 | |||
111 | |||
112 | protected override void InitService(object service) |
||
113 | { |
||
114 | ClearDB(); |
||
115 | db = (ISimulationDataStore)service; |
||
116 | db.Initialise(m_connStr); |
||
117 | } |
||
118 | |||
119 | private void ClearDB() |
||
120 | { |
||
121 | string[] reg_tables = new string[] { |
||
122 | "prims", "primshapes", "primitems", "terrain", "land", "landaccesslist", "regionban", "regionsettings" |
||
123 | }; |
||
124 | |||
125 | if (m_rebuildDB) |
||
126 | { |
||
127 | DropTables(reg_tables); |
||
128 | ResetMigrations("RegionStore"); |
||
129 | } |
||
130 | else |
||
131 | { |
||
132 | ClearTables(reg_tables); |
||
133 | } |
||
134 | } |
||
135 | |||
136 | // Test Plan |
||
137 | // Prims |
||
138 | // - empty test - 001 |
||
139 | // - store / retrieve basic prims (most minimal we can make) - 010, 011 |
||
140 | // - store / retrieve parts in a scenegroup 012 |
||
141 | // - store a prim with complete information for consistency check 013 |
||
142 | // - update existing prims, make sure it sticks - 014 |
||
143 | // - tests empty inventory - 020 |
||
144 | // - add inventory items to prims make - 021 |
||
145 | // - retrieves the added item - 022 |
||
146 | // - update inventory items to prims - 023 |
||
147 | // - remove inventory items make sure it sticks - 024 |
||
148 | // - checks if all parameters are persistent - 025 |
||
149 | // - adds many items and see if it is handled correctly - 026 |
||
150 | |||
151 | [Test] |
||
152 | public void T001_LoadEmpty() |
||
153 | { |
||
154 | TestHelpers.InMethod(); |
||
155 | |||
156 | List<SceneObjectGroup> objs = db.LoadObjects(region1); |
||
157 | List<SceneObjectGroup> objs3 = db.LoadObjects(region3); |
||
158 | List<LandData> land = db.LoadLandObjects(region1); |
||
159 | |||
160 | Assert.That(objs.Count, Is.EqualTo(0), "Assert.That(objs.Count, Is.EqualTo(0))"); |
||
161 | Assert.That(objs3.Count, Is.EqualTo(0), "Assert.That(objs3.Count, Is.EqualTo(0))"); |
||
162 | Assert.That(land.Count, Is.EqualTo(0), "Assert.That(land.Count, Is.EqualTo(0))"); |
||
163 | } |
||
164 | |||
165 | // SOG round trips |
||
166 | // * store objects, make sure they save |
||
167 | // * update |
||
168 | |||
169 | [Test] |
||
170 | public void T010_StoreSimpleObject() |
||
171 | { |
||
172 | TestHelpers.InMethod(); |
||
173 | |||
174 | SceneObjectGroup sog = NewSOG("object1", prim1, region1); |
||
175 | SceneObjectGroup sog2 = NewSOG("object2", prim2, region1); |
||
176 | |||
177 | // in case the objects don't store |
||
178 | try |
||
179 | { |
||
180 | db.StoreObject(sog, region1); |
||
181 | } |
||
182 | catch (Exception e) |
||
183 | { |
||
184 | m_log.Error(e.ToString()); |
||
185 | Assert.Fail(); |
||
186 | } |
||
187 | |||
188 | try |
||
189 | { |
||
190 | db.StoreObject(sog2, region1); |
||
191 | } |
||
192 | catch (Exception e) |
||
193 | { |
||
194 | m_log.Error(e.ToString()); |
||
195 | Assert.Fail(); |
||
196 | } |
||
197 | |||
198 | // This tests the ADO.NET driver |
||
199 | List<SceneObjectGroup> objs = db.LoadObjects(region1); |
||
200 | |||
201 | Assert.That(objs.Count, Is.EqualTo(2), "Assert.That(objs.Count, Is.EqualTo(2))"); |
||
202 | } |
||
203 | |||
204 | [Test] |
||
205 | public void T011_ObjectNames() |
||
206 | { |
||
207 | TestHelpers.InMethod(); |
||
208 | |||
209 | List<SceneObjectGroup> objs = db.LoadObjects(region1); |
||
210 | foreach (SceneObjectGroup sog in objs) |
||
211 | { |
||
212 | SceneObjectPart p = sog.RootPart; |
||
213 | Assert.That("", Is.Not.EqualTo(p.Name), "Assert.That(\"\", Is.Not.EqualTo(p.Name))"); |
||
214 | Assert.That(p.Name, Is.EqualTo(p.Description), "Assert.That(p.Name, Is.EqualTo(p.Description))"); |
||
215 | } |
||
216 | } |
||
217 | |||
218 | [Test] |
||
219 | public void T012_SceneParts() |
||
220 | { |
||
221 | TestHelpers.InMethod(); |
||
222 | |||
223 | UUID tmp0 = UUID.Random(); |
||
224 | UUID tmp1 = UUID.Random(); |
||
225 | UUID tmp2 = UUID.Random(); |
||
226 | UUID tmp3 = UUID.Random(); |
||
227 | UUID newregion = UUID.Random(); |
||
228 | SceneObjectPart p1 = NewSOP("SoP 1",tmp1); |
||
229 | SceneObjectPart p2 = NewSOP("SoP 2",tmp2); |
||
230 | SceneObjectPart p3 = NewSOP("SoP 3",tmp3); |
||
231 | SceneObjectGroup sog = NewSOG("Sop 0", tmp0, newregion); |
||
232 | sog.AddPart(p1); |
||
233 | sog.AddPart(p2); |
||
234 | sog.AddPart(p3); |
||
235 | |||
236 | SceneObjectPart[] parts = sog.Parts; |
||
237 | Assert.That(parts.Length,Is.EqualTo(4), "Assert.That(parts.Length,Is.EqualTo(4))"); |
||
238 | |||
239 | db.StoreObject(sog, newregion); |
||
240 | List<SceneObjectGroup> sogs = db.LoadObjects(newregion); |
||
241 | Assert.That(sogs.Count,Is.EqualTo(1), "Assert.That(sogs.Count,Is.EqualTo(1))"); |
||
242 | SceneObjectGroup newsog = sogs[0]; |
||
243 | |||
244 | SceneObjectPart[] newparts = newsog.Parts; |
||
245 | Assert.That(newparts.Length,Is.EqualTo(4), "Assert.That(newparts.Length,Is.EqualTo(4))"); |
||
246 | |||
247 | Assert.That(newsog.ContainsPart(tmp0), "Assert.That(newsog.ContainsPart(tmp0))"); |
||
248 | Assert.That(newsog.ContainsPart(tmp1), "Assert.That(newsog.ContainsPart(tmp1))"); |
||
249 | Assert.That(newsog.ContainsPart(tmp2), "Assert.That(newsog.ContainsPart(tmp2))"); |
||
250 | Assert.That(newsog.ContainsPart(tmp3), "Assert.That(newsog.ContainsPart(tmp3))"); |
||
251 | } |
||
252 | |||
253 | [Test] |
||
254 | public void T013_DatabasePersistency() |
||
255 | { |
||
256 | TestHelpers.InMethod(); |
||
257 | |||
258 | // Sets all ScenePart parameters, stores and retrieves them, then check for consistency with initial data |
||
259 | // The commented Asserts are the ones that are unchangeable (when storing on the database, their "Set" values are ignored |
||
260 | // The ObjectFlags is an exception, if it is entered incorrectly, the object IS REJECTED on the database silently. |
||
261 | UUID creator,uuid = new UUID(); |
||
262 | creator = UUID.Random(); |
||
263 | uint iserial = (uint)random.Next(); |
||
264 | TaskInventoryDictionary dic = new TaskInventoryDictionary(); |
||
265 | uint objf = (uint) random.Next(); |
||
266 | uuid = prim4; |
||
267 | uint localid = localID+1; |
||
268 | localID = localID + 1; |
||
269 | string name = "Adam West"; |
||
270 | byte material = (byte) random.Next(127); |
||
271 | ulong regionh = (ulong)random.NextDouble() * (ulong)random.Next(); |
||
272 | int pin = random.Next(); |
||
273 | Byte[] partsys = new byte[8]; |
||
274 | Byte[] textani = new byte[8]; |
||
275 | random.NextBytes(textani); |
||
276 | random.NextBytes(partsys); |
||
277 | DateTime expires = new DateTime(2008, 12, 20); |
||
278 | DateTime rezzed = new DateTime(2009, 07, 15); |
||
279 | Vector3 groupos = new Vector3(random.Next(),random.Next(),random.Next()); |
||
280 | Vector3 offset = new Vector3(random.Next(),random.Next(),random.Next()); |
||
281 | Quaternion rotoff = new Quaternion(random.Next(),random.Next(),random.Next(),random.Next()); |
||
282 | Vector3 velocity = new Vector3(random.Next(),random.Next(),random.Next()); |
||
283 | Vector3 angvelo = new Vector3(random.Next(),random.Next(),random.Next()); |
||
284 | Vector3 accel = new Vector3(random.Next(),random.Next(),random.Next()); |
||
285 | string description = name; |
||
286 | Color color = Color.FromArgb(255, 165, 50, 100); |
||
287 | string text = "All Your Base Are Belong to Us"; |
||
288 | string sitname = "SitName"; |
||
289 | string touchname = "TouchName"; |
||
290 | int linknum = random.Next(); |
||
291 | byte clickaction = (byte) random.Next(127); |
||
292 | PrimitiveBaseShape pbshap = new PrimitiveBaseShape(); |
||
293 | pbshap = PrimitiveBaseShape.Default; |
||
294 | pbshap.PathBegin = ushort.MaxValue; |
||
295 | pbshap.PathEnd = ushort.MaxValue; |
||
296 | pbshap.ProfileBegin = ushort.MaxValue; |
||
297 | pbshap.ProfileEnd = ushort.MaxValue; |
||
298 | pbshap.ProfileHollow = ushort.MaxValue; |
||
299 | Vector3 scale = new Vector3(random.Next(),random.Next(),random.Next()); |
||
300 | |||
301 | RegionInfo regionInfo = new RegionInfo(); |
||
302 | regionInfo.RegionID = region3; |
||
303 | regionInfo.RegionLocX = 0; |
||
304 | regionInfo.RegionLocY = 0; |
||
305 | |||
306 | SceneObjectPart sop = new SceneObjectPart(); |
||
307 | SceneObjectGroup sog = new SceneObjectGroup(sop); |
||
308 | |||
309 | sop.RegionHandle = regionh; |
||
310 | sop.UUID = uuid; |
||
311 | sop.LocalId = localid; |
||
312 | sop.Shape = pbshap; |
||
313 | sop.GroupPosition = groupos; |
||
314 | sop.RotationOffset = rotoff; |
||
315 | sop.CreatorID = creator; |
||
316 | sop.InventorySerial = iserial; |
||
317 | sop.TaskInventory = dic; |
||
318 | sop.Flags = (PrimFlags)objf; |
||
319 | sop.Name = name; |
||
320 | sop.Material = material; |
||
321 | sop.ScriptAccessPin = pin; |
||
322 | sop.TextureAnimation = textani; |
||
323 | sop.ParticleSystem = partsys; |
||
324 | sop.Expires = expires; |
||
325 | sop.Rezzed = rezzed; |
||
326 | sop.OffsetPosition = offset; |
||
327 | sop.Velocity = velocity; |
||
328 | sop.AngularVelocity = angvelo; |
||
329 | sop.Acceleration = accel; |
||
330 | sop.Description = description; |
||
331 | sop.Color = color; |
||
332 | sop.Text = text; |
||
333 | sop.SitName = sitname; |
||
334 | sop.TouchName = touchname; |
||
335 | sop.LinkNum = linknum; |
||
336 | sop.ClickAction = clickaction; |
||
337 | sop.Scale = scale; |
||
338 | |||
339 | //Tests if local part accepted the parameters: |
||
340 | Assert.That(regionh,Is.EqualTo(sop.RegionHandle), "Assert.That(regionh,Is.EqualTo(sop.RegionHandle))"); |
||
341 | Assert.That(localid,Is.EqualTo(sop.LocalId), "Assert.That(localid,Is.EqualTo(sop.LocalId))"); |
||
342 | Assert.That(groupos,Is.EqualTo(sop.GroupPosition), "Assert.That(groupos,Is.EqualTo(sop.GroupPosition))"); |
||
343 | Assert.That(name,Is.EqualTo(sop.Name), "Assert.That(name,Is.EqualTo(sop.Name))"); |
||
344 | Assert.That(rotoff,Is.EqualTo(sop.RotationOffset), "Assert.That(rotoff,Is.EqualTo(sop.RotationOffset))"); |
||
345 | Assert.That(uuid,Is.EqualTo(sop.UUID), "Assert.That(uuid,Is.EqualTo(sop.UUID))"); |
||
346 | Assert.That(creator,Is.EqualTo(sop.CreatorID), "Assert.That(creator,Is.EqualTo(sop.CreatorID))"); |
||
347 | // Modified in-class |
||
348 | // Assert.That(iserial,Is.EqualTo(sop.InventorySerial), "Assert.That(iserial,Is.EqualTo(sop.InventorySerial))"); |
||
349 | Assert.That(dic,Is.EqualTo(sop.TaskInventory), "Assert.That(dic,Is.EqualTo(sop.TaskInventory))"); |
||
350 | Assert.That(objf, Is.EqualTo((uint)sop.Flags), "Assert.That(objf,Is.EqualTo(sop.Flags))"); |
||
351 | Assert.That(name,Is.EqualTo(sop.Name), "Assert.That(name,Is.EqualTo(sop.Name))"); |
||
352 | Assert.That(material,Is.EqualTo(sop.Material), "Assert.That(material,Is.EqualTo(sop.Material))"); |
||
353 | Assert.That(pin,Is.EqualTo(sop.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(sop.ScriptAccessPin))"); |
||
354 | Assert.That(textani,Is.EqualTo(sop.TextureAnimation), "Assert.That(textani,Is.EqualTo(sop.TextureAnimation))"); |
||
355 | Assert.That(partsys,Is.EqualTo(sop.ParticleSystem), "Assert.That(partsys,Is.EqualTo(sop.ParticleSystem))"); |
||
356 | Assert.That(expires,Is.EqualTo(sop.Expires), "Assert.That(expires,Is.EqualTo(sop.Expires))"); |
||
357 | Assert.That(rezzed,Is.EqualTo(sop.Rezzed), "Assert.That(rezzed,Is.EqualTo(sop.Rezzed))"); |
||
358 | Assert.That(offset,Is.EqualTo(sop.OffsetPosition), "Assert.That(offset,Is.EqualTo(sop.OffsetPosition))"); |
||
359 | Assert.That(velocity,Is.EqualTo(sop.Velocity), "Assert.That(velocity,Is.EqualTo(sop.Velocity))"); |
||
360 | Assert.That(angvelo,Is.EqualTo(sop.AngularVelocity), "Assert.That(angvelo,Is.EqualTo(sop.AngularVelocity))"); |
||
361 | Assert.That(accel,Is.EqualTo(sop.Acceleration), "Assert.That(accel,Is.EqualTo(sop.Acceleration))"); |
||
362 | Assert.That(description,Is.EqualTo(sop.Description), "Assert.That(description,Is.EqualTo(sop.Description))"); |
||
363 | Assert.That(color,Is.EqualTo(sop.Color), "Assert.That(color,Is.EqualTo(sop.Color))"); |
||
364 | Assert.That(text,Is.EqualTo(sop.Text), "Assert.That(text,Is.EqualTo(sop.Text))"); |
||
365 | Assert.That(sitname,Is.EqualTo(sop.SitName), "Assert.That(sitname,Is.EqualTo(sop.SitName))"); |
||
366 | Assert.That(touchname,Is.EqualTo(sop.TouchName), "Assert.That(touchname,Is.EqualTo(sop.TouchName))"); |
||
367 | Assert.That(linknum,Is.EqualTo(sop.LinkNum), "Assert.That(linknum,Is.EqualTo(sop.LinkNum))"); |
||
368 | Assert.That(clickaction,Is.EqualTo(sop.ClickAction), "Assert.That(clickaction,Is.EqualTo(sop.ClickAction))"); |
||
369 | Assert.That(scale,Is.EqualTo(sop.Scale), "Assert.That(scale,Is.EqualTo(sop.Scale))"); |
||
370 | |||
371 | // This is necessary or object will not be inserted in DB |
||
372 | sop.Flags = PrimFlags.None; |
||
373 | |||
374 | // Inserts group in DB |
||
375 | db.StoreObject(sog,region3); |
||
376 | List<SceneObjectGroup> sogs = db.LoadObjects(region3); |
||
377 | Assert.That(sogs.Count, Is.EqualTo(1), "Assert.That(sogs.Count, Is.EqualTo(1))"); |
||
378 | // Makes sure there are no double insertions: |
||
379 | db.StoreObject(sog,region3); |
||
380 | sogs = db.LoadObjects(region3); |
||
381 | Assert.That(sogs.Count, Is.EqualTo(1), "Assert.That(sogs.Count, Is.EqualTo(1))"); |
||
382 | |||
383 | |||
384 | // Tests if the parameters were inserted correctly |
||
385 | SceneObjectPart p = sogs[0].RootPart; |
||
386 | Assert.That(regionh,Is.EqualTo(p.RegionHandle), "Assert.That(regionh,Is.EqualTo(p.RegionHandle))"); |
||
387 | //Assert.That(localid,Is.EqualTo(p.LocalId), "Assert.That(localid,Is.EqualTo(p.LocalId))"); |
||
388 | Assert.That(groupos,Is.EqualTo(p.GroupPosition), "Assert.That(groupos,Is.EqualTo(p.GroupPosition))"); |
||
389 | Assert.That(name,Is.EqualTo(p.Name), "Assert.That(name,Is.EqualTo(p.Name))"); |
||
390 | Assert.That(rotoff,Is.EqualTo(p.RotationOffset), "Assert.That(rotoff,Is.EqualTo(p.RotationOffset))"); |
||
391 | Assert.That(uuid,Is.EqualTo(p.UUID), "Assert.That(uuid,Is.EqualTo(p.UUID))"); |
||
392 | Assert.That(creator,Is.EqualTo(p.CreatorID), "Assert.That(creator,Is.EqualTo(p.CreatorID))"); |
||
393 | //Assert.That(iserial,Is.EqualTo(p.InventorySerial), "Assert.That(iserial,Is.EqualTo(p.InventorySerial))"); |
||
394 | Assert.That(dic,Is.EqualTo(p.TaskInventory), "Assert.That(dic,Is.EqualTo(p.TaskInventory))"); |
||
395 | //Assert.That(objf, Is.EqualTo((uint)p.Flags), "Assert.That(objf,Is.EqualTo(p.Flags))"); |
||
396 | Assert.That(name,Is.EqualTo(p.Name), "Assert.That(name,Is.EqualTo(p.Name))"); |
||
397 | Assert.That(material,Is.EqualTo(p.Material), "Assert.That(material,Is.EqualTo(p.Material))"); |
||
398 | Assert.That(pin,Is.EqualTo(p.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(p.ScriptAccessPin))"); |
||
399 | Assert.That(textani,Is.EqualTo(p.TextureAnimation), "Assert.That(textani,Is.EqualTo(p.TextureAnimation))"); |
||
400 | Assert.That(partsys,Is.EqualTo(p.ParticleSystem), "Assert.That(partsys,Is.EqualTo(p.ParticleSystem))"); |
||
401 | //Assert.That(expires,Is.EqualTo(p.Expires), "Assert.That(expires,Is.EqualTo(p.Expires))"); |
||
402 | //Assert.That(rezzed,Is.EqualTo(p.Rezzed), "Assert.That(rezzed,Is.EqualTo(p.Rezzed))"); |
||
403 | Assert.That(offset,Is.EqualTo(p.OffsetPosition), "Assert.That(offset,Is.EqualTo(p.OffsetPosition))"); |
||
404 | Assert.That(velocity,Is.EqualTo(p.Velocity), "Assert.That(velocity,Is.EqualTo(p.Velocity))"); |
||
405 | Assert.That(angvelo,Is.EqualTo(p.AngularVelocity), "Assert.That(angvelo,Is.EqualTo(p.AngularVelocity))"); |
||
406 | Assert.That(accel,Is.EqualTo(p.Acceleration), "Assert.That(accel,Is.EqualTo(p.Acceleration))"); |
||
407 | Assert.That(description,Is.EqualTo(p.Description), "Assert.That(description,Is.EqualTo(p.Description))"); |
||
408 | Assert.That(color,Is.EqualTo(p.Color), "Assert.That(color,Is.EqualTo(p.Color))"); |
||
409 | Assert.That(text,Is.EqualTo(p.Text), "Assert.That(text,Is.EqualTo(p.Text))"); |
||
410 | Assert.That(sitname,Is.EqualTo(p.SitName), "Assert.That(sitname,Is.EqualTo(p.SitName))"); |
||
411 | Assert.That(touchname,Is.EqualTo(p.TouchName), "Assert.That(touchname,Is.EqualTo(p.TouchName))"); |
||
412 | //Assert.That(linknum,Is.EqualTo(p.LinkNum), "Assert.That(linknum,Is.EqualTo(p.LinkNum))"); |
||
413 | Assert.That(clickaction,Is.EqualTo(p.ClickAction), "Assert.That(clickaction,Is.EqualTo(p.ClickAction))"); |
||
414 | Assert.That(scale,Is.EqualTo(p.Scale), "Assert.That(scale,Is.EqualTo(p.Scale))"); |
||
415 | |||
416 | //Assert.That(updatef,Is.EqualTo(p.UpdateFlag), "Assert.That(updatef,Is.EqualTo(p.UpdateFlag))"); |
||
417 | |||
418 | Assert.That(pbshap.PathBegin, Is.EqualTo(p.Shape.PathBegin), "Assert.That(pbshap.PathBegin, Is.EqualTo(p.Shape.PathBegin))"); |
||
419 | Assert.That(pbshap.PathEnd, Is.EqualTo(p.Shape.PathEnd), "Assert.That(pbshap.PathEnd, Is.EqualTo(p.Shape.PathEnd))"); |
||
420 | Assert.That(pbshap.ProfileBegin, Is.EqualTo(p.Shape.ProfileBegin), "Assert.That(pbshap.ProfileBegin, Is.EqualTo(p.Shape.ProfileBegin))"); |
||
421 | Assert.That(pbshap.ProfileEnd, Is.EqualTo(p.Shape.ProfileEnd), "Assert.That(pbshap.ProfileEnd, Is.EqualTo(p.Shape.ProfileEnd))"); |
||
422 | Assert.That(pbshap.ProfileHollow, Is.EqualTo(p.Shape.ProfileHollow), "Assert.That(pbshap.ProfileHollow, Is.EqualTo(p.Shape.ProfileHollow))"); |
||
423 | } |
||
424 | |||
425 | [Test] |
||
426 | public void T014_UpdateObject() |
||
427 | { |
||
428 | TestHelpers.InMethod(); |
||
429 | |||
430 | string text1 = "object1 text"; |
||
431 | SceneObjectGroup sog = FindSOG("object1", region1); |
||
432 | sog.RootPart.Text = text1; |
||
433 | db.StoreObject(sog, region1); |
||
434 | |||
435 | sog = FindSOG("object1", region1); |
||
436 | Assert.That(text1, Is.EqualTo(sog.RootPart.Text), "Assert.That(text1, Is.EqualTo(sog.RootPart.Text))"); |
||
437 | |||
438 | // Creates random values |
||
439 | UUID creator = new UUID(); |
||
440 | creator = UUID.Random(); |
||
441 | TaskInventoryDictionary dic = new TaskInventoryDictionary(); |
||
442 | localID = localID + 1; |
||
443 | string name = "West Adam"; |
||
444 | byte material = (byte) random.Next(127); |
||
445 | ulong regionh = (ulong)random.NextDouble() * (ulong)random.Next(); |
||
446 | int pin = random.Next(); |
||
447 | Byte[] partsys = new byte[8]; |
||
448 | Byte[] textani = new byte[8]; |
||
449 | random.NextBytes(textani); |
||
450 | random.NextBytes(partsys); |
||
451 | DateTime expires = new DateTime(2010, 12, 20); |
||
452 | DateTime rezzed = new DateTime(2005, 07, 15); |
||
453 | Vector3 groupos = new Vector3(random.Next(),random.Next(),random.Next()); |
||
454 | Vector3 offset = new Vector3(random.Next(),random.Next(),random.Next()); |
||
455 | Quaternion rotoff = new Quaternion(random.Next(),random.Next(),random.Next(),random.Next()); |
||
456 | Vector3 velocity = new Vector3(random.Next(),random.Next(),random.Next()); |
||
457 | Vector3 angvelo = new Vector3(random.Next(),random.Next(),random.Next()); |
||
458 | Vector3 accel = new Vector3(random.Next(),random.Next(),random.Next()); |
||
459 | string description = name; |
||
460 | Color color = Color.FromArgb(255, 255, 255, 0); |
||
461 | string text = "What You Say?{]\vz~"; |
||
462 | string sitname = RandomName(); |
||
463 | string touchname = RandomName(); |
||
464 | int linknum = random.Next(); |
||
465 | byte clickaction = (byte) random.Next(127); |
||
466 | PrimitiveBaseShape pbshap = new PrimitiveBaseShape(); |
||
467 | pbshap = PrimitiveBaseShape.Default; |
||
468 | Vector3 scale = new Vector3(random.Next(),random.Next(),random.Next()); |
||
469 | |||
470 | // Updates the region with new values |
||
471 | SceneObjectGroup sog2 = FindSOG("Adam West", region3); |
||
472 | Assert.That(sog2,Is.Not.Null); |
||
473 | sog2.RootPart.RegionHandle = regionh; |
||
474 | sog2.RootPart.Shape = pbshap; |
||
475 | sog2.RootPart.GroupPosition = groupos; |
||
476 | sog2.RootPart.RotationOffset = rotoff; |
||
477 | sog2.RootPart.CreatorID = creator; |
||
478 | sog2.RootPart.TaskInventory = dic; |
||
479 | sog2.RootPart.Name = name; |
||
480 | sog2.RootPart.Material = material; |
||
481 | sog2.RootPart.ScriptAccessPin = pin; |
||
482 | sog2.RootPart.TextureAnimation = textani; |
||
483 | sog2.RootPart.ParticleSystem = partsys; |
||
484 | sog2.RootPart.Expires = expires; |
||
485 | sog2.RootPart.Rezzed = rezzed; |
||
486 | sog2.RootPart.OffsetPosition = offset; |
||
487 | sog2.RootPart.Velocity = velocity; |
||
488 | sog2.RootPart.AngularVelocity = angvelo; |
||
489 | sog2.RootPart.Acceleration = accel; |
||
490 | sog2.RootPart.Description = description; |
||
491 | sog2.RootPart.Color = color; |
||
492 | sog2.RootPart.Text = text; |
||
493 | sog2.RootPart.SitName = sitname; |
||
494 | sog2.RootPart.TouchName = touchname; |
||
495 | sog2.RootPart.LinkNum = linknum; |
||
496 | sog2.RootPart.ClickAction = clickaction; |
||
497 | sog2.RootPart.Scale = scale; |
||
498 | |||
499 | db.StoreObject(sog2, region3); |
||
500 | List<SceneObjectGroup> sogs = db.LoadObjects(region3); |
||
501 | Assert.That(sogs.Count, Is.EqualTo(1), "Assert.That(sogs.Count, Is.EqualTo(1))"); |
||
502 | |||
503 | SceneObjectGroup retsog = FindSOG("West Adam", region3); |
||
504 | Assert.That(retsog,Is.Not.Null); |
||
505 | SceneObjectPart p = retsog.RootPart; |
||
506 | Assert.That(regionh,Is.EqualTo(p.RegionHandle), "Assert.That(regionh,Is.EqualTo(p.RegionHandle))"); |
||
507 | Assert.That(groupos,Is.EqualTo(p.GroupPosition), "Assert.That(groupos,Is.EqualTo(p.GroupPosition))"); |
||
508 | Assert.That(name,Is.EqualTo(p.Name), "Assert.That(name,Is.EqualTo(p.Name))"); |
||
509 | Assert.That(rotoff,Is.EqualTo(p.RotationOffset), "Assert.That(rotoff,Is.EqualTo(p.RotationOffset))"); |
||
510 | Assert.That(creator,Is.EqualTo(p.CreatorID), "Assert.That(creator,Is.EqualTo(p.CreatorID))"); |
||
511 | Assert.That(dic,Is.EqualTo(p.TaskInventory), "Assert.That(dic,Is.EqualTo(p.TaskInventory))"); |
||
512 | Assert.That(name,Is.EqualTo(p.Name), "Assert.That(name,Is.EqualTo(p.Name))"); |
||
513 | Assert.That(material,Is.EqualTo(p.Material), "Assert.That(material,Is.EqualTo(p.Material))"); |
||
514 | Assert.That(pin,Is.EqualTo(p.ScriptAccessPin), "Assert.That(pin,Is.EqualTo(p.ScriptAccessPin))"); |
||
515 | Assert.That(textani,Is.EqualTo(p.TextureAnimation), "Assert.That(textani,Is.EqualTo(p.TextureAnimation))"); |
||
516 | Assert.That(partsys,Is.EqualTo(p.ParticleSystem), "Assert.That(partsys,Is.EqualTo(p.ParticleSystem))"); |
||
517 | Assert.That(offset,Is.EqualTo(p.OffsetPosition), "Assert.That(offset,Is.EqualTo(p.OffsetPosition))"); |
||
518 | Assert.That(velocity,Is.EqualTo(p.Velocity), "Assert.That(velocity,Is.EqualTo(p.Velocity))"); |
||
519 | Assert.That(angvelo,Is.EqualTo(p.AngularVelocity), "Assert.That(angvelo,Is.EqualTo(p.AngularVelocity))"); |
||
520 | Assert.That(accel,Is.EqualTo(p.Acceleration), "Assert.That(accel,Is.EqualTo(p.Acceleration))"); |
||
521 | Assert.That(description,Is.EqualTo(p.Description), "Assert.That(description,Is.EqualTo(p.Description))"); |
||
522 | Assert.That(color,Is.EqualTo(p.Color), "Assert.That(color,Is.EqualTo(p.Color))"); |
||
523 | Assert.That(text,Is.EqualTo(p.Text), "Assert.That(text,Is.EqualTo(p.Text))"); |
||
524 | Assert.That(sitname,Is.EqualTo(p.SitName), "Assert.That(sitname,Is.EqualTo(p.SitName))"); |
||
525 | Assert.That(touchname,Is.EqualTo(p.TouchName), "Assert.That(touchname,Is.EqualTo(p.TouchName))"); |
||
526 | Assert.That(clickaction,Is.EqualTo(p.ClickAction), "Assert.That(clickaction,Is.EqualTo(p.ClickAction))"); |
||
527 | Assert.That(scale,Is.EqualTo(p.Scale), "Assert.That(scale,Is.EqualTo(p.Scale))"); |
||
528 | } |
||
529 | |||
530 | /// <summary> |
||
531 | /// Test storage and retrieval of a scene object with a large number of parts. |
||
532 | /// </summary> |
||
533 | [Test] |
||
534 | public void T015_LargeSceneObjects() |
||
535 | { |
||
536 | TestHelpers.InMethod(); |
||
537 | |||
538 | UUID id = UUID.Random(); |
||
539 | Dictionary<UUID, SceneObjectPart> mydic = new Dictionary<UUID, SceneObjectPart>(); |
||
540 | SceneObjectGroup sog = NewSOG("Test SOG", id, region4); |
||
541 | mydic.Add(sog.RootPart.UUID,sog.RootPart); |
||
542 | for (int i = 0; i < 30; i++) |
||
543 | { |
||
544 | UUID tmp = UUID.Random(); |
||
545 | SceneObjectPart sop = NewSOP(("Test SOP " + i.ToString()),tmp); |
||
546 | Vector3 groupos = new Vector3(random.Next(),random.Next(),random.Next()); |
||
547 | Vector3 offset = new Vector3(random.Next(),random.Next(),random.Next()); |
||
548 | Quaternion rotoff = new Quaternion(random.Next(),random.Next(),random.Next(),random.Next()); |
||
549 | Vector3 velocity = new Vector3(random.Next(),random.Next(),random.Next()); |
||
550 | Vector3 angvelo = new Vector3(random.Next(),random.Next(),random.Next()); |
||
551 | Vector3 accel = new Vector3(random.Next(),random.Next(),random.Next()); |
||
552 | |||
553 | sop.GroupPosition = groupos; |
||
554 | sop.RotationOffset = rotoff; |
||
555 | sop.OffsetPosition = offset; |
||
556 | sop.Velocity = velocity; |
||
557 | sop.AngularVelocity = angvelo; |
||
558 | sop.Acceleration = accel; |
||
559 | |||
560 | mydic.Add(tmp,sop); |
||
561 | sog.AddPart(sop); |
||
562 | } |
||
563 | |||
564 | db.StoreObject(sog, region4); |
||
565 | |||
566 | SceneObjectGroup retsog = FindSOG("Test SOG", region4); |
||
567 | SceneObjectPart[] parts = retsog.Parts; |
||
568 | for (int i = 0; i < 30; i++) |
||
569 | { |
||
570 | SceneObjectPart cursop = mydic[parts[i].UUID]; |
||
571 | Assert.That(cursop.GroupPosition,Is.EqualTo(parts[i].GroupPosition), "Assert.That(cursop.GroupPosition,Is.EqualTo(parts[i].GroupPosition))"); |
||
572 | Assert.That(cursop.RotationOffset,Is.EqualTo(parts[i].RotationOffset), "Assert.That(cursop.RotationOffset,Is.EqualTo(parts[i].RotationOffset))"); |
||
573 | Assert.That(cursop.OffsetPosition,Is.EqualTo(parts[i].OffsetPosition), "Assert.That(cursop.OffsetPosition,Is.EqualTo(parts[i].OffsetPosition))"); |
||
574 | Assert.That(cursop.Velocity,Is.EqualTo(parts[i].Velocity), "Assert.That(cursop.Velocity,Is.EqualTo(parts[i].Velocity))"); |
||
575 | Assert.That(cursop.AngularVelocity,Is.EqualTo(parts[i].AngularVelocity), "Assert.That(cursop.AngularVelocity,Is.EqualTo(parts[i].AngularVelocity))"); |
||
576 | Assert.That(cursop.Acceleration,Is.EqualTo(parts[i].Acceleration), "Assert.That(cursop.Acceleration,Is.EqualTo(parts[i].Acceleration))"); |
||
577 | } |
||
578 | } |
||
579 | |||
580 | //[Test] |
||
581 | public void T016_RandomSogWithSceneParts() |
||
582 | { |
||
583 | TestHelpers.InMethod(); |
||
584 | |||
585 | PropertyScrambler<SceneObjectPart> scrambler = |
||
586 | new PropertyScrambler<SceneObjectPart>() |
||
587 | .DontScramble(x => x.UUID); |
||
588 | UUID tmpSog = UUID.Random(); |
||
589 | UUID tmp1 = UUID.Random(); |
||
590 | UUID tmp2 = UUID.Random(); |
||
591 | UUID tmp3 = UUID.Random(); |
||
592 | UUID newregion = UUID.Random(); |
||
593 | SceneObjectPart p1 = new SceneObjectPart(); |
||
594 | SceneObjectPart p2 = new SceneObjectPart(); |
||
595 | SceneObjectPart p3 = new SceneObjectPart(); |
||
596 | p1.Shape = PrimitiveBaseShape.Default; |
||
597 | p2.Shape = PrimitiveBaseShape.Default; |
||
598 | p3.Shape = PrimitiveBaseShape.Default; |
||
599 | p1.UUID = tmp1; |
||
600 | p2.UUID = tmp2; |
||
601 | p3.UUID = tmp3; |
||
602 | scrambler.Scramble(p1); |
||
603 | scrambler.Scramble(p2); |
||
604 | scrambler.Scramble(p3); |
||
605 | |||
606 | SceneObjectGroup sog = NewSOG("Sop 0", tmpSog, newregion); |
||
607 | PropertyScrambler<SceneObjectGroup> sogScrambler = |
||
608 | new PropertyScrambler<SceneObjectGroup>() |
||
609 | .DontScramble(x => x.UUID); |
||
610 | sogScrambler.Scramble(sog); |
||
611 | sog.UUID = tmpSog; |
||
612 | sog.AddPart(p1); |
||
613 | sog.AddPart(p2); |
||
614 | sog.AddPart(p3); |
||
615 | |||
616 | SceneObjectPart[] parts = sog.Parts; |
||
617 | Assert.That(parts.Length, Is.EqualTo(4), "Assert.That(parts.Length,Is.EqualTo(4))"); |
||
618 | |||
619 | db.StoreObject(sog, newregion); |
||
620 | List<SceneObjectGroup> sogs = db.LoadObjects(newregion); |
||
621 | Assert.That(sogs.Count, Is.EqualTo(1), "Assert.That(sogs.Count,Is.EqualTo(1))"); |
||
622 | SceneObjectGroup newsog = sogs[0]; |
||
623 | |||
624 | SceneObjectPart[] newparts = newsog.Parts; |
||
625 | Assert.That(newparts.Length, Is.EqualTo(4), "Assert.That(newparts.Length,Is.EqualTo(4))"); |
||
626 | |||
627 | Assert.That(newsog, Constraints.PropertyCompareConstraint(sog) |
||
628 | .IgnoreProperty(x=>x.LocalId) |
||
629 | .IgnoreProperty(x=>x.HasGroupChanged) |
||
630 | .IgnoreProperty(x=>x.IsSelected) |
||
631 | .IgnoreProperty(x=>x.RegionHandle) |
||
632 | .IgnoreProperty(x=>x.RegionUUID) |
||
633 | .IgnoreProperty(x=>x.Scene) |
||
634 | .IgnoreProperty(x=>x.Parts) |
||
635 | .IgnoreProperty(x=>x.RootPart)); |
||
636 | } |
||
637 | |||
638 | |||
639 | private SceneObjectGroup GetMySOG(string name) |
||
640 | { |
||
641 | SceneObjectGroup sog = FindSOG(name, region1); |
||
642 | if (sog == null) |
||
643 | { |
||
644 | sog = NewSOG(name, prim1, region1); |
||
645 | db.StoreObject(sog, region1); |
||
646 | } |
||
647 | return sog; |
||
648 | } |
||
649 | |||
650 | // NOTE: it is a bad practice to rely on some of the previous tests having been run before. |
||
651 | // If the tests are run manually, one at a time, each starts with full class init (DB cleared). |
||
652 | // Even when all tests are run, NUnit 2.5+ no longer guarantee a specific test order. |
||
653 | // We shouldn't expect to find anything in the DB if we haven't put it there *in the same test*! |
||
654 | |||
655 | [Test] |
||
656 | public void T020_PrimInventoryEmpty() |
||
657 | { |
||
658 | TestHelpers.InMethod(); |
||
659 | |||
660 | SceneObjectGroup sog = GetMySOG("object1"); |
||
661 | TaskInventoryItem t = sog.GetInventoryItem(sog.RootPart.LocalId, item1); |
||
662 | Assert.That(t, Is.Null); |
||
663 | } |
||
664 | |||
665 | // TODO: Is there any point to call StorePrimInventory on a list, rather than on the prim itself? |
||
666 | |||
667 | private void StoreInventory(SceneObjectGroup sog) |
||
668 | { |
||
669 | List<TaskInventoryItem> list = new List<TaskInventoryItem>(); |
||
670 | // TODO: seriously??? this is the way we need to loop to get this? |
||
671 | foreach (UUID uuid in sog.RootPart.Inventory.GetInventoryList()) |
||
672 | { |
||
673 | list.Add(sog.GetInventoryItem(sog.RootPart.LocalId, uuid)); |
||
674 | } |
||
675 | |||
676 | db.StorePrimInventory(sog.RootPart.UUID, list); |
||
677 | } |
||
678 | |||
679 | [Test] |
||
680 | public void T021_PrimInventoryBasic() |
||
681 | { |
||
682 | TestHelpers.InMethod(); |
||
683 | |||
684 | SceneObjectGroup sog = GetMySOG("object1"); |
||
685 | InventoryItemBase i = NewItem(item1, zero, zero, itemname1, zero); |
||
686 | |||
687 | Assert.That(sog.AddInventoryItem(zero, sog.RootPart.LocalId, i, zero), Is.True); |
||
688 | TaskInventoryItem t = sog.GetInventoryItem(sog.RootPart.LocalId, item1); |
||
689 | Assert.That(t.Name, Is.EqualTo(itemname1), "Assert.That(t.Name, Is.EqualTo(itemname1))"); |
||
690 | |||
691 | StoreInventory(sog); |
||
692 | |||
693 | SceneObjectGroup sog1 = FindSOG("object1", region1); |
||
694 | Assert.That(sog1, Is.Not.Null); |
||
695 | |||
696 | TaskInventoryItem t1 = sog1.GetInventoryItem(sog1.RootPart.LocalId, item1); |
||
697 | Assert.That(t1, Is.Not.Null); |
||
698 | Assert.That(t1.Name, Is.EqualTo(itemname1), "Assert.That(t.Name, Is.EqualTo(itemname1))"); |
||
699 | |||
700 | // Updating inventory |
||
701 | t1.Name = "My New Name"; |
||
702 | sog1.UpdateInventoryItem(t1); |
||
703 | |||
704 | StoreInventory(sog1); |
||
705 | |||
706 | SceneObjectGroup sog2 = FindSOG("object1", region1); |
||
707 | TaskInventoryItem t2 = sog2.GetInventoryItem(sog2.RootPart.LocalId, item1); |
||
708 | Assert.That(t2.Name, Is.EqualTo("My New Name"), "Assert.That(t.Name, Is.EqualTo(\"My New Name\"))"); |
||
709 | |||
710 | // Removing inventory |
||
711 | List<TaskInventoryItem> list = new List<TaskInventoryItem>(); |
||
712 | db.StorePrimInventory(prim1, list); |
||
713 | |||
714 | sog = FindSOG("object1", region1); |
||
715 | t = sog.GetInventoryItem(sog.RootPart.LocalId, item1); |
||
716 | Assert.That(t, Is.Null); |
||
717 | } |
||
718 | |||
719 | [Test] |
||
720 | public void T025_PrimInventoryPersistency() |
||
721 | { |
||
722 | TestHelpers.InMethod(); |
||
723 | |||
724 | InventoryItemBase i = new InventoryItemBase(); |
||
725 | UUID id = UUID.Random(); |
||
726 | i.ID = id; |
||
727 | UUID folder = UUID.Random(); |
||
728 | i.Folder = folder; |
||
729 | UUID owner = UUID.Random(); |
||
730 | i.Owner = owner; |
||
731 | UUID creator = UUID.Random(); |
||
732 | i.CreatorId = creator.ToString(); |
||
733 | string name = RandomName(); |
||
734 | i.Name = name; |
||
735 | i.Description = name; |
||
736 | UUID assetid = UUID.Random(); |
||
737 | i.AssetID = assetid; |
||
738 | int invtype = random.Next(); |
||
739 | i.InvType = invtype; |
||
740 | uint nextperm = (uint) random.Next(); |
||
741 | i.NextPermissions = nextperm; |
||
742 | uint curperm = (uint) random.Next(); |
||
743 | i.CurrentPermissions = curperm; |
||
744 | uint baseperm = (uint) random.Next(); |
||
745 | i.BasePermissions = baseperm; |
||
746 | uint eoperm = (uint) random.Next(); |
||
747 | i.EveryOnePermissions = eoperm; |
||
748 | int assettype = random.Next(); |
||
749 | i.AssetType = assettype; |
||
750 | UUID groupid = UUID.Random(); |
||
751 | i.GroupID = groupid; |
||
752 | bool groupown = true; |
||
753 | i.GroupOwned = groupown; |
||
754 | int saleprice = random.Next(); |
||
755 | i.SalePrice = saleprice; |
||
756 | byte saletype = (byte) random.Next(127); |
||
757 | i.SaleType = saletype; |
||
758 | uint flags = (uint) random.Next(); |
||
759 | i.Flags = flags; |
||
760 | int creationd = random.Next(); |
||
761 | i.CreationDate = creationd; |
||
762 | |||
763 | SceneObjectGroup sog = GetMySOG("object1"); |
||
764 | Assert.That(sog.AddInventoryItem(zero, sog.RootPart.LocalId, i, zero), Is.True); |
||
765 | TaskInventoryItem t = sog.GetInventoryItem(sog.RootPart.LocalId, id); |
||
766 | |||
767 | Assert.That(t.Name, Is.EqualTo(name), "Assert.That(t.Name, Is.EqualTo(name))"); |
||
768 | Assert.That(t.AssetID,Is.EqualTo(assetid), "Assert.That(t.AssetID,Is.EqualTo(assetid))"); |
||
769 | Assert.That(t.BasePermissions,Is.EqualTo(baseperm), "Assert.That(t.BasePermissions,Is.EqualTo(baseperm))"); |
||
770 | Assert.That(t.CreationDate,Is.EqualTo(creationd), "Assert.That(t.CreationDate,Is.EqualTo(creationd))"); |
||
771 | Assert.That(t.CreatorID,Is.EqualTo(creator), "Assert.That(t.CreatorID,Is.EqualTo(creator))"); |
||
772 | Assert.That(t.Description,Is.EqualTo(name), "Assert.That(t.Description,Is.EqualTo(name))"); |
||
773 | Assert.That(t.EveryonePermissions,Is.EqualTo(eoperm), "Assert.That(t.EveryonePermissions,Is.EqualTo(eoperm))"); |
||
774 | Assert.That(t.Flags,Is.EqualTo(flags), "Assert.That(t.Flags,Is.EqualTo(flags))"); |
||
775 | Assert.That(t.GroupID,Is.EqualTo(sog.RootPart.GroupID), "Assert.That(t.GroupID,Is.EqualTo(sog.RootPart.GroupID))"); |
||
776 | // Where is this group permissions?? |
||
777 | // Assert.That(t.GroupPermissions,Is.EqualTo(), "Assert.That(t.GroupPermissions,Is.EqualTo())"); |
||
778 | Assert.That(t.Type,Is.EqualTo(assettype), "Assert.That(t.Type,Is.EqualTo(assettype))"); |
||
779 | Assert.That(t.InvType, Is.EqualTo(invtype), "Assert.That(t.InvType, Is.EqualTo(invtype))"); |
||
780 | Assert.That(t.ItemID, Is.EqualTo(id), "Assert.That(t.ItemID, Is.EqualTo(id))"); |
||
781 | Assert.That(t.LastOwnerID, Is.EqualTo(sog.RootPart.LastOwnerID), "Assert.That(t.LastOwnerID, Is.EqualTo(sog.RootPart.LastOwnerID))"); |
||
782 | Assert.That(t.NextPermissions, Is.EqualTo(nextperm), "Assert.That(t.NextPermissions, Is.EqualTo(nextperm))"); |
||
783 | // Ownership changes when you drop an object into an object |
||
784 | // owned by someone else |
||
785 | Assert.That(t.OwnerID,Is.EqualTo(sog.RootPart.OwnerID), "Assert.That(t.OwnerID,Is.EqualTo(sog.RootPart.OwnerID))"); |
||
786 | // Assert.That(t.CurrentPermissions, Is.EqualTo(curperm | 16), "Assert.That(t.CurrentPermissions, Is.EqualTo(curperm | 8))"); |
||
787 | Assert.That(t.ParentID,Is.EqualTo(sog.RootPart.FolderID), "Assert.That(t.ParentID,Is.EqualTo(sog.RootPart.FolderID))"); |
||
788 | Assert.That(t.ParentPartID,Is.EqualTo(sog.RootPart.UUID), "Assert.That(t.ParentPartID,Is.EqualTo(sog.RootPart.UUID))"); |
||
789 | } |
||
790 | |||
791 | [Test] |
||
792 | [ExpectedException(typeof(ArgumentException))] |
||
793 | public void T026_PrimInventoryMany() |
||
794 | { |
||
795 | TestHelpers.InMethod(); |
||
796 | |||
797 | UUID i1,i2,i3,i4; |
||
798 | i1 = UUID.Random(); |
||
799 | i2 = UUID.Random(); |
||
800 | i3 = UUID.Random(); |
||
801 | i4 = i3; |
||
802 | InventoryItemBase ib1 = NewItem(i1, zero, zero, RandomName(), zero); |
||
803 | InventoryItemBase ib2 = NewItem(i2, zero, zero, RandomName(), zero); |
||
804 | InventoryItemBase ib3 = NewItem(i3, zero, zero, RandomName(), zero); |
||
805 | InventoryItemBase ib4 = NewItem(i4, zero, zero, RandomName(), zero); |
||
806 | |||
807 | SceneObjectGroup sog = FindSOG("object1", region1); |
||
808 | |||
809 | Assert.That(sog.AddInventoryItem(zero, sog.RootPart.LocalId, ib1, zero), Is.True); |
||
810 | Assert.That(sog.AddInventoryItem(zero, sog.RootPart.LocalId, ib2, zero), Is.True); |
||
811 | Assert.That(sog.AddInventoryItem(zero, sog.RootPart.LocalId, ib3, zero), Is.True); |
||
812 | Assert.That(sog.AddInventoryItem(zero, sog.RootPart.LocalId, ib4, zero), Is.True); |
||
813 | |||
814 | TaskInventoryItem t1 = sog.GetInventoryItem(sog.RootPart.LocalId, i1); |
||
815 | Assert.That(t1.Name, Is.EqualTo(ib1.Name), "Assert.That(t1.Name, Is.EqualTo(ib1.Name))"); |
||
816 | TaskInventoryItem t2 = sog.GetInventoryItem(sog.RootPart.LocalId, i2); |
||
817 | Assert.That(t2.Name, Is.EqualTo(ib2.Name), "Assert.That(t2.Name, Is.EqualTo(ib2.Name))"); |
||
818 | TaskInventoryItem t3 = sog.GetInventoryItem(sog.RootPart.LocalId, i3); |
||
819 | Assert.That(t3.Name, Is.EqualTo(ib3.Name), "Assert.That(t3.Name, Is.EqualTo(ib3.Name))"); |
||
820 | TaskInventoryItem t4 = sog.GetInventoryItem(sog.RootPart.LocalId, i4); |
||
821 | Assert.That(t4, Is.Null); |
||
822 | } |
||
823 | |||
824 | [Test] |
||
825 | public void T052_RemoveObject() |
||
826 | { |
||
827 | TestHelpers.InMethod(); |
||
828 | |||
829 | db.RemoveObject(prim1, region1); |
||
830 | SceneObjectGroup sog = FindSOG("object1", region1); |
||
831 | Assert.That(sog, Is.Null); |
||
832 | } |
||
833 | |||
834 | [Test] |
||
835 | public void T100_DefaultRegionInfo() |
||
836 | { |
||
837 | TestHelpers.InMethod(); |
||
838 | |||
839 | RegionSettings r1 = db.LoadRegionSettings(region1); |
||
840 | Assert.That(r1.RegionUUID, Is.EqualTo(region1), "Assert.That(r1.RegionUUID, Is.EqualTo(region1))"); |
||
841 | |||
842 | RegionSettings r2 = db.LoadRegionSettings(region2); |
||
843 | Assert.That(r2.RegionUUID, Is.EqualTo(region2), "Assert.That(r2.RegionUUID, Is.EqualTo(region2))"); |
||
844 | } |
||
845 | |||
846 | [Test] |
||
847 | public void T101_UpdateRegionInfo() |
||
848 | { |
||
849 | TestHelpers.InMethod(); |
||
850 | |||
851 | int agentlimit = random.Next(); |
||
852 | double objectbonus = random.Next(); |
||
853 | int maturity = random.Next(); |
||
854 | UUID tertex1 = UUID.Random(); |
||
855 | UUID tertex2 = UUID.Random(); |
||
856 | UUID tertex3 = UUID.Random(); |
||
857 | UUID tertex4 = UUID.Random(); |
||
858 | double elev1nw = random.Next(); |
||
859 | double elev2nw = random.Next(); |
||
860 | double elev1ne = random.Next(); |
||
861 | double elev2ne = random.Next(); |
||
862 | double elev1se = random.Next(); |
||
863 | double elev2se = random.Next(); |
||
864 | double elev1sw = random.Next(); |
||
865 | double elev2sw = random.Next(); |
||
866 | double waterh = random.Next(); |
||
867 | double terrainraise = random.Next(); |
||
868 | double terrainlower = random.Next(); |
||
869 | Vector3 sunvector = new Vector3((float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5),(float)Math.Round(random.NextDouble(),5)); |
||
870 | UUID terimgid = UUID.Random(); |
||
871 | double sunpos = random.Next(); |
||
872 | UUID cov = UUID.Random(); |
||
873 | |||
874 | RegionSettings r1 = db.LoadRegionSettings(region1); |
||
875 | r1.BlockTerraform = true; |
||
876 | r1.BlockFly = true; |
||
877 | r1.AllowDamage = true; |
||
878 | r1.RestrictPushing = true; |
||
879 | r1.AllowLandResell = false; |
||
880 | r1.AllowLandJoinDivide = false; |
||
881 | r1.BlockShowInSearch = true; |
||
882 | r1.AgentLimit = agentlimit; |
||
883 | r1.ObjectBonus = objectbonus; |
||
884 | r1.Maturity = maturity; |
||
885 | r1.DisableScripts = true; |
||
886 | r1.DisableCollisions = true; |
||
887 | r1.DisablePhysics = true; |
||
888 | r1.TerrainTexture1 = tertex1; |
||
889 | r1.TerrainTexture2 = tertex2; |
||
890 | r1.TerrainTexture3 = tertex3; |
||
891 | r1.TerrainTexture4 = tertex4; |
||
892 | r1.Elevation1NW = elev1nw; |
||
893 | r1.Elevation2NW = elev2nw; |
||
894 | r1.Elevation1NE = elev1ne; |
||
895 | r1.Elevation2NE = elev2ne; |
||
896 | r1.Elevation1SE = elev1se; |
||
897 | r1.Elevation2SE = elev2se; |
||
898 | r1.Elevation1SW = elev1sw; |
||
899 | r1.Elevation2SW = elev2sw; |
||
900 | r1.WaterHeight = waterh; |
||
901 | r1.TerrainRaiseLimit = terrainraise; |
||
902 | r1.TerrainLowerLimit = terrainlower; |
||
903 | r1.UseEstateSun = false; |
||
904 | r1.Sandbox = true; |
||
905 | r1.SunVector = sunvector; |
||
906 | r1.TerrainImageID = terimgid; |
||
907 | r1.FixedSun = true; |
||
908 | r1.SunPosition = sunpos; |
||
909 | r1.Covenant = cov; |
||
910 | |||
911 | db.StoreRegionSettings(r1); |
||
912 | |||
913 | RegionSettings r1a = db.LoadRegionSettings(region1); |
||
914 | Assert.That(r1a.RegionUUID, Is.EqualTo(region1), "Assert.That(r1a.RegionUUID, Is.EqualTo(region1))"); |
||
915 | Assert.That(r1a.BlockTerraform,Is.True); |
||
916 | Assert.That(r1a.BlockFly,Is.True); |
||
917 | Assert.That(r1a.AllowDamage,Is.True); |
||
918 | Assert.That(r1a.RestrictPushing,Is.True); |
||
919 | Assert.That(r1a.AllowLandResell,Is.False); |
||
920 | Assert.That(r1a.AllowLandJoinDivide,Is.False); |
||
921 | Assert.That(r1a.BlockShowInSearch,Is.True); |
||
922 | Assert.That(r1a.AgentLimit,Is.EqualTo(agentlimit), "Assert.That(r1a.AgentLimit,Is.EqualTo(agentlimit))"); |
||
923 | Assert.That(r1a.ObjectBonus,Is.EqualTo(objectbonus), "Assert.That(r1a.ObjectBonus,Is.EqualTo(objectbonus))"); |
||
924 | Assert.That(r1a.Maturity,Is.EqualTo(maturity), "Assert.That(r1a.Maturity,Is.EqualTo(maturity))"); |
||
925 | Assert.That(r1a.DisableScripts,Is.True); |
||
926 | Assert.That(r1a.DisableCollisions,Is.True); |
||
927 | Assert.That(r1a.DisablePhysics,Is.True); |
||
928 | Assert.That(r1a.TerrainTexture1,Is.EqualTo(tertex1), "Assert.That(r1a.TerrainTexture1,Is.EqualTo(tertex1))"); |
||
929 | Assert.That(r1a.TerrainTexture2,Is.EqualTo(tertex2), "Assert.That(r1a.TerrainTexture2,Is.EqualTo(tertex2))"); |
||
930 | Assert.That(r1a.TerrainTexture3,Is.EqualTo(tertex3), "Assert.That(r1a.TerrainTexture3,Is.EqualTo(tertex3))"); |
||
931 | Assert.That(r1a.TerrainTexture4,Is.EqualTo(tertex4), "Assert.That(r1a.TerrainTexture4,Is.EqualTo(tertex4))"); |
||
932 | Assert.That(r1a.Elevation1NW,Is.EqualTo(elev1nw), "Assert.That(r1a.Elevation1NW,Is.EqualTo(elev1nw))"); |
||
933 | Assert.That(r1a.Elevation2NW,Is.EqualTo(elev2nw), "Assert.That(r1a.Elevation2NW,Is.EqualTo(elev2nw))"); |
||
934 | Assert.That(r1a.Elevation1NE,Is.EqualTo(elev1ne), "Assert.That(r1a.Elevation1NE,Is.EqualTo(elev1ne))"); |
||
935 | Assert.That(r1a.Elevation2NE,Is.EqualTo(elev2ne), "Assert.That(r1a.Elevation2NE,Is.EqualTo(elev2ne))"); |
||
936 | Assert.That(r1a.Elevation1SE,Is.EqualTo(elev1se), "Assert.That(r1a.Elevation1SE,Is.EqualTo(elev1se))"); |
||
937 | Assert.That(r1a.Elevation2SE,Is.EqualTo(elev2se), "Assert.That(r1a.Elevation2SE,Is.EqualTo(elev2se))"); |
||
938 | Assert.That(r1a.Elevation1SW,Is.EqualTo(elev1sw), "Assert.That(r1a.Elevation1SW,Is.EqualTo(elev1sw))"); |
||
939 | Assert.That(r1a.Elevation2SW,Is.EqualTo(elev2sw), "Assert.That(r1a.Elevation2SW,Is.EqualTo(elev2sw))"); |
||
940 | Assert.That(r1a.WaterHeight,Is.EqualTo(waterh), "Assert.That(r1a.WaterHeight,Is.EqualTo(waterh))"); |
||
941 | Assert.That(r1a.TerrainRaiseLimit,Is.EqualTo(terrainraise), "Assert.That(r1a.TerrainRaiseLimit,Is.EqualTo(terrainraise))"); |
||
942 | Assert.That(r1a.TerrainLowerLimit,Is.EqualTo(terrainlower), "Assert.That(r1a.TerrainLowerLimit,Is.EqualTo(terrainlower))"); |
||
943 | Assert.That(r1a.UseEstateSun,Is.False); |
||
944 | Assert.That(r1a.Sandbox,Is.True); |
||
945 | Assert.That(r1a.SunVector,Is.EqualTo(sunvector), "Assert.That(r1a.SunVector,Is.EqualTo(sunvector))"); |
||
946 | //Assert.That(r1a.TerrainImageID,Is.EqualTo(terimgid), "Assert.That(r1a.TerrainImageID,Is.EqualTo(terimgid))"); |
||
947 | Assert.That(r1a.FixedSun,Is.True); |
||
948 | Assert.That(r1a.SunPosition, Is.EqualTo(sunpos), "Assert.That(r1a.SunPosition, Is.EqualTo(sunpos))"); |
||
949 | Assert.That(r1a.Covenant, Is.EqualTo(cov), "Assert.That(r1a.Covenant, Is.EqualTo(cov))"); |
||
950 | } |
||
951 | |||
952 | [Test] |
||
953 | public void T300_NoTerrain() |
||
954 | { |
||
955 | TestHelpers.InMethod(); |
||
956 | |||
957 | Assert.That(db.LoadTerrain(zero), Is.Null); |
||
958 | Assert.That(db.LoadTerrain(region1), Is.Null); |
||
959 | Assert.That(db.LoadTerrain(region2), Is.Null); |
||
960 | Assert.That(db.LoadTerrain(UUID.Random()), Is.Null); |
||
961 | } |
||
962 | |||
963 | [Test] |
||
964 | public void T301_CreateTerrain() |
||
965 | { |
||
966 | TestHelpers.InMethod(); |
||
967 | |||
968 | double[,] t1 = GenTerrain(height1); |
||
969 | db.StoreTerrain(t1, region1); |
||
970 | |||
971 | Assert.That(db.LoadTerrain(zero), Is.Null); |
||
972 | Assert.That(db.LoadTerrain(region1), Is.Not.Null); |
||
973 | Assert.That(db.LoadTerrain(region2), Is.Null); |
||
974 | Assert.That(db.LoadTerrain(UUID.Random()), Is.Null); |
||
975 | } |
||
976 | |||
977 | [Test] |
||
978 | public void T302_FetchTerrain() |
||
979 | { |
||
980 | TestHelpers.InMethod(); |
||
981 | |||
982 | double[,] baseterrain1 = GenTerrain(height1); |
||
983 | double[,] baseterrain2 = GenTerrain(height2); |
||
984 | double[,] t1 = db.LoadTerrain(region1); |
||
985 | Assert.That(CompareTerrain(t1, baseterrain1), Is.True); |
||
986 | Assert.That(CompareTerrain(t1, baseterrain2), Is.False); |
||
987 | } |
||
988 | |||
989 | [Test] |
||
990 | public void T303_UpdateTerrain() |
||
991 | { |
||
992 | TestHelpers.InMethod(); |
||
993 | |||
994 | double[,] baseterrain1 = GenTerrain(height1); |
||
995 | double[,] baseterrain2 = GenTerrain(height2); |
||
996 | db.StoreTerrain(baseterrain2, region1); |
||
997 | |||
998 | double[,] t1 = db.LoadTerrain(region1); |
||
999 | Assert.That(CompareTerrain(t1, baseterrain1), Is.False); |
||
1000 | Assert.That(CompareTerrain(t1, baseterrain2), Is.True); |
||
1001 | } |
||
1002 | |||
1003 | [Test] |
||
1004 | public void T400_EmptyLand() |
||
1005 | { |
||
1006 | TestHelpers.InMethod(); |
||
1007 | |||
1008 | Assert.That(db.LoadLandObjects(zero).Count, Is.EqualTo(0), "Assert.That(db.LoadLandObjects(zero).Count, Is.EqualTo(0))"); |
||
1009 | Assert.That(db.LoadLandObjects(region1).Count, Is.EqualTo(0), "Assert.That(db.LoadLandObjects(region1).Count, Is.EqualTo(0))"); |
||
1010 | Assert.That(db.LoadLandObjects(region2).Count, Is.EqualTo(0), "Assert.That(db.LoadLandObjects(region2).Count, Is.EqualTo(0))"); |
||
1011 | Assert.That(db.LoadLandObjects(UUID.Random()).Count, Is.EqualTo(0), "Assert.That(db.LoadLandObjects(UUID.Random()).Count, Is.EqualTo(0))"); |
||
1012 | } |
||
1013 | |||
1014 | // TODO: we should have real land tests, but Land is so |
||
1015 | // intermingled with scene that you can't test it without a |
||
1016 | // valid scene. That requires some disagregation. |
||
1017 | |||
1018 | |||
1019 | //************************************************************************************// |
||
1020 | // Extra private methods |
||
1021 | |||
1022 | private double[,] GenTerrain(double value) |
||
1023 | { |
||
1024 | double[,] terret = new double[Constants.RegionSize, Constants.RegionSize]; |
||
1025 | terret.Initialize(); |
||
1026 | for (int x = 0; x < Constants.RegionSize; x++) |
||
1027 | for (int y = 0; y < Constants.RegionSize; y++) |
||
1028 | terret[x,y] = value; |
||
1029 | |||
1030 | return terret; |
||
1031 | } |
||
1032 | |||
1033 | private bool CompareTerrain(double[,] one, double[,] two) |
||
1034 | { |
||
1035 | for (int x = 0; x < Constants.RegionSize; x++) |
||
1036 | for (int y = 0; y < Constants.RegionSize; y++) |
||
1037 | if (one[x,y] != two[x,y]) |
||
1038 | return false; |
||
1039 | |||
1040 | return true; |
||
1041 | } |
||
1042 | |||
1043 | private SceneObjectGroup FindSOG(string name, UUID r) |
||
1044 | { |
||
1045 | List<SceneObjectGroup> objs = db.LoadObjects(r); |
||
1046 | foreach (SceneObjectGroup sog in objs) |
||
1047 | if (sog.Name == name) |
||
1048 | return sog; |
||
1049 | |||
1050 | return null; |
||
1051 | } |
||
1052 | |||
1053 | // This builds a minimalistic Prim, 1 SOG with 1 root SOP. A |
||
1054 | // common failure case is people adding new fields that aren't |
||
1055 | // initialized, but have non-null db constraints. We should |
||
1056 | // honestly be passing more and more null things in here. |
||
1057 | // |
||
1058 | // Please note that in Sqlite.BuildPrim there is a commented out inline version |
||
1059 | // of this so you can debug and step through the build process and check the fields |
||
1060 | // |
||
1061 | // Real World Value: Tests for situation where extending a SceneObjectGroup/SceneObjectPart |
||
1062 | // causes the application to crash at the database layer because of null values |
||
1063 | // in NOT NULL fields |
||
1064 | // |
||
1065 | private SceneObjectGroup NewSOG(string name, UUID uuid, UUID regionId) |
||
1066 | { |
||
1067 | RegionInfo regionInfo = new RegionInfo(); |
||
1068 | regionInfo.RegionID = regionId; |
||
1069 | regionInfo.RegionLocX = 0; |
||
1070 | regionInfo.RegionLocY = 0; |
||
1071 | |||
1072 | SceneObjectPart sop = new SceneObjectPart(); |
||
1073 | sop.Name = name; |
||
1074 | sop.Description = name; |
||
1075 | sop.Text = RandomName(); |
||
1076 | sop.SitName = RandomName(); |
||
1077 | sop.TouchName = RandomName(); |
||
1078 | sop.UUID = uuid; |
||
1079 | sop.Shape = PrimitiveBaseShape.Default; |
||
1080 | |||
1081 | SceneObjectGroup sog = new SceneObjectGroup(sop); |
||
1082 | // sog.SetScene(scene); |
||
1083 | |||
1084 | return sog; |
||
1085 | } |
||
1086 | |||
1087 | private SceneObjectPart NewSOP(string name, UUID uuid) |
||
1088 | { |
||
1089 | SceneObjectPart sop = new SceneObjectPart(); |
||
1090 | sop.Name = name; |
||
1091 | sop.Description = name; |
||
1092 | sop.Text = RandomName(); |
||
1093 | sop.SitName = RandomName(); |
||
1094 | sop.TouchName = RandomName(); |
||
1095 | sop.UUID = uuid; |
||
1096 | sop.Shape = PrimitiveBaseShape.Default; |
||
1097 | return sop; |
||
1098 | } |
||
1099 | |||
1100 | // These are copied from the Inventory Item tests |
||
1101 | |||
1102 | private InventoryItemBase NewItem(UUID id, UUID parent, UUID owner, string name, UUID asset) |
||
1103 | { |
||
1104 | InventoryItemBase i = new InventoryItemBase(); |
||
1105 | i.ID = id; |
||
1106 | i.Folder = parent; |
||
1107 | i.Owner = owner; |
||
1108 | i.CreatorId = owner.ToString(); |
||
1109 | i.Name = name; |
||
1110 | i.Description = name; |
||
1111 | i.AssetID = asset; |
||
1112 | return i; |
||
1113 | } |
||
1114 | |||
1115 | private static string RandomName() |
||
1116 | { |
||
1117 | StringBuilder name = new StringBuilder(); |
||
1118 | int size = random.Next(5,12); |
||
1119 | char ch ; |
||
1120 | for (int i=0; i<size; i++) |
||
1121 | { |
||
1122 | ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))) ; |
||
1123 | name.Append(ch); |
||
1124 | } |
||
1125 | return name.ToString(); |
||
1126 | } |
||
1127 | // private InventoryFolderBase NewFolder(UUID id, UUID parent, UUID owner, string name) |
||
1128 | // { |
||
1129 | // InventoryFolderBase f = new InventoryFolderBase(); |
||
1130 | // f.ID = id; |
||
1131 | // f.ParentID = parent; |
||
1132 | // f.Owner = owner; |
||
1133 | // f.Name = name; |
||
1134 | // return f; |
||
1135 | // } |
||
1136 | } |
||
1137 | } |