public void InterfaceIsImplementedAndNoDelegateIsDefined_InterfaceImplementationIsUsed()
        {
            var overridingActions = new ExplicitlyDefinedObjectActions<InterfaceRealizingEntity>();
            var actions = new ObjectActionsBasedOnDelegateOrInterface<InterfaceRealizingEntity>(overridingActions,_notifierMock.Object);

            var bigAnswer = actions.IsValid(_bigInterfaceRealizingObject);
            var smallAnswer = actions.IsValid(_smallInterfaceRealizingObject);
            actions.Ping(_bigInterfaceRealizingObject);

            Assert.That(bigAnswer, Is.True);
            Assert.That(smallAnswer, Is.False);
            Assert.That(_bigInterfaceRealizingObject.PingImplementationWasCalled, Is.True);
        }
        public void BothInterfaceImplementationAndDelegateAreDefined_DelegateIsUsed()
        {
            var overridingActions = new ExplicitlyDefinedObjectActions<InterfaceRealizingEntity>
            {
                IsValidDelegate = x => x.Value < 4,
                PingDelegate = _standalonePingImplementation,
            };
            var actions = new ObjectActionsBasedOnDelegateOrInterface<InterfaceRealizingEntity>(overridingActions, _notifierMock.Object);

            var bigAnswer = actions.IsValid(_bigInterfaceRealizingObject);
            var smallAnswer = actions.IsValid(_smallInterfaceRealizingObject);
            actions.Ping(_bigInterfaceRealizingObject);

            Assert.That(bigAnswer, Is.False);
            Assert.That(smallAnswer, Is.True);
            Assert.That(_bigInterfaceRealizingObject.PingImplementationWasCalled, Is.False);
            Assert.That(_standalonePingWasCalled, Is.True);
        }
示例#3
0
        private PoolController<int, ThreadWorker> CreateThreadPoolControllerInstance()
        {
            var workerActions = new ObjectActionsBasedOnDelegateOrInterface<ThreadWorker>(new ExplicitlyDefinedObjectActions<ThreadWorker>());
            var objectUtilizer = new ObjectUtilizer<int, ThreadWorker>();

            var basicPoolSettings = new PoolItemsStorageSettings
            {
                AllowOnlyOneUserPerObject = true,
                BalancingStrategy = _settings.BalancingStrategy,
                MaxObjectsCountPerKey = _settings.MaxWorkersCount,
                ThrowIfCantCreateObjectBecauseOfReachedLimit = false,
            };
            var basicPool = new PoolItemsStorage<int, ThreadWorker>(basicPoolSettings, workerActions, objectUtilizer);

            var stateMonitoringSettings = new PWObjectStateMonitoringSettings
            {
                MaxObjectIdleTimeSpanInSeconds = _settings.MaxObjectIdleTimeSpanInSeconds,
                MaxObjectLifetimeInSeconds = _settings.MaxObjectIdleTimeSpanInSeconds,
                TimeSpanBetweenRevivalsInSeconds = _settings.MonitorTimeSpanInSeconds,
            };
            var stateMonitoringPool = new PWObjectStateMonitoringWrapper<int, ThreadWorker>(stateMonitoringSettings,
                                                                                            basicPool,
                                                                                            workerActions,
                                                                                            objectUtilizer);

            var singleUsePool = new PWSingleUseEnforcingWrapper<int, ThreadWorker>(stateMonitoringPool);

            var autoReleasingPool = new PWAutoReleasingWrapper<int, ThreadWorker>(singleUsePool);

            var poolControllerSettings = new PoolControllerSettings
            {
                CallingReleaseOperationWillHappen = true,
            };
            var controller = new PoolController<int, ThreadWorker>(poolControllerSettings, autoReleasingPool);
            autoReleasingPool.SetPoolController(controller);
            return controller;
        }
 private void InitActionsWith(ExplicitlyDefinedObjectActions<TestResource> delegates)
 {
     _actions = new ObjectActionsBasedOnDelegateOrInterface<TestResource>(delegates, _notifierMock.Object);
 }
        public void NeitherInterfaceImplementationNorDelegate_EmptyMethodRealizationIsUsed()
        {
            var overridingActions = new ExplicitlyDefinedObjectActions<AutonomousEntity>();
            var actions = new ObjectActionsBasedOnDelegateOrInterface<AutonomousEntity>(overridingActions, _notifierMock.Object);

            var bigAnswer = actions.IsValid(_bigAutonomousObject);
            var smallAnswer = actions.IsValid(_smallAutonomousObject);
            actions.Ping(_bigAutonomousObject);

            Assert.That(bigAnswer, Is.True);
            Assert.That(smallAnswer, Is.True);
            Assert.That(_standalonePingWasCalled, Is.False);
        }