public void Should_Create_Slot()
        {
            IDictionary<string, Assembly> assemblies = new Dictionary<string, Assembly>();
            IAllocationDefinition definition = new AllocationDefinition( 2 );

            Assert.AreEqual( 2, definition.MaxSlots );
        }
        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 );
        }
Example #3
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);
        }
        public void Should_Add_ExecutionSlot()
        {
            IExecutionManager     manager    = new ExecutionManager( new PluginManager() );
            IAllocationDefinition definition = new AllocationDefinition( 2 );

            definition.Add( DTO.NewPluginInfoTestPlugin );

            manager.PluginManager.Install( definition );
            manager.Add( new ExecutionSlot( definition ) );

            Assert.AreEqual( 1, manager.Count );
        }
Example #5
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 );
        }
Example #6
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 void Should_Add_IPluginInfo_To_Definition()
        {
            IAllocationDefinition definition = new AllocationDefinition( 2 );
            IPluginInfo           pluginInfo = DTO.NewPluginInfoTestPlugin;

            definition.Add( pluginInfo );

            Assert.AreEqual( pluginInfo.Assembly, definition[ pluginInfo.PluginIdentifier ].Assembly );
            Assert.AreEqual( pluginInfo.AssemblyIdentifier, definition[ pluginInfo.PluginIdentifier ].AssemblyIdentifier );
            Assert.AreEqual( pluginInfo.Classname, definition[ pluginInfo.PluginIdentifier ].Classname );
            Assert.AreEqual( pluginInfo.CreatedDate.ToShortDateString(), definition[ pluginInfo.PluginIdentifier ].CreatedDate.ToShortDateString() );
            Assert.AreEqual( pluginInfo.Description, definition[ pluginInfo.PluginIdentifier ].Description );
            Assert.AreEqual( pluginInfo.Filename, definition[ pluginInfo.PluginIdentifier ].Filename );
            Assert.AreEqual( pluginInfo.ID, definition[ pluginInfo.PluginIdentifier ].ID );
            Assert.AreEqual( pluginInfo.Name, definition[ pluginInfo.PluginIdentifier ].Name );
        }
Example #8
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 );
        }
        public void Should_Be_Able_To_Iterate_Through_Installed_IPluginsInfos()
        {
            IAllocationDefinition definition  = new AllocationDefinition(2);
            IPluginInfo           pluginInfo1 = DTO.NewPluginInfoTestPlugin;
            IPluginInfo           pluginInfo2 = DTO.NewPluginInfoTestPlugin;

            pluginInfo2.Version = "2.0.0.0";

            definition.Add(pluginInfo1);
            definition.Add(pluginInfo2);

            int count = 0;

            foreach( IPluginInfo info in definition )
            {
                Assert.IsNotNull( info );
                count++;
            }

            Assert.AreEqual( 2, count );
        }
Example #10
0
        public void Should_Commit_Plugin()
        {
            IAgentEngine engine = new AgentEngine();
            IPlugin plugin = new TestPlugin();
            IAllocationDefinition definition = new AllocationDefinition(2);

            definition.Add(DTO.NewPluginInfoTestPlugin);

            engine.AddDefinition(definition);

            IPlugin outPlugin = null;
            engine.ExecutionManager.CommitCompleted += delegate(object sender, ObjectEventArgs<IPlugin> eventArgs)
                                                            {
                                                                outPlugin = eventArgs.EventObject;
                                                            };
            engine.Commit(plugin);

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

            Assert.AreEqual(plugin, outPlugin);
            Assert.AreEqual(PluginStatus.Committed, outPlugin.Status);
        }
Example #11
0
        public void Should_Initialize_With_IAllocationDefinition()
        {
            IAllocationDefinition definition = new AllocationDefinition(1);
            IExecutionSlot        slot       = new ExecutionSlot( definition );

            Assert.AreEqual( definition, slot.Definition );
        }
Example #12
0
        private IAllocationDefinition ConvertToDefinition( IEnumerable<PluginInfo> plugins, uint maxSlots )
        {
            IAllocationDefinition definition = new AllocationDefinition( maxSlots );

            foreach( IPluginInfo info in plugins )
            {
                definition.Add( info );
            }

            return definition;
        }
Example #13
0
        public void Should_Return_True_If_Plugin_Is_Installed()
        {
            IAgentEngine          engine     = new AgentEngine();
            IAllocationDefinition definition = new AllocationDefinition(2);

            definition.Add( DTO.NewPluginInfoTestPlugin );

            engine.AddDefinition( definition );

            Assert.IsTrue( engine.IsPluginInstalled( DTO.NewPluginInfoTestPlugin.PluginIdentifier ) );
        }
 public void Should_Not_Be_Able_To_Create_With_Zero_MaxSlots()
 {
     AllocationDefinition definition = new AllocationDefinition( 0 );
 }
Example #15
0
        public void Should_Throw_FileNotFoundException_If_Assembly_Isnt_Found_When_Insall_Definition()
        {
            IPluginManager        pluginManager = new PluginManager();
            IAllocationDefinition definition    = new AllocationDefinition( 2 );

            definition.Add( new PluginInfo() );

            pluginManager.Install( definition );
        }
Example #16
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);
        }
Example #17
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));
        }
Example #18
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 );
        }
Example #19
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 );
        }
Example #20
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() );
        }