view gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java @ 1065:cf421645a2d3

Made cache statistics available as MBeans (eg in JConsole). gnv-artifacts/trunk@1157 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 04 Jun 2010 08:47:52 +0000
parents c4156275c1e1
children f953c9a559d8
line wrap: on
line source
package de.intevation.gnv.artifacts;

import de.intevation.artifactdatabase.Config;
import de.intevation.artifactdatabase.DefaultCallMeta;
import de.intevation.artifactdatabase.DefaultPreferredLocale;
import de.intevation.artifactdatabase.FactoryBootstrap;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallContext;
import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.PreferredLocale;

import de.intevation.gnv.utils.ArtifactXMLUtilities;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import junit.framework.TestCase;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

import org.w3c.dom.Document;

import org.xml.sax.SAXException;

/**
 * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a>
 *
 */
public abstract class GNVArtifactsTestCaseBase extends TestCase {

    /**
     * the logger, used to log exceptions and additonaly information
     */
    private static Logger log = null;

    static {
        BasicConfigurator.configure();
        log = Logger.getLogger(GNVArtifactsTestCaseBase.class);
    }

    private String configurationDir = "doc/conf";

    protected FactoryBootstrap bootstrap = null;

    /**
     * Constructor
     */
    public GNVArtifactsTestCaseBase() {
    }

    /**
     * Constructor
     * @param name
     */
    public GNVArtifactsTestCaseBase(String name) {
        super(name);
    }

    public abstract void testArtifact();
    /**
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        log.debug("GNVArtifactsTestCase.setUp");
        super.setUp();
        log.info(Config.CONFIG_DIR + " ==> " + configurationDir);
        System.setProperty(Config.CONFIG_DIR, configurationDir);
        log.info("Bootstrap wird initialisiert.");
        bootstrap = new FactoryBootstrap();
        bootstrap.boot();
    }

    protected void writeDocument2Log(Document document) {
        log.debug(new ArtifactXMLUtilities().writeDocument2String(document));
    }

    protected Document readDocument(String fileName) {
        Document returnValue = null;
        try {
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
                    .newInstance();
            docBuilderFactory.setNamespaceAware(true);
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            returnValue = docBuilder.parse(new File(fileName));
        } catch (ParserConfigurationException e) {
            log.error(e, e);
        } catch (SAXException e) {
            log.error(e, e);
        } catch (IOException e) {
            log.error(e, e);
        }
        return returnValue;
    }

    protected void check4ExceptionReport(Document document) throws Exception {
        document = new ArtifactXMLUtilities().reInitDocument(document);
        String message = Config.getStringXPath(document,
                "/exceptionreport/exception");
        if (message != null) {
            throw new Exception(message);
        }
    }

    /**
     * @return
     */
    protected CallContext createCallContext(ArtifactFactory artifactFactory) {
        CallMeta callMeta = new DefaultCallMeta(
                new PreferredLocale[] { new DefaultPreferredLocale("de_DE",
                        1.0f) });
        CallContext cc = new TestCallContext(bootstrap.getContext(), callMeta,artifactFactory);
        return cc;
    }

    /**
     * @param artifact
     * @param cc
     * @param describeDocument TODO
     * @throws Exception
     */
    protected void doNextStep(Artifact artifact, CallContext cc,
                            String feedDocument, String advanceDocument, Document describeDocument)
                                                                        throws Exception {
        Document outputData = artifact.describe(describeDocument,cc);
//      this.writeDocument2Log(outputData);
        outputData = artifact.feed(this.readDocument(feedDocument), cc);
        this.check4ExceptionReport(outputData);
        outputData = artifact.advance(this.readDocument(advanceDocument), cc);
//        this.writeDocument2Log(outputData);
        this.check4ExceptionReport(outputData);

    }

    protected void createFile(byte[] content, String fileName) {
        try {
            FileOutputStream fos = new FileOutputStream(new File(fileName));
            ByteArrayInputStream bis = new ByteArrayInputStream(content);
            byte[] buf = new byte[4096];
            while (bis.read(buf) > 0) {
                fos.write(buf);
            }
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            log.error(e, e);
        } catch (IOException e) {
            log.error(e, e);
        }
    }

    /**
     * @param artefactName
     */
    protected ArtifactFactory getArtifactFactory(String artefactName) {
        log.debug("GNVArtifactsTestCase.getArtifactFactory");
        ArtifactFactory[] artifactFactories = bootstrap.getArtifactFactories();
        for (int i = 0; i < artifactFactories.length; i++) {
            if (artifactFactories[i].getName().equals(artefactName)) {
                log.debug("ArtifactFactory wurde gefunden.");
                return artifactFactories[i];
            }
        }
        return null;
    }

    /**
     * @param artifactFactory
     * @return
     */
    protected Artifact createArtifact(ArtifactFactory artifactFactory) {
        Document setupData = null;
        Artifact artifact = artifactFactory.createArtifact(
                                            "" + System.currentTimeMillis(),
                                            bootstrap.getContext(),
                                            setupData);
        assertNotNull(artifact);
        log.debug("Artifact is available");
        return artifact;
    }


}

http://dive4elements.wald.intevation.org