Example #1
0
        /**
         * Refactored from AbstractAction.java
         *
         * @param tree
         */
        public static void ConvertSubTree(HashTree tree)
        {
            LinkedList<Object> copyList = new LinkedList<Object>(tree.list());
            foreach (Object obj  in copyList)
            {
                if (typeof(TestElement).IsAssignableFrom(obj.GetType()))
                {
                    TestElement item = (TestElement) obj;
                    if (item.isEnabled())
                    {
                        if (typeof(ReplaceableController).IsAssignableFrom(item.GetType()))
                        {
                            ReplaceableController rc;

                            // TODO this bit of code needs to be tidied up
                            // Unfortunately ModuleController is in components, not core
                            if (item.GetType().Name.Equals("org.apache.jmeter.control.ModuleController"))
                            { // Bug 47165
                                rc = (ReplaceableController) item;
                            }
                            else
                            {
                                // HACK: force the controller to load its tree
                                rc = (ReplaceableController) item.Clone();
                            }

                            HashTree subTree = tree.GetTree(item);
                            if (subTree != null)
                            {
                                HashTree replacementTree = rc.getReplacementSubTree();
                                if (replacementTree != null)
                                {
                                    ConvertSubTree(replacementTree);
                                    tree.Replace(item, rc);
                                    tree.Set(rc, replacementTree);
                                }
                            }
                            else
                            { // null subTree
                                ConvertSubTree(tree.GetTree(item));
                            }
                        }
                        else
                        { // not Replaceable Controller
                            ConvertSubTree(tree.GetTree(item));
                        }
                    }
                    else
                    { // Not enabled
                        tree.Remove(item);
                    }
                }
                else
                { // Not a TestElement
                    NetMeterTreeNode item = (NetMeterTreeNode) obj;
                    if (item.isEnabled())
                    {
                        // Replacement only needs to occur when starting the engine
                        // @see StandardJMeterEngine.run()
                        if (item.getUserObject() is ReplaceableController)
                        {
                            ReplaceableController rc = (ReplaceableController) item.getTestElement();
                            HashTree subTree = tree.GetTree(item);

                            if (subTree != null)
                            {
                                HashTree replacementTree = rc.getReplacementSubTree();
                                if (replacementTree != null)
                                {
                                    ConvertSubTree(replacementTree);
                                    tree.Replace(item, rc);
                                    tree.Set(rc, replacementTree);
                                }
                            }
                        }
                        else
                        { // Not a ReplaceableController
                            ConvertSubTree(tree.GetTree(item));
                            TestElement testElement = item.getTestElement();
                            tree.Replace(item, testElement);
                        }
                     }
                    else
                    { // Not enabled
                        tree.Remove(item);
                    }
                }
            }
        }
