/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
*/
/*************************************************************
*
*
* PURPOSE:
* test rasj with some queries
* @param --server s - use server s (default: localhost)
* @param --port p - use server port p (default: 7001)
* @param --database d - use database d (default: RASBASE)
* @param --user u - log in as user u (default: rasguest)
* @param --passwd p - log in with password p (default: rasguest)
*
* PREREQUISITES:
* - needs an HTTP server
* - needs write access to database
* - database must know type GreySet
*
*
* COMMENTS:
* - no parameter line error handling
* was formerly in rasj/odmg/test, this has been merged
************************************************************/
import rasj.*;
import rasj.global.*;
import org.odmg.*;
import rasj.odmg.*;
import java.util.*;
import java.io.*;
public class TestOdmg implements RasGlobalDefs
{
/**
* prefixes for test output
**/
static final String PREFIX_PROGRAM = "+++ +++ +++ ";
static final String PREFIX_TESTSET = "+++ +++ ";
static final String PREFIX_TESTCASE = "+++ ";
/**
* std error tag printed if a test fails
**/
static final String ERROR_TAG = "ERROR: ";
/**
* default values (override with cmd line option)
**/
static final String DEFAULT_HOST = "localhost";
static final int DEFAULT_PORT = 7001;
static final String DEFAULT_BASE = "RASBASE";
static final String DEFAULT_USER = "rasguest";
static final String DEFAULT_PASSWD = "rasguest";
public static void main(String[] args) throws Exception
{
String serv = DEFAULT_HOST;
int port = DEFAULT_PORT;
String base = DEFAULT_BASE;
String user = DEFAULT_USER;
String passwd = DEFAULT_PASSWD;
boolean wrongUsage = false; // error in cmd line params?
RasImplementation myImp = null;
for (int i=args.length-1; i>=0; i--)
{
if (args[i].equals("--server"))
serv = args[i+1];
else if (args[i].equals("--port"))
{
try
{
port = Integer.parseInt(args[i+1]);
}
catch(Exception e)
{
wrongUsage = true;
}
}
else if (args[i].equals("--database"))
base = args[i+1];
else if (args[i].equals("--user"))
user = args[i+1];
else if (args[i].equals("--passwd"))
passwd = args[i+1];
}
if (wrongUsage)
{
System.out.println( "Usage: ODMGtest [--server s] [--port p] [--database d] [--user u] [--passwd p]" );
System.out.println( "defaults: server=" + DEFAULT_HOST + ", port=" + DEFAULT_PORT + ", database=" + DEFAULT_BASE
+ ", user=" + DEFAULT_USER + ", passwd=" + DEFAULT_PASSWD );
System.exit(-1);
}
System.out.println( "rasdaman system test v5.1revC: testing ODMG queries." );
System.out.println( PREFIX_PROGRAM + "system test started, using server " + serv + ", port " + port + ", database " + base + ", user=" + user + ", passwd=" + passwd );
myImp = new RasImplementation("http://" + serv + ":" + port);
// START tests ----------------------------------------------
testQueries( myImp, base );
// END tests ------------------------------------------------
System.out.println( PREFIX_PROGRAM + "system test done." );
return;
} // main()
/**
* test database queries
* any eventual exception that is not caught here is an error, and will cause an abort
**/
static void testQueries( RasImplementation imp, String database ) throws Exception
{
System.out.println( PREFIX_TESTSET + "testing queries started." );
// objectTest(); // - just to test setObjectName() which now verifies that the name is a valid identifier
Database mydb = null;
Transaction myta = null;
RasGMArray myMDD = null;
OQLQuery myQuery = null;
/*********************
* test update query *
*********************/
// create some test data
try
{
System.out.println("Start creating test arrays ...");
myMDD = new RasGMArray(new RasMInterval("[1:400,1:400]"),1);
byte[] mydata = new byte[160000];
for(int y=0; y<400; y++)
{
for(int x=0; x<400; x++)
{
if((x>99 && x<151) || (x>299 && x<351))
mydata[y*399+x]=100;
else
mydata[y*399+x]=0;
}
}
myMDD.setArray(mydata);
myMDD.setObjectTypeName("GreyImage");
RasStorageLayout myLayout = new RasStorageLayout();
//myLayout.setTileSize(640000);
myLayout.setTileDomain("[1:100,1:70]");
myMDD.setStorageLayout(myLayout);
System.out.println("Created Test Data:");
System.out.println(myMDD);
}
catch ( Exception e )
{
System.out.println("ERROR: ");
System.out.println(e.getMessage());
System.exit(-1);
}
// now access the database and start a transaction
try {
mydb = imp.newDatabase();
System.out.println("Open Database ...");
mydb.open( database, Database.OPEN_READ_WRITE );
System.out.println(" ok.");
myta = imp.newTransaction();
System.out.println("Begin transaction ...");
myta.begin();
System.out.println(" ok.");
}
catch ( Exception e ) {
System.out.println("ERROR: ");
System.out.println(e.getMessage());
if(myta.isOpen())
{
System.out.println("Abort transaction ...");
myta.abort();
}
System.out.println("Close database ...");
try {
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e2 ) {
}
System.out.println("Exiting...");
System.exit(-1);
}
// create the test collection
try {
System.out.println("Create a new test collection ...");
myQuery = imp.newOQLQuery();
myQuery.create("create collection testCollection GreySet");
//myQuery.create("create collection $1 GreySet");
//myQuery.bind("testCollection");
myQuery.execute();
myta.commit();
myta.begin();
System.out.println(" ok.");
}
catch ( Exception e) {
System.out.println("ERROR: ");
System.out.println(e.getMessage());
System.out.println("Try to remove the test collection ...");
try {
myQuery.create("drop collection testCollection");
myQuery.execute();
myta.commit();
}
catch ( Exception e2 ) {
}
if(myta.isOpen())
{
System.out.println("Abort transaction ...");
myta.abort();
}
System.out.println("Close database ...");
try {
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e3 ) {
}
System.out.println("Exiting...");
System.exit(-1);
}
// testquery with empty result
/*
try {
System.out.println("Define a testquery with an empty result... ");
myQuery.create("select a from ImgRGBA as a where oid(a) <= 0");
System.out.println("Send the query ...");
DSet myResult = (DSet) myQuery.execute();
Iterator iter = myResult.iterator();
System.out.println("Number of results: " + myResult.size());
while(iter.hasNext())
{
System.out.println("Ergebnis:");
System.out.println(iter.next());
}
System.out.println(" ok.");
System.out.println("Commit transaction ...");
System.out.println(" ok.");
}
catch ( Exception e ) {
System.out.println("ERROR: ");
System.out.println(e.getMessage());
if(myta.isOpen())
{
System.out.println("Abort transaction ...");
myta.abort();
}
System.out.println("Close database ...");
try {
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e2 ) {
}
System.out.println("Exiting...");
System.exit(-1);
}
*/
// now insert MDDS and commit
try {
System.out.println("Define the update query and bind the parameters ...");
myQuery.create("insert into testCollection VALUES $1");
//myQuery.create("insert into testCollection VALUES $1");
myQuery.bind(myMDD);
System.out.println(" ok.");
System.out.println("Send the query ...");
myQuery.execute();
System.out.println(" ok.");
System.out.println("Commit transaction ...");
myta.commit();
System.out.println(" ok.");
}
catch ( Exception e ) {
System.out.println("ERROR: ");
System.out.println(e.getMessage());
if(myta.isOpen())
{
System.out.println("Abort transaction ...");
myta.abort();
}
System.out.println("Close database ...");
try {
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e2 ) {
}
System.out.println("Exiting...");
System.exit(-1);
}
// start new transaction and todo: read back the testimage
try {
System.out.println("Start new transaction ...");
myta.begin();
myQuery = imp.newOQLQuery();
myQuery.create("select testCollection from testCollection");
//myQuery.create("create collection $1 GreySet");
//myQuery.bind("testCollection");
myQuery.execute();
myta.commit();
System.out.println(" ok.");
myta.begin();
}
catch ( Exception e ) {
System.out.println("ERROR: ");
System.out.println(e.getMessage());
if(myta.isOpen())
{
System.out.println("Abort transaction ...");
myta.abort();
}
System.out.println("Close database ...");
try {
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e2 ) {
}
System.out.println("Exiting...");
System.exit(-1);
}
// todo: compare to the original image
// drop test collection
try {
System.out.println("Drop test collection ...");
myQuery = imp.newOQLQuery();
myQuery.create("drop collection testCollection");
myQuery.execute();
myta.commit();
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e) {
System.out.println("ERROR: ");
System.out.println(e.getMessage());
if(myta.isOpen())
{
System.out.println("Abort transaction ...");
myta.abort();
}
System.out.println("Close database ...");
try {
mydb.close();
System.out.println(" ok.");
}
catch ( Exception e2 ) {
}
System.out.println("Exiting...");
System.exit(-1);
}
System.out.println( PREFIX_TESTSET + "testing queries done.\n" );
return;
} // testQueries()
public static void objectTest()
{
System.out.println("Set object name test - in");
RasObject dummy = new RasObject();
dummy.setObjectName("goodName");
System.out.println("Set name=" + dummy.getObjectName());
dummy.setObjectName("bad-Name");
System.out.println("Set name=" + dummy.getObjectName());
System.out.println("Set object name test - out");
}
} // TestOdmg