|
@@ -1,129 +0,0 @@
|
|
|
-/*
|
|
|
- * Copyright (c) Contributors, http://opensimulator.org/
|
|
|
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
|
- *
|
|
|
- * Redistribution and use in source and binary forms, with or without
|
|
|
- * modification, are permitted provided that the following conditions are met:
|
|
|
- * * Redistributions of source code must retain the above copyright
|
|
|
- * notice, this list of conditions and the following disclaimer.
|
|
|
- * * Redistributions in binary form must reproduce the above copyright
|
|
|
- * notice, this list of conditions and the following disclaimer in the
|
|
|
- * documentation and/or other materials provided with the distribution.
|
|
|
- * * Neither the name of the OpenSimulator Project nor the
|
|
|
- * names of its contributors may be used to endorse or promote products
|
|
|
- * derived from this software without specific prior written permission.
|
|
|
- *
|
|
|
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
|
|
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
- */
|
|
|
-
|
|
|
-using System;
|
|
|
-using System.Collections;
|
|
|
-using System.Reflection;
|
|
|
-using System.Text;
|
|
|
-using NUnit.Framework;
|
|
|
-using OpenMetaverse;
|
|
|
-using OpenSim.Framework;
|
|
|
-
|
|
|
-namespace OpenSim.Data.Tests
|
|
|
-{
|
|
|
- public static class ScrambleForTesting
|
|
|
- {
|
|
|
- private static readonly Random random = new Random();
|
|
|
- public static void Scramble(object obj)
|
|
|
- {
|
|
|
- PropertyInfo[] properties = obj.GetType().GetProperties();
|
|
|
- foreach (var property in properties)
|
|
|
- {
|
|
|
- //Skip indexers of classes. We will assume that everything that has an indexer
|
|
|
- // is also IEnumberable. May not always be true, but should be true normally.
|
|
|
- if (property.GetIndexParameters().Length > 0)
|
|
|
- continue;
|
|
|
-
|
|
|
- RandomizeProperty(obj, property, null);
|
|
|
- }
|
|
|
- //Now if it implments IEnumberable, it's probably some kind of list, so we should randomize
|
|
|
- // everything inside of it.
|
|
|
- IEnumerable enumerable = obj as IEnumerable;
|
|
|
- if (enumerable != null)
|
|
|
- {
|
|
|
- foreach (object value in enumerable)
|
|
|
- {
|
|
|
- Scramble(value);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private static void RandomizeProperty(object obj, PropertyInfo property, object[] index)
|
|
|
- {
|
|
|
- Type t = property.PropertyType;
|
|
|
- if (!property.CanWrite)
|
|
|
- return;
|
|
|
- object value = property.GetValue(obj, index);
|
|
|
- if (value == null)
|
|
|
- return;
|
|
|
-
|
|
|
- if (t == typeof (string))
|
|
|
- property.SetValue(obj, RandomName(), index);
|
|
|
- else if (t == typeof (UUID))
|
|
|
- property.SetValue(obj, UUID.Random(), index);
|
|
|
- else if (t == typeof (sbyte))
|
|
|
- property.SetValue(obj, (sbyte)random.Next(sbyte.MinValue, sbyte.MaxValue), index);
|
|
|
- else if (t == typeof (short))
|
|
|
- property.SetValue(obj, (short)random.Next(short.MinValue, short.MaxValue), index);
|
|
|
- else if (t == typeof (int))
|
|
|
- property.SetValue(obj, random.Next(), index);
|
|
|
- else if (t == typeof (long))
|
|
|
- property.SetValue(obj, random.Next() * int.MaxValue, index);
|
|
|
- else if (t == typeof (byte))
|
|
|
- property.SetValue(obj, (byte)random.Next(byte.MinValue, byte.MaxValue), index);
|
|
|
- else if (t == typeof (ushort))
|
|
|
- property.SetValue(obj, (ushort)random.Next(ushort.MinValue, ushort.MaxValue), index);
|
|
|
- else if (t == typeof (uint))
|
|
|
- property.SetValue(obj, Convert.ToUInt32(random.Next()), index);
|
|
|
- else if (t == typeof (ulong))
|
|
|
- property.SetValue(obj, Convert.ToUInt64(random.Next()) * Convert.ToUInt64(UInt32.MaxValue), index);
|
|
|
- else if (t == typeof (bool))
|
|
|
- property.SetValue(obj, true, index);
|
|
|
- else if (t == typeof (byte[]))
|
|
|
- {
|
|
|
- byte[] bytes = new byte[30];
|
|
|
- random.NextBytes(bytes);
|
|
|
- property.SetValue(obj, bytes, index);
|
|
|
- }
|
|
|
- else
|
|
|
- Scramble(value);
|
|
|
- }
|
|
|
-
|
|
|
- private static string RandomName()
|
|
|
- {
|
|
|
- StringBuilder name = new StringBuilder();
|
|
|
- int size = random.Next(5, 12);
|
|
|
- for (int i = 0; i < size; i++)
|
|
|
- {
|
|
|
- char ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
|
|
|
- name.Append(ch);
|
|
|
- }
|
|
|
- return name.ToString();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- [TestFixture]
|
|
|
- public class ScrableForTestingTest
|
|
|
- {
|
|
|
- [Test]
|
|
|
- public void TestScramble()
|
|
|
- {
|
|
|
- AssetBase actual = new AssetBase(UUID.Random(), "asset one");
|
|
|
- ScrambleForTesting.Scramble(actual);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|