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 ); }
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); }
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 ); }
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(); }
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 ); }
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 ); }
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 ); }
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)); }
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); }
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() ); }
public void Should_Initialize_With_IAllocationDefinition() { IAllocationDefinition definition = new AllocationDefinition(1); IExecutionSlot slot = new ExecutionSlot( definition ); Assert.AreEqual( definition, slot.Definition ); }