Package org.voltdb.regressionsuites

Source Code of org.voltdb.regressionsuites.TestMaterializedViewSuite

/* This file is part of VoltDB.
* Copyright (C) 2008-2010 VoltDB L.L.C.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/

package org.voltdb.regressionsuites;

import java.io.IOException;
import java.net.URL;
import junit.framework.Test;
import org.voltdb.BackendTarget;
import org.voltdb.VoltProcedure;
import org.voltdb.VoltTable;
import org.voltdb.VoltTableRow;
import org.voltdb.client.Client;
import org.voltdb.client.ProcCallException;
import org.voltdb.compiler.VoltProjectBuilder;
import org.voltdb.regressionsuites.matviewprocs.*;

public class TestMaterializedViewSuite extends RegressionSuite {

    // procedures used by these tests
    @SuppressWarnings("unchecked")
    static final Class<? extends VoltProcedure> PROCEDURES[] = (Class<? extends VoltProcedure>[])new Class<?>[] {
        AddPerson.class,
        DeletePerson.class,
        UpdatePerson.class,
        AggAges.class,
        SelectAllPeople.class,
        AggThings.class,
        AddThing.class,
        OverflowTest.class
    };

    public TestMaterializedViewSuite(String name) {
        super(name);
    }

    public void testInsertSinglePartition() throws IOException, ProcCallException {
        Client client = getClient();
        VoltTable[] results = null;

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);
       
        results = client.callProcedure("AddPerson", 1L, 1L, 31L, 27500.20, 7).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 2L, 31L, 28920.99, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 3L, 32L, 63250.01, -1).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(2, results[0].getRowCount());
        assert(results != null);
    }

    public void testDeleteSinglePartition() throws IOException, ProcCallException {
        Client client = getClient();
        VoltTable[] results = null;
       
        /*

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("AddPerson", 1L, 1L, 31L, 27500.20, 7).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 2L, 31L, 28920.99, 3).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("DeletePerson", 1L, 1L).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(1, results[0].getRowCount());
        while (results[0].advanceRow()) {
            assertEquals(31L, results[0].getLong(0));
            assertEquals(1L, results[0].getLong(1));
            assertTrue(Math.abs(results[0].getDouble(2) - 28920.99) < .01);
            assertEquals(3L, results[0].getLong(3));
        }
        assert(results != null);

        results = client.callProcedure("DeletePerson", 1L, 2L).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);
         */
    }

    public void testUpdateSinglePartition() throws IOException, ProcCallException {
        Client client = getClient();
        VoltTable[] results = null;
       
        /*

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("AddPerson", 1L, 1L, 31L, 27500.20, 7).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 2L, 31L, 28920.99, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 3L, 33L, 28920.99, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("UpdatePerson", 1L, 2L, 31L, 15000.00, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("UpdatePerson", 1L, 1L, 31L, 15000.00, 5).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assert(results != null);
        assertEquals(1, results.length);
        assertEquals(2, results[0].getRowCount());
        System.out.println(results[0].toString());
        VoltTableRow r1 = results[0].fetchRow(0);
        VoltTableRow r2 = results[0].fetchRow(1);
        assertEquals(31L, r1.getLong(0));
        assertEquals(2L, r1.getLong(1));
        assertTrue(Math.abs(r1.getDouble(2) - 30000.0) < .01);
        assertEquals(8L, r1.getLong(3));

        assertEquals(33L, r2.getLong(0));
        assertEquals(1L, r2.getLong(1));
        assertTrue(Math.abs(r2.getDouble(2) - 28920.99) < .01);
        assertEquals(3L, r2.getLong(3));
         */
    }

    public void testSinglePartitionWithPredicates() throws IOException, ProcCallException {
        Client client = getClient();
        VoltTable[] results = null;
       
        /*

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);

        // expecting the 2yr old won't make it
        results = client.callProcedure("AddPerson", 1L, 1L, 31L, 1000.0, 7).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 2L, 2L, 2000.0, 3).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(1, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("UpdatePerson", 1L, 1L, 3L, 1000.0, 6).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("UpdatePerson", 1L, 2L, 50L, 4000.0, 4).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(1, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("DeletePerson", 1L, 1L).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(1, results[0].getRowCount());
        assert(results != null);
        
         */
    }

    public void testMultiPartitionSimple() throws IOException, ProcCallException {
        Client client = getClient();
        VoltTable[] results = null;
       
        /*

        results = client.callProcedure("AggAges", 1L).getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("AddPerson", 1L, 1L, 31L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 1L, 2L, 2L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 2L, 3L, 23L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 2L, 4L, 23L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 2L, 5L, 35L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddPerson", 2L, 6L, 35L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("UpdatePerson", 1L, 2L, 32L, 1000.0, 3).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("DeletePerson", 2L, 6L).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggAges", 1L).getResults();
        assert(results != null);
        assertEquals(1, results.length);

        VoltTable results2[] = client.callProcedure("AggAges", 2L).getResults();
        assert(results != null);
        assertEquals(1, results2.length);

        int totalRows = results[0].getRowCount() + results2[0].getRowCount();
        // unfortunately they're both 4 in the hsql case, the fact that partitioning
        // can change behavior between backends if not used smartly should be corrected
        assertTrue((4 == totalRows) ||
                   (results[0].getRowCount() == 4) || (results2[0].getRowCount() == 4));
        
         */
    }

    public void testInsertReplicated() throws IOException, ProcCallException {
        Client client = getClient();
        VoltTable[] results = null;
       
        /*

        results = client.callProcedure("AggThings").getResults();
        assertEquals(1, results.length);
        assertEquals(0, results[0].getRowCount());
        assert(results != null);

        results = client.callProcedure("AddThing", 1L, 10L).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddThing", 2L, 12L).getResults();
        assertEquals(1, results.length);
        results = client.callProcedure("AddThing", 3L, 10L).getResults();
        assertEquals(1, results.length);

        results = client.callProcedure("AggThings").getResults();
        assertEquals(1, results.length);
        assertEquals(2, results[0].getRowCount());
        assert(results != null);
        
         */
    }

