Package com.aconex.scrutineer.functional

Source Code of com.aconex.scrutineer.functional.ScrutineerNumericIntegrationTest

package com.aconex.scrutineer.functional;

import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
import static org.mockito.Mockito.verify;

import java.io.InputStream;
import java.io.PrintStream;
import java.net.URL;

import javax.sql.DataSource;

import org.dbunit.DataSourceBasedDBTestCase;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.XmlDataSet;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.node.Node;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import com.aconex.scrutineer.Scrutineer;
import com.aconex.scrutineer.elasticsearch.ElasticSearchTestHelper;
import com.aconex.scrutineer.jdbc.HSQLHelper;
import com.google.common.io.ByteStreams;

public class ScrutineerNumericIntegrationTest extends DataSourceBasedDBTestCase {

    private static final String CLUSTER_NAME = "scrutineernumericintegrationtest";
    private HSQLHelper hsqlHelper = new HSQLHelper();
    private Node node;
    private Client client;

    @Mock
    PrintStream printStream;


    public void testShouldScrutinizeStreamsEffectively() {
        String[] args = {"--jdbcURL", String.format("jdbc:hsqldb:%s", HSQLHelper.INMEM_TEST_DB),
                "--jdbcDriverClass", org.hsqldb.jdbc.JDBCDriver.class.getName(),
                "--jdbcUser", "sa",
                //"--jdbcPassword", "",
                "--clusterName", CLUSTER_NAME,
                "--sql", "select id,version from test order by CAST(id AS INTEGER)",
                "--indexName", "test",
                "--numeric"
        };


        System.setErr(printStream);

        Scrutineer.main(args);

        System.err.println(printStream);

        verify(printStream).println("NOTINSECONDARY\t222\t20");
        verify(printStream).println("MISMATCH\t33\t30\tsecondaryVersion=42");
        verify(printStream).println("NOTINPRIMARY\t4\t40");


    }

    @Override
    protected void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        setupHSQLDB();
        setupElasticSearchConnection();
        indexSetupStateForElasticSearch();
        super.setUp();
    }

    private void setupElasticSearchConnection() {
        this.node = nodeBuilder().clusterName(CLUSTER_NAME).node();
        this.client = node.client();
    }

    private void setupHSQLDB() throws Exception {
        hsqlHelper = new HSQLHelper();
        hsqlHelper.createHsqldbTables(getDataSet(), getDataSource().getConnection());
    }


    private void indexSetupStateForElasticSearch() throws Exception {
        new ElasticSearchTestHelper(client).deleteIndexIfItExists("test");
        BulkRequest bulkRequest = new BulkRequestBuilder(client).request();
        URL bulkIndexRequest = this.getClass().getResource("es-numericbulkindex.json");
        byte[] data = ByteStreams.toByteArray(bulkIndexRequest.openStream());
        bulkRequest.add(data, 0, data.length, true);
        BulkResponse bulkResponse = client.bulk(bulkRequest).actionGet();
        if (bulkResponse.hasFailures()) {
            throw new RuntimeException("Failed to index data needed for test. " + bulkResponse.buildFailureMessage());
        }
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
        hsqlHelper.shutdownHSQL(getDataSource());
        closeElasticSearch();
    }

    private void closeElasticSearch() {
        if (client != null) {
            client.close();
        }
        if (node != null) {
            node.close();
        }
    }


    @Override
    protected DataSource getDataSource() {
        return hsqlHelper.setupHSQLDBDataSource();
    }

    @Override
    protected IDataSet getDataSet() throws Exception {
        InputStream resourceAsStream = this.getClass().getResourceAsStream("fullnumericintegrationtest.xml");
        return new XmlDataSet(resourceAsStream);
    }
}
TOP

Related Classes of com.aconex.scrutineer.functional.ScrutineerNumericIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.