From 5101f688ee887d5fa67a573591ec3b6a43c4e50b Mon Sep 17 00:00:00 2001
From: Teravus Ovares (Dan Olivares)
Date: Fri, 30 Oct 2009 19:13:57 -0400
Subject: * Add LocklessQueueTests. One Test is commented out because it
fails. It should probably work.. but I'm awaiting clarification.
---
OpenSim/Framework/ACL.cs | 32 +-----
OpenSim/Framework/Tests/LocklessQueueTests.cs | 147 ++++++++++++++++++++++++++
2 files changed, 148 insertions(+), 31 deletions(-)
create mode 100644 OpenSim/Framework/Tests/LocklessQueueTests.cs
(limited to 'OpenSim')
diff --git a/OpenSim/Framework/ACL.cs b/OpenSim/Framework/ACL.cs
index 3b1c0f0..f76e8b7 100644
--- a/OpenSim/Framework/ACL.cs
+++ b/OpenSim/Framework/ACL.cs
@@ -248,35 +248,5 @@ namespace OpenSim.Framework
#endregion
- #region Tests
-
- ///
- /// ACL Test class
- ///
- internal class ACLTester
- {
- public ACLTester()
- {
- ACL acl = new ACL();
-
- Role Guests = new Role("Guests");
- acl.AddRole(Guests);
-
- Role[] parents = new Role[0];
- parents[0] = Guests;
-
- Role JoeGuest = new Role("JoeGuest", parents);
- acl.AddRole(JoeGuest);
-
- Resource CanBuild = new Resource("CanBuild");
- acl.AddResource(CanBuild);
-
-
- acl.GrantPermission("Guests", "CanBuild");
-
- acl.HasPermission("JoeGuest", "CanBuild");
- }
- }
-
- #endregion
+
}
\ No newline at end of file
diff --git a/OpenSim/Framework/Tests/LocklessQueueTests.cs b/OpenSim/Framework/Tests/LocklessQueueTests.cs
new file mode 100644
index 0000000..e34f767
--- /dev/null
+++ b/OpenSim/Framework/Tests/LocklessQueueTests.cs
@@ -0,0 +1,147 @@
+using System;
+using NUnit.Framework;
+using System.Threading;
+
+namespace OpenSim.Framework.Tests
+{
+ [TestFixture]
+ public class LocklessQueueTests
+ {
+ public LocklessQueue sharedQueue;
+ [SetUp]
+ public void build()
+ {
+ sharedQueue = new LocklessQueue();
+
+ }
+
+ [Test]
+ public void EnqueueDequeueTest()
+ {
+ sharedQueue.Enqueue(1);
+ int dequeue;
+ sharedQueue.Dequeue(out dequeue);
+ Assert.That(dequeue == 1, "Enqueued 1. Dequeue should also be 1");
+ Assert.That(sharedQueue.Count == 0, "We Dequeued the last item, count should be 0");
+
+ }
+
+ [Test]
+ public void ThreadedSimpleEnqueueDequeueTest()
+ {
+ int loopamountA = 5000;
+ int loopamountB = 5000;
+ int loopamountC = 5000;
+ int loopamountD = 5000;
+
+ threadObject1 obj1 = new threadObject1(this, loopamountA);
+ threadObject1 obj2 = new threadObject1(this, loopamountB);
+ threadObject1 obj3 = new threadObject1(this, loopamountC);
+ threadObject1 obj4 = new threadObject1(this, loopamountD);
+ for (int i=0;i<1;i++)
+ {
+ sharedQueue.Enqueue(i);
+ }
+
+ Thread thr = new Thread(obj1.thread1Action);
+ Thread thr2 = new Thread(obj2.thread1Action);
+ Thread thr3 = new Thread(obj3.thread1Action);
+ Thread thr4 = new Thread(obj4.thread1Action);
+ thr.Start();
+ thr2.Start();
+ thr3.Start();
+ thr4.Start();
+
+ thr.Join();
+ thr2.Join();
+ thr3.Join();
+ thr4.Join();
+
+ Assert.That(sharedQueue.Count == 1);
+ int result = 0;
+ sharedQueue.Dequeue(out result);
+ Assert.That(result == loopamountD + loopamountC + loopamountB + loopamountA, "Threaded Result test failed. Expected the sum of all of the threads adding to the item in the queue. Got {0}, Expected {1}", result, loopamountD + loopamountC + loopamountB + loopamountA);
+
+ }
+
+ /* This test fails. Need clarification if this should work
+ [Test]
+ public void ThreadedAdvancedEnqueueDequeueTest()
+ {
+ int loopamountA = 5000;
+ int loopamountB = 5000;
+ int loopamountC = 5000;
+ int loopamountD = 5000;
+
+ threadObject1 obj1 = new threadObject1(this, loopamountA);
+ threadObject2 obj2 = new threadObject2(this, loopamountB);
+ threadObject1 obj3 = new threadObject1(this, loopamountC);
+ threadObject2 obj4 = new threadObject2(this, loopamountD);
+ for (int i = 0; i < 1; i++)
+ {
+ sharedQueue.Enqueue(i);
+ }
+
+ Thread thr = new Thread(obj1.thread1Action);
+ Thread thr2 = new Thread(obj2.thread1Action);
+ Thread thr3 = new Thread(obj3.thread1Action);
+ Thread thr4 = new Thread(obj4.thread1Action);
+ thr.Start();
+ thr2.Start();
+ thr3.Start();
+ thr4.Start();
+
+ thr.Join();
+ thr2.Join();
+ thr3.Join();
+ thr4.Join();
+
+ Assert.That(sharedQueue.Count == 1);
+ int result = 0;
+ sharedQueue.Dequeue(out result);
+ Assert.That(result == loopamountA - loopamountB + loopamountC - loopamountD, "Threaded Result test failed. Expected the sum of all of the threads adding to the item in the queue. Got {0}, Expected {1}", result, loopamountA - loopamountB + loopamountC - loopamountD);
+
+ }
+ */
+ }
+ // Dequeue one from the locklessqueue add one to it and enqueue it again.
+ public class threadObject1
+ {
+ private LocklessQueueTests m_tests;
+ private int m_loopamount = 0;
+ public threadObject1(LocklessQueueTests tst, int loopamount)
+ {
+ m_tests = tst;
+ m_loopamount = loopamount;
+ }
+ public void thread1Action(object o)
+ {
+ for (int i=0;i