// FIXME
//    public void testInsertAndOverflowSum() throws IOException, ProcCallException {
//        if (isHSQL()) {
//            return;
//        }
//        Client client = getClient();
//        int invocationIndex = 0;
//        VoltTable[] results = client.callProcedure("OverflowTest", 0, 0, invocationIndex++).getResults();
//        results = client.callProcedure("OverflowTest", 2, 0, invocationIndex++).getResults();
//        results = client.callProcedure("OverflowTest", 1, 0, 0).getResults();
//        results[0].advanceRow();
//        long preRollbackValue = results[0].getLong(3);
//        boolean threwException = false;
//        try {
//            results = client.callProcedure("OverflowTest", 0, 0, invocationIndex++).getResults();
//        } catch (Exception e) {
//           threwException = true;
//        }
//        assertTrue(threwException);
//        results = client.callProcedure("OverflowTest", 1, 0, 0).getResults();
//        results[0].advanceRow();
//        assertEquals(preRollbackValue, results[0].getLong(3));
//        preRollbackValue = 0;
//        threwException = false;
//        while (!threwException) {
//            try {
//                results = client.callProcedure("OverflowTest", 2, 0, invocationIndex++).getResults();
//                results = client.callProcedure("OverflowTest", 1, 0, 0).getResults();
//                results[0].advanceRow();
//                preRollbackValue = results[0].getLong(2);
//            } catch (Exception e) {
//                threwException = true;
//                break;
//            }
//        }
//        results = client.callProcedure("OverflowTest", 1, 0, 0).getResults();
//        results[0].advanceRow();
//        assertEquals(preRollbackValue, results[0].getLong(2));
//    }

    /**
     * Build a list of the tests that will be run when TestTPCCSuite gets run by JUnit.
     * Use helper classes that are part of the RegressionSuite framework.
     * This particular class runs all tests on the the local JNI backend with both
     * one and two partition configurations, as well as on the hsql backend.
     *
     * @return The TestSuite containing all the tests to be run.
     */
    static public Test suite() {
        URL url = AddPerson.class.getResource("matviewsuite-ddl.sql");
        url.getPath();

        String schemaPath = url.getPath();

        // the suite made here will all be using the tests from this class
        MultiConfigSuiteBuilder builder = new MultiConfigSuiteBuilder(TestMaterializedViewSuite.class);

        /////////////////////////////////////////////////////////////
        // CONFIG #1: 1 Local Site/Partitions running on JNI backend
        /////////////////////////////////////////////////////////////

        // get a server config for the native backend with one sites/partitions
        //VoltServerConfig config = new LocalSingleProcessServer("matview-onesite.jar", 1, BackendTarget.NATIVE_EE_IPC);
        VoltServerConfig config = new LocalSingleProcessServer("matview-onesite.jar", 1, BackendTarget.NATIVE_EE_JNI);

        // build up a project builder for the workload
        VoltProjectBuilder project = new VoltProjectBuilder("matview");
        //project.setBackendTarget(BackendTarget.NATIVE_EE_IPC);
        project.addSchema(schemaPath);
        project.addTablePartitionInfo("PEOPLE", "PARTITION");
        project.addTablePartitionInfo("OVERFLOWTEST", "COL_1");
        project.addProcedures(PROCEDURES);

        // build the jarfile
        config.compile(project);

        // add this config to the set of tests to run
        builder.addServerConfig(config);

        /////////////////////////////////////////////////////////////
        // CONFIG #2: 2 Local Site/Partitions running on JNI backend
        /////////////////////////////////////////////////////////////

        // get a server config for the native backend with two sites/partitions
        config = new LocalSingleProcessServer("matview-twosites.jar", 2, BackendTarget.NATIVE_EE_JNI);

        // build the jarfile (note the reuse of the TPCC project)
        config.compile(project);

        // add this config to the set of tests to run
        builder.addServerConfig(config);

        /////////////////////////////////////////////////////////////
        // CONFIG #3: 1 Local Site/Partition running on HSQL backend
        /////////////////////////////////////////////////////////////

//        config = new LocalSingleProcessServer("matview-hsql.jar", 1, BackendTarget.HSQLDB_BACKEND);
//        config.compile(project);
//        builder.addServerConfig(config);

        // Cluster
        config = new LocalCluster("matview-cluster.jar", 2, 2,
                                  1, BackendTarget.NATIVE_EE_JNI);
        config.compile(project);
        builder.addServerConfig(config);

        return builder;
    }
}
TOP

Related Classes of org.voltdb.regressionsuites.TestMaterializedViewSuite

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.