diff options
-rw-r--r-- | OpenSim/Framework/AvatarAppearance.cs | 12 | ||||
-rw-r--r-- | OpenSim/Framework/Util.cs | 11 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | 46 |
3 files changed, 53 insertions, 16 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 02af5d9..ab4ed66 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs | |||
@@ -412,12 +412,20 @@ namespace OpenSim.Framework | |||
412 | } | 412 | } |
413 | 413 | ||
414 | /// <summary> | 414 | /// <summary> |
415 | /// Add an attachment, if the attachpoint has the | 415 | /// Add an attachment |
416 | /// </summary> | ||
417 | /// <remarks> | ||
418 | /// If the attachpoint has the | ||
416 | /// 0x80 bit set then we assume this is an append | 419 | /// 0x80 bit set then we assume this is an append |
417 | /// operation otherwise we replace whatever is | 420 | /// operation otherwise we replace whatever is |
418 | /// currently attached at the attachpoint | 421 | /// currently attached at the attachpoint |
422 | /// </remarks> | ||
423 | /// <param name="attachpoint"></param> | ||
424 | /// <param name="item">If UUID.Zero, then an any attachment at the attachpoint is removed.</param> | ||
425 | /// <param name="asset"></param> | ||
426 | /// <returns> | ||
419 | /// return true if something actually changed | 427 | /// return true if something actually changed |
420 | /// </summary> | 428 | /// </returns> |
421 | public bool SetAttachment(int attachpoint, UUID item, UUID asset) | 429 | public bool SetAttachment(int attachpoint, UUID item, UUID asset) |
422 | { | 430 | { |
423 | if (attachpoint == 0) | 431 | if (attachpoint == 0) |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 984a7a8..51ced7b 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -56,8 +56,13 @@ namespace OpenSim.Framework | |||
56 | /// <summary> | 56 | /// <summary> |
57 | /// The method used by Util.FireAndForget for asynchronously firing events | 57 | /// The method used by Util.FireAndForget for asynchronously firing events |
58 | /// </summary> | 58 | /// </summary> |
59 | /// <remarks> | ||
60 | /// None is used to execute the method in the same thread that made the call. It should only be used by regression | ||
61 | /// test code that relies on predictable event ordering. | ||
62 | /// </remarks> | ||
59 | public enum FireAndForgetMethod | 63 | public enum FireAndForgetMethod |
60 | { | 64 | { |
65 | None, | ||
61 | UnsafeQueueUserWorkItem, | 66 | UnsafeQueueUserWorkItem, |
62 | QueueUserWorkItem, | 67 | QueueUserWorkItem, |
63 | BeginInvoke, | 68 | BeginInvoke, |
@@ -89,7 +94,8 @@ namespace OpenSim.Framework | |||
89 | public static readonly Regex UUIDPattern | 94 | public static readonly Regex UUIDPattern |
90 | = new Regex("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"); | 95 | = new Regex("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"); |
91 | 96 | ||
92 | public static FireAndForgetMethod FireAndForgetMethod = FireAndForgetMethod.SmartThreadPool; | 97 | public static FireAndForgetMethod DefaultFireAndForgetMethod = FireAndForgetMethod.SmartThreadPool; |
98 | public static FireAndForgetMethod FireAndForgetMethod = DefaultFireAndForgetMethod; | ||
93 | 99 | ||
94 | /// <summary> | 100 | /// <summary> |
95 | /// Gets the name of the directory where the current running executable | 101 | /// Gets the name of the directory where the current running executable |
@@ -1506,6 +1512,9 @@ namespace OpenSim.Framework | |||
1506 | 1512 | ||
1507 | switch (FireAndForgetMethod) | 1513 | switch (FireAndForgetMethod) |
1508 | { | 1514 | { |
1515 | case FireAndForgetMethod.None: | ||
1516 | realCallback.Invoke(obj); | ||
1517 | break; | ||
1509 | case FireAndForgetMethod.UnsafeQueueUserWorkItem: | 1518 | case FireAndForgetMethod.UnsafeQueueUserWorkItem: |
1510 | ThreadPool.UnsafeQueueUserWorkItem(realCallback, obj); | 1519 | ThreadPool.UnsafeQueueUserWorkItem(realCallback, obj); |
1511 | break; | 1520 | break; |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index c524090..7f25864 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -37,10 +37,11 @@ using NUnit.Framework; | |||
37 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
39 | using OpenSim.Framework.Communications; | 39 | using OpenSim.Framework.Communications; |
40 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.CoreModules.Avatar.Attachments; |
41 | using OpenSim.Region.Framework.Interfaces; | ||
42 | using OpenSim.Region.CoreModules.World.Serialiser; | 41 | using OpenSim.Region.CoreModules.World.Serialiser; |
43 | using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation; | 42 | using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation; |
43 | using OpenSim.Region.Framework.Scenes; | ||
44 | using OpenSim.Region.Framework.Interfaces; | ||
44 | using OpenSim.Tests.Common; | 45 | using OpenSim.Tests.Common; |
45 | using OpenSim.Tests.Common.Mock; | 46 | using OpenSim.Tests.Common.Mock; |
46 | 47 | ||
@@ -61,18 +62,25 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
61 | [SetUp] | 62 | [SetUp] |
62 | public void Init() | 63 | public void Init() |
63 | { | 64 | { |
64 | scene = SceneHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); | 65 | // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread. |
66 | Util.FireAndForgetMethod = FireAndForgetMethod.None; | ||
65 | 67 | ||
66 | ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); | 68 | scene = SceneHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); |
67 | interregionComms.Initialise(new IniConfigSource()); | 69 | SceneHelpers.SetupSceneModules(scene, new AttachmentsModule()); |
68 | interregionComms.PostInitialise(); | ||
69 | SceneHelpers.SetupSceneModules(scene, new IniConfigSource(), interregionComms); | ||
70 | 70 | ||
71 | agent1 = UUID.Random(); | 71 | agent1 = UUID.Random(); |
72 | random = new Random(); | 72 | random = new Random(); |
73 | sog1 = NewSOG(UUID.Random(), scene, agent1); | 73 | sog1 = NewSOG(UUID.Random(), scene, agent1); |
74 | sog2 = NewSOG(UUID.Random(), scene, agent1); | 74 | sog2 = NewSOG(UUID.Random(), scene, agent1); |
75 | } | 75 | } |
76 | |||
77 | [TearDown] | ||
78 | public void TearDown() | ||
79 | { | ||
80 | // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple | ||
81 | // threads. Possibly, later tests should be rewritten not to worry about such things. | ||
82 | Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod; | ||
83 | } | ||
76 | 84 | ||
77 | [Test] | 85 | [Test] |
78 | public void TestAddAttachments() | 86 | public void TestAddAttachments() |
@@ -100,11 +108,23 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
100 | Assert.That(presence.HasAttachments(), Is.False); | 108 | Assert.That(presence.HasAttachments(), Is.False); |
101 | } | 109 | } |
102 | 110 | ||
103 | // [Test] | 111 | [Test] |
104 | // public void TestRezAttachmentsOnAvatarEntrance() | 112 | public void TestRezAttachmentsOnAvatarEntrance() |
105 | // { | 113 | { |
106 | // ScenePresence presence = scene.GetScenePresence(agent1); | 114 | TestHelpers.InMethod(); |
107 | // } | 115 | // log4net.Config.XmlConfigurator.Configure(); |
116 | |||
117 | UUID spId = TestHelpers.ParseTail(0x1); | ||
118 | UUID attItemId = TestHelpers.ParseTail(0x2); | ||
119 | UUID attAssetId = TestHelpers.ParseTail(0x3); | ||
120 | |||
121 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(spId); | ||
122 | acd.Appearance = new AvatarAppearance(); | ||
123 | acd.Appearance.SetAttachment((int)AttachmentPoint.Chest, attItemId, attAssetId); | ||
124 | ScenePresence presence = SceneHelpers.AddScenePresence(scene, acd); | ||
125 | |||
126 | // Assert.That(presence.HasAttachments(), Is.True); | ||
127 | } | ||
108 | 128 | ||
109 | // I'm commenting this test because scene setup NEEDS InventoryService to | 129 | // I'm commenting this test because scene setup NEEDS InventoryService to |
110 | // be non-null | 130 | // be non-null |