All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.co.automatictester.lightning.config.LightningConfig Maven / Gradle / Ivy

package uk.co.automatictester.lightning.config;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import uk.co.automatictester.lightning.exceptions.XMLFileException;
import uk.co.automatictester.lightning.exceptions.XMLFileNoTestsException;
import uk.co.automatictester.lightning.handlers.*;
import uk.co.automatictester.lightning.structures.LightningTests;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

public class LightningConfig {

    public void readTests(File xmlFile) {
        LightningTests.flush();
        NodeList nodes = readXmlFile(xmlFile);
        loadAllTests(nodes);
        throwExceptionIfNoTests();
    }

    private NodeList readXmlFile(File xmlFile) {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(xmlFile);
            Node node = doc.getDocumentElement();
            return node.getChildNodes();
        } catch (ParserConfigurationException | SAXException | IOException e) {
            throw new XMLFileException(e);
        }
    }

    protected void loadAllTests(NodeList nodes) {
        for (int i = 0; i < nodes.getLength(); i++) {
            if (nodes.item(i).getNodeType() == Node.ELEMENT_NODE) {
                Element element = (Element) nodes.item(i);

                AvgRespTimeTestHandler avgRespTimeTestHandler = new AvgRespTimeTestHandler();
                RespTimeStdDevTestHandler respTimeStdDevTestHandler = new RespTimeStdDevTestHandler();
                PassedTransactionsTestHandler passedTransactionsTestHandler = new PassedTransactionsTestHandler();
                NthPercRespTimeTestHandler nthPercRespTimeTestHandler = new NthPercRespTimeTestHandler();
                ThroughputTestHandler throughputTestHandler = new ThroughputTestHandler();
                MaxRespTimeTestHandler maxRespTimeTestHandler = new MaxRespTimeTestHandler();
                MedianRespTimeTestHandler medianRespTimeTestHandler = new MedianRespTimeTestHandler();
                ServerSideTestHandler serverSideTestHandler = new ServerSideTestHandler();
                DefaultHandler defaultHandler = new DefaultHandler();

                avgRespTimeTestHandler.setNextHandler(respTimeStdDevTestHandler);
                respTimeStdDevTestHandler.setNextHandler(passedTransactionsTestHandler);
                passedTransactionsTestHandler.setNextHandler(nthPercRespTimeTestHandler);
                nthPercRespTimeTestHandler.setNextHandler(throughputTestHandler);
                throughputTestHandler.setNextHandler(maxRespTimeTestHandler);
                maxRespTimeTestHandler.setNextHandler(medianRespTimeTestHandler);
                medianRespTimeTestHandler.setNextHandler(serverSideTestHandler);
                serverSideTestHandler.setNextHandler(defaultHandler);

                avgRespTimeTestHandler.processHandler(element);
            }
        }
    }

    protected void throwExceptionIfNoTests() {
        if (LightningTests.size() == 0) {
            throw new XMLFileNoTestsException("No tests of expected type found in XML file");
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy