Ejemplo n.º 1
0
        public void TestAdvancedEarmarking()
        {
            Model model = new Model("Test model");

            SelfManagingResource rsc = new SelfManagingResource(model, "Resource", Guid.NewGuid(), 2.0, 2.0, true, true, true);

            rsc.AccessRegulator = new SimpleAccessManager(true);

            object keyA  = "Key A";              // Always grants to any 'A' holders.
            object keyA1 = "Key A1";             // Sometimes grants to 'A1' holders.
            object keyA2 = "Key A2";             // Sometimes grants to 'A2' holders.

            IAccessRegulator reg1 = new MultiKeyAccessRegulator(rsc, new ArrayList(new object[] { keyA, keyA1 }));
            IAccessRegulator reg2 = new MultiKeyAccessRegulator(rsc, new ArrayList(new object[] { keyA, keyA2 }));

            ResourceRequest rrTrack1 = new ResourceRequest(1.0);

            rrTrack1.Key = keyA1;
            ResourceRequest rrTrack2 = new ResourceRequest(1.0);

            rrTrack2.Key = keyA2;
            ResourceRequest rrKahuna = new ResourceRequest(1.0);

            rrKahuna.Key = keyA;

            /////////////////////////////////////////////////////////////////////////////
            // Test A: Track 1 acquires equipment, installs key. Track 2 tries and fails.
            ((SimpleAccessManager)rsc.AccessRegulator).PushAccessRegulator(reg1, null);
            TryAcquire(rsc, rrTrack1, true);
            TryAcquire(rsc, rrTrack2, false);

            /////////////////////////////////////////////////////////////////////////////
            // Test B: Push the track 2 regulator into the manager, and try to acquire from track 1 - should fail.
            ((SimpleAccessManager)rsc.AccessRegulator).PushAccessRegulator(reg2, null);
            TryAcquire(rsc, rrTrack1, false);
            TryAcquire(rsc, rrTrack2, true);

            /////////////////////////////////////////////////////////////////////////////
            // Test C: Push the track 1 regulator into the manager, and try to acquire from track 1 - should succeed.
            ((SimpleAccessManager)rsc.AccessRegulator).PushAccessRegulator(reg1, null);
            TryAcquire(rsc, rrTrack2, false);
            TryAcquire(rsc, rrTrack1, true);

            /////////////////////////////////////////////////////////////////////////////
            // Test D: Try to acquire from kahuna - should succeed. Then release, pop access reg, try again, should still succeed.
            TryAcquire(rsc, rrKahuna, true);
            ((SimpleAccessManager)rsc.AccessRegulator).PopAccessRegulator(null);
            TryAcquire(rsc, rrKahuna, true);


            /////////////////////////////////////////////////////////////////////////////
            // Test E: Clear all access regulators, try with each key to acquire. All should succeed.
            ((SimpleAccessManager)rsc.AccessRegulator).PopAccessRegulator(null);
            ((SimpleAccessManager)rsc.AccessRegulator).PopAccessRegulator(null);
            TryAcquire(rsc, rrTrack1, true);
            TryAcquire(rsc, rrTrack2, true);
            TryAcquire(rsc, rrKahuna, true);
        }
Ejemplo n.º 2
0
            public ResourceUser(IModel model, string name, Guid guid, SelfManagingResource smr)
            {
                InitializeIdentity(model, name, null, guid);

                m_irr             = new SimpleResourceRequest(1.0, smr);
                m_model.Starting += new ModelEvent(ScheduleMyResourceAction);

                IMOHelper.RegisterWithModel(this);
            }
Ejemplo n.º 3
0
            public PriRscReqTester(int nUsers)
            {
                m_model = new Model("Resource Testing Model...");

                m_smr = new SelfManagingResource(m_model, "SMR", Guid.NewGuid(), 1.0, 1.0, true, true, true, true);

                m_users = new ResourceUser[nUsers];

                for (int i = 0; i < nUsers; i++)
                {
                    m_users[i] = new ResourceUser(m_model, "User_" + i, Guid.NewGuid(), m_smr);
                }
                m_model.Starting += new ModelEvent(AcqireResource);
            }
