public void Should_Execute_IPlugin()
        {
            IExecutionManager     manager    = new ExecutionManager( new PluginManager() );
            IAllocationDefinition definition = new AllocationDefinition( 2 );
            IExecutionSlot        slot       = new ExecutionSlot(definition);

            definition.Add( DTO.NewPluginInfoTestPlugin );

            manager.PluginManager.Install( definition );
            manager.Add( slot );

            IPlugin completedPlugin = null;
            TestPlugin testPlugin = new TestPlugin(100);

            manager.ExecuteCompleted += delegate(object sender, ObjectEventArgs<IPlugin> eventArgs)
                                            {
                                                completedPlugin = eventArgs.EventObject;
                                            };
            manager.Execute( testPlugin );

            Assert.AreEqual( slot, manager[ definition ] );
            Assert.AreEqual( 1, manager[ definition ].UsedSlots );

            Timing.WaitWhile(() => completedPlugin == null, 1000);

            Assert.AreEqual( testPlugin, completedPlugin );
            Assert.AreEqual( 0, manager[ definition ].UsedSlots );
            Assert.AreEqual( PluginStatus.Executed, testPlugin.Status );
        }
Beispiel #2
0
        public void Should_Add_IPlugin()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add( DTO.NewPluginInfoTestPlugin );

            IExecutionSlot slot = new ExecutionSlot( definition );
            slot.Execute( new TestPlugin( 50 ) );
            Assert.AreEqual(1, slot.UsedSlots);
        }
Beispiel #3
0
        public void Should_Be_Able_To_Iterate_Through_Added_Plugins()
        {
            IAllocationDefinition definition = new AllocationDefinition(6);
            definition.Add(DTO.NewPluginInfoTestPlugin);

            IExecutionSlot slot = new ExecutionSlot(definition);
            slot.Execute(new TestPlugin(600));
            slot.Execute(new TestPlugin(600));
            slot.Execute(new TestPlugin(600));
            slot.Execute(new TestPlugin(600));

            Assert.AreEqual( 4, slot.ToList().Count );
        }
Beispiel #4
0
        public void Should_Commit_Plugin()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add(DTO.NewPluginInfoTestPlugin);

            TestPlugin plugin = new TestPlugin(50);

            IExecutionSlot slot = new ExecutionSlot(definition);
            slot.Commit( plugin );

            Timing.WaitUntil(() => plugin.Status == PluginStatus.Committed, 1000);

            Assert.AreEqual( PluginStatus.Committed, plugin.Status );
        }
        public SingleThreadInvoker()
        {
            Slot = new ExecutionSlot();

            _callChannel = Channel.CreateUnbounded <ExecutionSlot>(new UnboundedChannelOptions()
            {
                AllowSynchronousContinuations = false,
                SingleReader = false,
                SingleWriter = true
            });

            _channelReader = _callChannel.Reader;
            _channelWriter = _callChannel.Writer;

            ReturnExecutionSlot();
        }
Beispiel #6
0
        public void Should_Execute_Plugin()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add(DTO.NewPluginInfoTestPlugin);

            TestPlugin plugin = new TestPlugin(100);

            IExecutionSlot slot = new ExecutionSlot(definition);
            slot.Execute( plugin );

            Assert.AreEqual( 1, slot.UsedSlots );

            plugin.EndCurrentOperation();

            Timing.WaitUntil(() => plugin.Status == PluginStatus.Executed, 1000);

            Assert.AreEqual( 1.0, plugin.OperationProgress );
            Assert.AreEqual( 0, slot.UsedSlots );
            Assert.AreEqual( PluginStatus.Executed, plugin.Status );
        }
Beispiel #7
0
        public void Should_Fail_Commit_Plugin()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add(DTO.NewPluginInfoTestPlugin);

            TestPlugin plugin = new TestPlugin(50, true);
            IPlugin failedPlugin = null;
            Exception pluginException = null;

            IExecutionSlot slot = new ExecutionSlot(definition);
            slot.CommitFailed += delegate(object sender, ObjectErrorEventArgs<IPlugin> eventArgs)
                                 {
                                     failedPlugin    = eventArgs.EventObject;
                                     pluginException = eventArgs.Exception;
                                 };

            slot.Commit(plugin);

            Timing.WaitWhile(() => failedPlugin == null, 3000);

            Assert.AreEqual( plugin, failedPlugin );
            Assert.IsNotNull( pluginException );
            Assert.AreEqual( PluginStatus.CommitFailed, plugin.Status );
        }
Beispiel #8
0
        public void Should_Throw_NullReference_If_Adding_A_Null_Plugin()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add( DTO.NewPluginInfoTestPlugin );

            IExecutionSlot slot = new ExecutionSlot( definition );

            slot.Execute( null );
        }
Beispiel #9
0
        public void Should_Throw_Exception_If_All_Slots_Are_Used()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add(DTO.NewPluginInfoTestPlugin);

            IExecutionSlot slot = new ExecutionSlot(definition);
            slot.Execute(new TestPlugin(600));
            slot.Execute(new TestPlugin(600));
        }
Beispiel #10
0
        public void Should_Rollback_Plugin()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add(DTO.NewPluginInfoTestPlugin2);

            TestPlugin2 plugin = new TestPlugin2(50);

            IExecutionSlot slot = new ExecutionSlot(definition);
            slot.Rollback( plugin );

            Timing.WaitUntil(() => plugin.Status == PluginStatus.Rolledback, 1000);

            Assert.AreEqual(PluginStatus.Rolledback, plugin.Status);
        }
Beispiel #11
0
        public void Should_Not_Add_IPlugin_If_It_Violates_Definition()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            definition.Add( DTO.NewPluginInfoTestPlugin );

            IExecutionSlot slot = new ExecutionSlot( definition );
            slot.Execute( new TestPlugin2() );
        }
Beispiel #12
0
        public void Should_Initialize_With_IAllocationDefinition()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            IExecutionSlot        slot       = new ExecutionSlot( definition );

            Assert.AreEqual( definition, slot.Definition );
        }