Example #2
0
        public void Run()
        {
            log.Info("Running the test!");
            running = true;

            NetMeterContextManager.StartTest();
            //try
            //{
            //    PreCompiler compiler = new PreCompiler();
            //    test.Traverse(compiler);
            //}
            //catch (Exception ex)
            //{
            //    log.Error(String.Format("Error occurred compiling the tree: {0}", ex.Message));
            //    return; // no point continuing
            //}

            /**
             * Notification of test listeners needs to happen after function
             * replacement, but before setting RunningVersion to true.
             */
            SearchByType <TestStateListener> testListeners = new SearchByType <TestStateListener>(); // TL - S&E

            test.Traverse(testListeners);

            // Merge in any additional test listeners
            // currently only used by the function parser
            testListeners.GetSearchResults().AddRange(testList);
            testList.Clear(); // no longer needed

            //if (!startListenersLater )
            //{
            //    NotifyTestListenersOfStart(testListeners);
            //}
            test.Traverse(new TurnElementsOn());
            //if (startListenersLater)
            //{
            //    NotifyTestListenersOfStart(testListeners);
            //}

            LinkedList <Object> testLevelElements = new LinkedList <Object>(test.list(test.GetArray()[0]));

            RemoveThreadGroups(testLevelElements);

            SearchByType <AbstractThreadGroup> searcher = new SearchByType <AbstractThreadGroup>();

            test.Traverse(searcher);

            TestCompiler.Initialize();

            ListenerNotifier notifier = new ListenerNotifier();

            int groupCount = 0;

            NetMeterContextManager.ClearTotalThreads();

            /*
             * Here's where the test really starts. Run a Full GC now: it's no harm
             * at all (just delays test start by a tiny amount) and hitting one too
             * early in the test can impair results for short tests.
             */
            NetMeterUtils.helpGC();

            NetMeterContextManager.GetContext().SetSamplingStarted(true);
            Boolean mainGroups = running; // still running at this point, i.e. setUp was not cancelled

            while (running)
            {
                foreach (AbstractThreadGroup group in searcher.GetSearchResults())
                {
                    groupCount++;
                    String groupName = group.GetName();
                    log.Info(String.Format("Starting ThreadGroup: {0} : {1}", groupCount, groupName));
                    StartThreadGroup(group, groupCount, searcher, testLevelElements, notifier);
                    if (serialized)
                    {
                        log.Info(String.Format("Waiting for thread group: {0} to finish before starting next group", groupName));
                        group.WaitThreadsStopped();
                    }
                }
            }

            if (groupCount == 0)
            { // No TGs found
                log.Info("No enabled thread groups found");
            }
            else
            {
                if (running)
                {
                    log.Info("All thread groups have been started");
                }
                else
                {
                    log.Info("Test stopped - no more thread groups will be started");
                }
            }

            //wait for all Test Threads To Exit
            WaitThreadsStopped();
            NotifyTestListenersOfEnd(testListeners);
        }
Example #3
0
        /**
         * Refactored from AbstractAction.java
         *
         * @param tree
         */
        public static void ConvertSubTree(HashTree tree)
        {
            LinkedList <Object> copyList = new LinkedList <Object>(tree.list());

            foreach (Object obj  in copyList)
            {
                if (typeof(TestElement).IsAssignableFrom(obj.GetType()))
                {
                    TestElement item = (TestElement)obj;
                    if (item.isEnabled())
                    {
                        if (typeof(ReplaceableController).IsAssignableFrom(item.GetType()))
                        {
                            ReplaceableController rc;

                            // TODO this bit of code needs to be tidied up
                            // Unfortunately ModuleController is in components, not core
                            if (item.GetType().Name.Equals("org.apache.jmeter.control.ModuleController"))
                            { // Bug 47165
                                rc = (ReplaceableController)item;
                            }
                            else
                            {
                                // HACK: force the controller to load its tree
                                rc = (ReplaceableController)item.Clone();
                            }

                            HashTree subTree = tree.GetTree(item);
                            if (subTree != null)
                            {
                                HashTree replacementTree = rc.getReplacementSubTree();
                                if (replacementTree != null)
                                {
                                    ConvertSubTree(replacementTree);
                                    tree.Replace(item, rc);
                                    tree.Set(rc, replacementTree);
                                }
                            }
                            else
                            { // null subTree
                                ConvertSubTree(tree.GetTree(item));
                            }
                        }
                        else
                        { // not Replaceable Controller
                            ConvertSubTree(tree.GetTree(item));
                        }
                    }
                    else
                    { // Not enabled
                        tree.Remove(item);
                    }
                }
                else
                { // Not a TestElement
                    NetMeterTreeNode item = (NetMeterTreeNode)obj;
                    if (item.isEnabled())
                    {
                        // Replacement only needs to occur when starting the engine
                        // @see StandardJMeterEngine.run()
                        if (item.getUserObject() is ReplaceableController)
                        {
                            ReplaceableController rc = (ReplaceableController)item.getTestElement();
                            HashTree subTree         = tree.GetTree(item);

                            if (subTree != null)
                            {
                                HashTree replacementTree = rc.getReplacementSubTree();
                                if (replacementTree != null)
                                {
                                    ConvertSubTree(replacementTree);
                                    tree.Replace(item, rc);
                                    tree.Set(rc, replacementTree);
                                }
                            }
                        }
                        else
                        { // Not a ReplaceableController
                            ConvertSubTree(tree.GetTree(item));
                            TestElement testElement = item.getTestElement();
                            tree.Replace(item, testElement);
                        }
                    }
                    else
                    { // Not enabled
                        tree.Remove(item);
                    }
                }
            }
        }