You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2006/12/02 19:50:27 UTC
svn commit: r481602 - in
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe:
direct/ direct/Standard.java test/ test/OETest.java
test/OperationsTester.java test/_Suite.java
Author: djd
Date: Sat Dec 2 10:50:26 2006
New Revision: 481602
URL: http://svn.apache.org/viewvc?view=rev&rev=481602
Log:
DERBY-2094 (partial) Initial partial implementation of the order entry test transactions using the
defined behaviour from the appendix TPC-C specification. Only stock level added.
Also added a JUnit testing frame work to test the functionality of the operations.
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java (with props)
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OETest.java (with props)
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OperationsTester.java (with props)
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/_Suite.java (with props)
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java?view=auto&rev=481602
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java Sat Dec 2 10:50:26 2006
@@ -0,0 +1,206 @@
+/*
+ *
+ * Derby - Class org.apache.derbyTesting.system.oe.direct.Standard
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ */
+package org.apache.derbyTesting.system.oe.direct;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.derbyTesting.system.oe.client.Display;
+import org.apache.derbyTesting.system.oe.client.Operations;
+
+/**
+ * Implement the transactions following the TPC-C specification
+ * using client side prepared statements. Thus all the logic
+ * is contained within this class. The client, through this
+ * object, holds onto PreparedStatements for all the SQL
+ * for its lifetime.
+ * <P>
+ * This standard implementation is based upon the sample
+ * programs in the appendix of the TPC-C specification.
+ * <P>
+ * More specific direct (client side) implementations
+ * could extend this class overriding methods as needed.
+ */
+public class Standard implements Operations {
+
+ private final Connection conn;
+
+ /**
+ * Create an instance of this implementation.
+ * Connection will be set to non auto commit
+ * mode and SERIZIALZABLE isolation.
+ */
+ public Standard(Connection conn) throws SQLException
+ {
+ this.conn = conn;
+ conn.setAutoCommit(false);
+ conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
+ }
+
+ /**
+ * Prepare all statements as forward-only, read-only, close at commit.
+ */
+ PreparedStatement prepare(String sql) throws SQLException
+ {
+ return conn.prepareStatement(sql,
+ ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ }
+
+ /*
+ * Stock Level transaction.
+ * Described in section 2.8.2.
+ * SQL based upon sample prgram in appendix A.5.
+ */
+
+ private PreparedStatement sl1;
+ private PreparedStatement sl2;
+
+ public void setupStockLevel() throws Exception {
+ sl1 = prepare(
+ "SELECT D_NEXT_O_ID FROM DISTRICT WHERE D_W_ID = ? AND D_ID = ?");
+
+ sl2 = prepare(
+ "SELECT COUNT(DISTINCT(S_I_ID)) FROM ORDERLINE, STOCK " +
+ "WHERE OL_W_ID = ? AND OL_D_ID = ? " +
+ "AND OL_O_ID < ? AND OL_O_ID >= ? " +
+ "AND S_W_ID = ? AND S_I_ID = OL_I_ID AND S_QUANTITY < ?");
+ }
+
+ public void stockLevel(Display display, Object displayData, short w,
+ short d, int threshold) throws Exception {
+
+ int isolation = conn.getTransactionIsolation();
+
+ int level;
+ try {
+
+ try {
+
+ conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+
+ sl1.setShort(1, w);
+ sl1.setShort(2, d);
+
+ sl2.setShort(1, w);
+ sl2.setShort(2, d);
+
+ sl2.setShort(5, w);
+ sl2.setInt(6, threshold);
+
+ ResultSet rs = sl1.executeQuery();
+
+ rs.next();
+ int nextOrder = rs.getInt(1);
+ rs.close();
+
+ sl2.setInt(3, nextOrder);
+ sl2.setInt(4, nextOrder - 20);
+
+ rs = sl2.executeQuery();
+ rs.next();
+ level = rs.getInt(1);
+ rs.close();
+
+ conn.commit();
+ } finally {
+ conn.setTransactionIsolation(isolation);
+ }
+
+ } catch (SQLException sqle) {
+
+ conn.rollback();
+ throw sqle;
+ }
+
+ if (display != null)
+ display.displayStockLevel(displayData, w, d, threshold, level);
+ }
+
+ /*
+ * Order Status transaction.
+ */
+
+ public void setupOrderStatus() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+ public void orderStatus(Display display, Object displayData, short w,
+ short d, String customerLast) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void orderStatus(Display display, Object displayData, short w,
+ short d, int c) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setupPayment() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void payment(Display display, Object displayData, short w, short d,
+ short cw, short cd, String customerLast, String amount)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void payment(Display display, Object displayData, short w, short d,
+ short cw, short cd, int c, String amount) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setupNewOrder() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+ public void newOrder(Display display, Object displayData, short w, short d,
+ int c, int[] items, short[] quantities, short[] supplyW)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+ public void setupScheduleDelivery() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+ public void scheduleDelivery(Display display, Object displayData, short w,
+ short carrier) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setupDelivery() throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+ public int delivery() throws Exception {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OETest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OETest.java?view=auto&rev=481602
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OETest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OETest.java Sat Dec 2 10:50:26 2006
@@ -0,0 +1,115 @@
+/*
+ *
+ * Derby - Class org.apache.derbyTesting.system.oe.test.OETest
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ */
+package org.apache.derbyTesting.system.oe.test;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.PrivilegedActionException;
+import java.sql.SQLException;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.system.oe.client.Operations;
+import org.apache.derbyTesting.system.oe.direct.Standard;
+
+/**
+ * Test the basic functionality of the Order Entry test
+ * as a functional test, to ensure that changes to the
+ * database do not break the performance test.
+ *
+ */
+public class OETest extends BaseJDBCTestCase {
+
+ public OETest(String name) {
+ super(name);
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite("Order Entry");
+
+ suite.addTest(new OETest("testSchema"));
+ suite.addTest(new OETest("testPrimaryKey"));
+ suite.addTest(new OETest("testForeignKey"));
+ suite.addTest(new OETest("testIndex"));
+
+ suite.addTest(new OETest("testStandardOperations"));
+
+ return new CleanDatabaseTestSetup(suite);
+ }
+
+ /**
+ * Test setting up the base tables.
+ */
+ public void testSchema() throws UnsupportedEncodingException, SQLException, PrivilegedActionException, IOException
+ {
+ script("schema.sql");
+ }
+ /**
+ * Test setting up the primary keys.
+ */
+ public void testPrimaryKey() throws UnsupportedEncodingException, SQLException, PrivilegedActionException, IOException
+ {
+ script("primarykey.sql");
+ }
+ /**
+ * Test setting up the foreign keys.
+ */
+ public void testForeignKey() throws UnsupportedEncodingException, SQLException, PrivilegedActionException, IOException
+ {
+ script("foreignkey.sql");
+ }
+ /**
+ * Test setting up the remaining indexes.
+ */
+ public void testIndex() throws UnsupportedEncodingException, SQLException, PrivilegedActionException, IOException
+ {
+ script("index.sql");
+ }
+
+ /**
+ * Test the Standard implementations of the business transactions.
+ */
+ public void testStandardOperations() throws Exception
+ {
+ operationsTest(new Standard(getConnection()));
+ }
+ /**
+ * Run a standard set of tests against an implementation
+ * of Operations using the OperationsTester class.
+ */
+ private static void operationsTest(Operations ops) throws Exception
+ {
+ OperationsTester tester = new OperationsTester(ops);
+ tester.test();
+ }
+
+ /**
+ * Run a Order Entry script.
+ */
+ private void script(String name) throws UnsupportedEncodingException, SQLException, PrivilegedActionException, IOException {
+
+ String script = "org/apache/derbyTesting/system/oe/schema/" + name;
+ int errorCount = runScript(script,"US-ASCII");
+ assertEquals("Errors in script ",0, errorCount);
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OETest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OperationsTester.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OperationsTester.java?view=auto&rev=481602
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OperationsTester.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OperationsTester.java Sat Dec 2 10:50:26 2006
@@ -0,0 +1,72 @@
+/*
+ *
+ * Derby - Class org.apache.derbyTesting.system.oe.test.OperationsTester
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ */
+package org.apache.derbyTesting.system.oe.test;
+
+import org.apache.derbyTesting.system.oe.client.Operations;
+
+/**
+ * Test an implementation of Operations.
+ * Currently just tests the setup but as more
+ * code is added the implemetations of the transactions
+ * will be added.
+ */
+class OperationsTester {
+
+ private final Operations ops;
+
+ OperationsTester(Operations ops) {
+ this.ops = ops;
+ }
+
+ void test() throws Exception
+ {
+ testStockLevel();
+ testOrderStatus();
+ testPayment();
+ testNewOrder();
+ testScheduleDelivery();
+ testDelivery();
+ }
+
+ private void testStockLevel() throws Exception
+ {
+ ops.setupStockLevel();
+ }
+ private void testOrderStatus() throws Exception
+ {
+ ops.setupOrderStatus();
+ }
+ private void testPayment() throws Exception
+ {
+ ops.setupPayment();
+ }
+ private void testNewOrder() throws Exception
+ {
+ ops.setupNewOrder();
+ }
+ private void testScheduleDelivery() throws Exception
+ {
+ ops.setupScheduleDelivery();
+ }
+ private void testDelivery() throws Exception
+ {
+ ops.setupDelivery();
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/OperationsTester.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/_Suite.java?view=auto&rev=481602
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/_Suite.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/_Suite.java Sat Dec 2 10:50:26 2006
@@ -0,0 +1,44 @@
+/*
+ *
+ * Derby - Class org.apache.derbyTesting.system.oe.test._Suite
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ */
+package org.apache.derbyTesting.system.oe.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseTestCase;
+
+public class _Suite extends BaseTestCase {
+
+ /**
+ * Use suite method instead.
+ */
+ private _Suite(String name) {
+ super(name);
+ }
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite("oe");
+
+ suite.addTest(OETest.suite());
+
+ return suite;
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/test/_Suite.java
------------------------------------------------------------------------------
svn:eol-style = native