Ejemplo n.º 4
0
        private void TryAcquire(SelfManagingResource rsc, IResourceRequest irr, bool expectSuccess)
        {
            string result = "Acqusition of " + rsc.Name + " using key " + irr.Key.ToString() + " expected to " + (expectSuccess?"succeed":"fail") + ".";

            if (rsc.Acquire(irr, false) == expectSuccess)
            {
                if (expectSuccess)
                {
                    rsc.Release(irr);
                }
                Console.WriteLine("Sub-test passed : " + result);
            }
            else
            {
                _Debug.Assert(false, "Access Regulation", "Sub-test failed : " + result);
            }
        }
Ejemplo n.º 5
0
        public void TestPersistentResourceBasics()
        {
            Model model = new Model("Resource Testing Model...");

            SelfManagingResource steamSystem = new SelfManagingResource(model, "SteamSystem", Guid.NewGuid(), 7000.0, false, false, true);

            ResourceRequest[] requests = new ResourceRequest[7];
            for (int i = 0; i < 7; i++)
            {
                requests[i] = new ResourceRequest(1000.0);
            }

            for (int i = 0; i < 7; i++)
            {
                if (steamSystem.Reserve(requests[i], false))
                {
                    double obtained  = requests[i].QuantityObtained;
                    double remaining = requests[i].ResourceObtained.Available;
                    _Debug.WriteLine("Successfully reserved " + obtained + " pounds of steam - " + remaining + " remains.");
                }
                else
                {
                    _Debug.WriteLine("Failed to reserve steam for request[" + i + "]");
                }
            }

            _Debug.WriteLine("Unreserving steam from 2 requests");
            steamSystem.Unreserve(requests[2]);
            double available = steamSystem.Available;

            _Debug.WriteLine("Successfully unreserved steam - " + available + " available.");

            steamSystem.Unreserve(requests[3]);
            available = steamSystem.Available;
            _Debug.WriteLine("Successfully unreserved steam - " + available + " available.");

            for (int i = 5; i < 7; i++)
            {
                if (steamSystem.Reserve(requests[i], false))
                {
                    double obtained  = requests[i].QuantityObtained;
                    double remaining = requests[i].ResourceObtained.Available;
                    _Debug.WriteLine("Successfully reserved " + obtained + " pounds of steam - " + remaining + " remains.");
                }
                else
                {
                    _Debug.WriteLine("Failed to acquire steam for request[" + i + "]");
                }
            }


            _Debug.WriteLine("Unreserving all steam requests - ");
            for (int i = 0; i < 7; i++)
            {
                steamSystem.Unreserve(requests[i]);
            }
            available = steamSystem.Available;
            _Debug.WriteLine("Successfully unreserved steam - " + available + " available.");

            // AEL, bug "Reserve a resource over an existing one" submitted.
//			_Debug.WriteLine("Trying to acquire all steam requests - ");
//			for ( int i = 0; i < 7 ; i++ ) {
//				if ( steamSystem.Acquire(requests[i],false) ){
//					double obtained = requests[i].QuantityObtained;
//					double remaining = requests[i].ResourceObtained.Available;
//					_Debug.WriteLine("Successfully acquired " + obtained + " pounds of steam - " + remaining + " remains.");
//				} else {
//					_Debug.WriteLine("Failed to acquire steam for request["+i+"]");
//				}
//			}
//
//			_Debug.WriteLine("Releasing 2 steam requests ");
//			steamSystem.Release(requests[1]);
//			steamSystem.Release(requests[4]);
//
//			for ( int i = 5; i < 7 ; i++ ) {
//				if ( steamSystem.Acquire(requests[i],false) ){
//					double obtained = requests[i].QuantityObtained;
//					double remaining = requests[i].ResourceObtained.Available;
//					_Debug.WriteLine("Successfully acquired " + obtained + " pounds of steam - " + remaining + " remains.");
//				} else {
//					_Debug.WriteLine("Failed to acquire steam for request["+i+"]");
//				}
//			}

            _Debug.WriteLine("Releasing all steam requests - ");
            for (int i = 0; i < 7; i++)
            {
                steamSystem.Release(requests[i]);
            }

            //model.Validate();
            model.Start();
        }