Package org.apache.agila.impl.dao

Source Code of org.apache.agila.impl.dao.DAOTestCaseSupport

/*
* Copyright 2004 The Apache Software Foundation.
*
* Licensed 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.agila.impl.dao;

import org.apache.agila.util.JDBCUtil;
import org.apache.agila.util.XMLUtil;
import org.apache.agila.engine.Instance;
import org.apache.agila.engine.InstanceID;
import org.apache.agila.engine.Token;
import org.apache.agila.engine.TokenID;
import org.apache.agila.impl.TokenImpl;
import org.apache.agila.impl.dao.AgilaDAO;
import org.apache.agila.model.BusinessProcess;
import org.apache.agila.model.BusinessProcessID;
import org.apache.agila.model.NodeID;
import org.apache.agila.services.InstanceServiceInfo;
import org.apache.agila.services.task.Task;
import org.apache.agila.services.task.TaskID;
import org.apache.agila.services.task.TaskImpl;
import org.apache.agila.services.user.GroupID;
import org.apache.agila.services.user.UserID;
import org.apache.agila.services.user.UserInfo;
import org.apache.agila.services.user.GroupID;

import junit.framework.TestCase;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class DAOTestCaseSupport extends TestCase {

    protected AgilaDAO dao;


    public void testAddGraph() {
        BufferedReader reader = new BufferedReader( new InputStreamReader(
            getClass().getClassLoader().getResourceAsStream(
                "org/apache/agila/LeaveApplication.xml" ) ) );
        BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

        BusinessProcessID businessProcessID = dao.addGraph(
            businessProcess );
        assertNotNull( "BusinessProcessID should not be null",
            businessProcessID );
    }

    public void testGetGraphIDByName() {
        // Cleanup DB before testing so that we don't have any conflicting
        // results
        cleanUpBusinessProcess();

        BufferedReader reader = new BufferedReader( new InputStreamReader(
            getClass().getClassLoader().getResourceAsStream(
                "org/apache/agila/LeaveApplication.xml" ) ) );
        BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

        BusinessProcessID businessProcessID = dao.addGraph(
            businessProcess );

        assertEquals( businessProcessID, dao.getGraphIDByName(
            businessProcess.getName() ) );
    }

    public void testGetGraphByID() {
        BufferedReader reader = new BufferedReader( new InputStreamReader(
            getClass().getClassLoader().getResourceAsStream(
                "org/apache/agila/LeaveApplication.xml" ) ) );
        BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

        BusinessProcessID businessProcessID = dao.addGraph(
            businessProcess );

        BusinessProcess bpFromQuery = dao.getGraphByID( businessProcessID );

        assertEquals( businessProcessID, bpFromQuery.getBusinessProcessID() );
        assertEquals( businessProcess.getName(), bpFromQuery.getName() );
        assertEquals( businessProcess.getGraphAsXML(), bpFromQuery.getGraphAsXML() );
    }

    public void testGetAllProcessGraphs() {

        // Populate the bpm_businessprocess table just in case it is empty
        for( int i = 0; i < 10; i++ ) {
            BufferedReader reader = new BufferedReader( new InputStreamReader(
                getClass().getClassLoader().getResourceAsStream(
                "org/apache/agila/LeaveApplication.xml" ) ) );
            BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

            BusinessProcessID businessProcessID = dao.addGraph(
                businessProcess );
        }

        List graphs = dao.getAllProcessGraphs();
        assertTrue( graphs.size() >= 10 );
    }

    public void testNewInstance() {
        BufferedReader reader = new BufferedReader( new InputStreamReader(
            getClass().getClassLoader().getResourceAsStream(
            "org/apache/agila/LeaveApplication.xml" ) ) );
        BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

        BusinessProcessID businessProcessID = dao.addGraph(
            businessProcess );

        Map appParams = new HashMap();
        appParams.put( "numdays", "40" );
        appParams.put( "reason", "Expedition to Mount Everest" );
        Instance instance = dao.newInstance( businessProcessID, appParams );
        assertNotNull( "Instance should not be null", instance );
    }

    public void testGetInstanceServiceInfo() {
        InstanceServiceInfo instanceServiceInfo = dao.getInstanceServiceInfo();

        assertNotNull( "InstanceServiceInfo should not be null", instanceServiceInfo );
    }

    public void testSaveInstance() {
        BufferedReader reader = new BufferedReader( new InputStreamReader(
            getClass().getClassLoader().getResourceAsStream(
            "org/apache/agila/LeaveApplication.xml" ) ) );
        BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

        BusinessProcessID businessProcessID = dao.addGraph(
            businessProcess );

        Map appParams = new HashMap();
        appParams.put( "numdays", "40" );
        appParams.put( "reason", "Expedition to Mount Everest" );
        Instance instance = dao.newInstance( businessProcessID, appParams );

        instance.setStatus( Instance.STATUS_SUSPENDED );
        dao.saveInstance( instance );

        Instance retrievedInstance = dao.getInstanceByID( instance.getInstanceID() );

        assertEquals( instance.getInstanceID(), retrievedInstance.getInstanceID() );
        assertEquals( instance.getBusinessProcessID(), retrievedInstance.getBusinessProcessID() );
        assertEquals( instance.getGraphName(), retrievedInstance.getGraphName() );
        assertEquals( Instance.STATUS_SUSPENDED, retrievedInstance.getStatus() );
        assertEquals( instance.getStartDate(), retrievedInstance.getStartDate() );
        assertEquals( instance.getLastStepDate(), retrievedInstance.getLastStepDate() );
    }

    public void testListInstanceInfo() {
        List instances = dao.listInstanceInfo();
        assertNotNull( "instances should not be null", instances );
    }

    public void testInsertTask() {
        TaskImpl task = new TaskImpl();

        task.setUserID( new UserID( 1 ) );
        task.setTaskDescription( "Task Description" );
        task.setTaskExpirationDate( new Date() );
        task.setSourceTokenID( new TokenID( 1 ) );
        task.setTaskStatus( Task.TASK_INCOMPLETE );
        task.setInstanceID( new InstanceID( 1 ) );

        TaskID taskID = dao.insertTask( task );
        assertNotNull( "TaskID should not be null", taskID );
    }

    public void testUpdateTask() {
        TaskImpl task = new TaskImpl();

        task.setTaskID( new TaskID( 1 ) );
        task.setUserID( new UserID( 1 ) );
        task.setTaskDescription( "Task Description" );
        task.setTaskExpirationDate( new Date() );
        task.setSourceTokenID( new TokenID( 1 ) );
        task.setTaskStatus( Task.TASK_INCOMPLETE );
        task.setInstanceID( new InstanceID( 1 ) );

        TaskID taskID = dao.insertTask( task );
        task.setTaskID( taskID );
        task.setUserID( new UserID( 2 ) );
        task.setTaskDescription( "Task Description 2" );
        task.setSourceTokenID( new TokenID( 2 ) );
        task.setTaskStatus( Task.TASK_COMPLETE );
        task.setInstanceID( new InstanceID( 2 ) );

        taskID = dao.updateTask( task );
        assertNotNull( "TaskID should not be null", taskID );

        // TODO check for the rest of the fields
    }

    public void testGetTaskByID() {
        TaskImpl task = new TaskImpl();

        task.setUserID( new UserID( 1 ) );
        task.setTaskDescription( "Task Description" );
        task.setTaskExpirationDate( new Date() );
        task.setSourceTokenID( new TokenID( 1 ) );
        task.setTaskStatus( Task.TASK_INCOMPLETE );
        task.setInstanceID( new InstanceID( 1 ) );

        TaskID taskID = dao.insertTask( task );
        task.setTaskID( taskID );

        Task retrievedTask = dao.getTaskByID( taskID );

        assertEquals( task.getTaskID(), retrievedTask.getTaskID() );
        assertEquals( task.getTaskDescription(), retrievedTask.getTaskDescription() );
        assertEquals( task.getSourceTokenID(), retrievedTask.getSourceTokenID() );
        assertEquals( task.getTaskStatus(), retrievedTask.getTaskStatus() );
        assertEquals( task.getInstanceID(), retrievedTask.getInstanceID() );
    }

    public void testGetTasksForUser() {
        List tasks = dao.getTasksForUser( new UserID( 1 ), Task.TASK_INCOMPLETE );
        assertNotNull( "Tasks should not be null", tasks );
        assertTrue( tasks.size() > 0 );
    }

    public void testGetTasksForTeams() {
        GroupID groupID = new GroupID( 1 );
        TaskImpl task = new TaskImpl();

        task.setTeamID( groupID );
        task.setTaskDescription( "Task Description" );
        task.setTaskExpirationDate( new Date() );
        task.setSourceTokenID( new TokenID( 1 ) );
        task.setTaskStatus( Task.TASK_INCOMPLETE );
        task.setInstanceID( new InstanceID( 1 ) );

        dao.insertTask( task );

        List tasks = dao.getTasksForGroups(new GroupID[] { groupID, new GroupID( 2 )}, Task.TASK_INCOMPLETE );
        assertNotNull( "Tasks should not be null", tasks );
        assertTrue("No tasks found for team!", tasks.size() > 0);
    }

    public void testLockAndThenUnlockTask() {
        GroupID groupID = new GroupID( 1 );

        TaskImpl task = new TaskImpl();

        task.setTeamID( groupID );
        task.setTaskDescription( "Task Description" );
        task.setTaskExpirationDate( new Date() );
        task.setSourceTokenID( new TokenID( 1 ) );
        task.setTaskStatus( Task.TASK_INCOMPLETE );
        task.setInstanceID( new InstanceID( 1 ) );

        TaskID taskID = dao.insertTask( task );


        boolean answer = dao.lockTaskForUser(taskID, new UserID(1));
        assertTrue("Managed to lock task", answer);

        answer = dao.lockTaskForUser(taskID, new UserID(2));
        assertTrue("Should not be able to lock task", !answer);

        dao.unlockTaskForUser(taskID, new UserID(1));

        answer = dao.lockTaskForUser(taskID, new UserID(2));
        assertTrue("Managed to lock task", answer);
    }

    public void testNewToken() {
        Token token = dao.newToken(new InstanceID(1), new NodeID(1), Token.PRE);

        assertNotNull( "Token should not be null", token );
    }

    public void testGetTokenByID() {
        Token token = dao.newToken(new InstanceID(1), new NodeID(1), Token.PRE);

        Token retrievedToken = dao.getTokenByID(token.getTokenID());

        assertNotNull("Token should not be null", token);

        assertEquals( token.getInstanceID(), retrievedToken.getInstanceID() );
        assertEquals( token.getCurrentNodeID(), retrievedToken.getCurrentNodeID() );
        assertEquals( token.getCurrentState(), retrievedToken.getCurrentState() );
        assertEquals( token.isActive(), retrievedToken.isActive() );
        assertEquals( token.getTokenID(), retrievedToken.getTokenID() );
    }

    public void testSaveToken() {
        TokenImpl token = (TokenImpl)dao.newToken( new InstanceID( 1 ),
                new NodeID(1), Token.PRE );

        token.setInstanceID( new InstanceID(2));
        token.setCurrentNodeID(new NodeID(2));
        token.setCurrentState(Token.MID);
        token.setActive(false);

        boolean result = dao.saveToken( token );
        assertTrue( "Save token did not succeed", result );

        // TODO could have more assertions here
    }

    public void testGetActiveTokensForInstance() {
        cleanUpTokens();

        for( int i = 0; i < 10; i++ ) {
            dao.newToken( new InstanceID( 1 ), new NodeID(2), Token.PRE );
        }

        List activeTokens = dao.getActiveTokensForInstance( new InstanceID( 1 ) );
        assertNotNull( "activeTokens should not be null", activeTokens );
        assertEquals( "Active tokens should be equal to 10", 10, activeTokens.size() );
    }

    public void testAddUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName( "James" );
        userInfo.setUserPassword( "Gosling" );
        userInfo.setUserPrincipal( "User Principal" );
        userInfo.setAdmin( true );

        UserID userID = dao.addUser( userInfo );

        assertNotNull( "UserID should not be null", userID );
    }

    public void testGetUserInfo() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName( "James" );
        userInfo.setUserPassword( "Gosling" );
        userInfo.setUserPrincipal( "User Principal" );
        userInfo.setAdmin( true );

        UserID userID = dao.addUser( userInfo );

        userInfo = dao.getUserInfo( userID );
        assertNotNull( userInfo );
    }

    public void testGetUserFromPrincipal() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName( "James" );
        userInfo.setUserPassword( "Gosling" );
        userInfo.setUserPrincipal( "User Principal" );
        userInfo.setAdmin( true );

        UserID userID = dao.addUser( userInfo );

        UserInfo userFromPrincipal = dao.getUserFromPrincipal( "User Principal" );
        assertNotNull( "UserInfo should not be null", userFromPrincipal );
    }

    public void testListAllUserInfo() {
        for( int i = 0; i < 10; i++ ) {
            UserInfo userInfo = new UserInfo();
            userInfo.setUserName( "James" );
            userInfo.setUserPassword( "Gosling" );
            userInfo.setUserPrincipal( "User Principal" );
            userInfo.setAdmin( true );

            UserID userID = dao.addUser( userInfo );
        }

        List allUsers = dao.listAllUserInfo();
        assertNotNull( "List of users should not be null", allUsers );
        assertTrue( "List of users should be greater or equal to 10", allUsers.size() >= 10 );
    }

    public void testSaveUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName( "James" );
        userInfo.setUserPassword( "Gosling" );
        userInfo.setUserPrincipal( "User Principal" );
        userInfo.setAdmin( true );

        UserID userID = dao.addUser( userInfo );

        // Modify the user info then update db
        userInfo.setUserID( userID );
        userInfo.setUserPassword( "Arnold" );
        userInfo.setUserPrincipal( "Scott McNealy" );
        userInfo.setAdmin( false );

        dao.saveUser( userInfo );

        // Verify that the info are indeed saved in the db
        userInfo = dao.getUserInfo( userInfo.getUserID() );
        assertEquals( "Arnold", userInfo.getUserPassword() );
        assertEquals( "Scott McNealy", userInfo.getUserPrincipal() );
        assertEquals( false, userInfo.isAdmin() );
    }

    public void testInstanceStatusUpdate() {

        BufferedReader reader = new BufferedReader( new InputStreamReader(
            getClass().getClassLoader().getResourceAsStream(
            "org/apache/agila/LeaveApplication.xml" ) ) );

        BusinessProcess businessProcess = XMLUtil.deserializeXML( reader );

        BusinessProcessID businessProcessID = dao.addGraph(businessProcess );

        Instance inst1 = dao.newInstance(businessProcessID, new HashMap());
        Instance inst2 = dao.newInstance(businessProcessID, new HashMap());

        assertEquals(Instance.STATUS_RUNNING, inst1.getStatus());
        assertEquals(Instance.STATUS_RUNNING, inst2.getStatus());

        inst1.setStatus(Instance.STATUS_STOPPED);

        dao.saveInstance(inst1);

        inst1 = dao.getInstanceByID(inst1.getInstanceID());
        inst2 = dao.getInstanceByID(inst2.getInstanceID());
       
        /*
         * only one changes
         */

        assertEquals(Instance.STATUS_STOPPED, inst1.getStatus());
        assertEquals(Instance.STATUS_RUNNING, inst2.getStatus());

    }

    private void cleanUpBusinessProcess() {
        try {
            // Clear previous data
            Connection connection = JDBCUtil.getInstance().getConnection();
            connection.setAutoCommit(false);

            Statement statement = connection.createStatement();

            String sql = "DELETE FROM bpm_businessprocess";

            statement.executeUpdate( sql );
            connection.commit();
            statement.close();
        } catch( SQLException e ) {
            fail( e.getMessage() );
        }
    }

    private void cleanUpTokens() {
        try {
            // Clear previous data
            Connection connection = JDBCUtil.getInstance().getConnection();

            connection.setAutoCommit(false);

            Statement statement = connection.createStatement();

            String sql = "DELETE FROM bpm_token";

            statement.executeUpdate( sql );
            connection.commit();
            statement.close();
        } catch( SQLException e ) {
            fail( e.getMessage() );
        }
    }

    public void tearDown() throws Exception {
        dao = null;
    }
}
TOP

Related Classes of org.apache.agila.impl.dao.DAOTestCaseSupport

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.