public void Should_Rollback_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.RollbackCompleted += delegate(object sender, ObjectEventArgs<IPlugin> eventArgs) { completedPlugin = eventArgs.EventObject; }; manager.Rollback( 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.Rolledback, testPlugin.Status ); }