Package com.impetus.client.crud

Source Code of com.impetus.client.crud.ResultIteratorTest

/**
* Copyright 2013 Impetus Infotech.
*
* 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 com.impetus.client.crud;

import java.sql.SQLException;
import java.util.Iterator;
import java.util.NoSuchElementException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.impetus.client.crud.entities.PersonRDBMS;
import com.impetus.client.crud.entities.RDBMSToken;
import com.impetus.client.crud.entities.RDBMSTokenClient;
import com.impetus.kundera.query.IResultIterator;
import com.impetus.kundera.query.Query;

/**
* @author kuldeep.mishra junit for {@link IResultIterator}.
*/
public class ResultIteratorTest extends BaseTest
{
    /** The emf. */
    private EntityManagerFactory emf;

    /** The em. */
    private EntityManager em;

    private RDBMSCli cli;

    private static final String SCHEMA = "testdb";

    /**
     * Sets the up.
     *
     * @throws Exception
     *             the exception
     */
    @Before
    public void setUp() throws Exception
    {
        createSchema();
       
        emf = Persistence.createEntityManagerFactory("testHibernate");
        em = emf.createEntityManager();
    }

    @Test
    public void testScroll() throws Exception
    {
        onScroll();
    }

    @Test
    public void testScrollAssociation() throws Exception
    {
        assertOnTokenScroll();
    }

    private void assertOnTokenScroll()
    {
        RDBMSTokenClient client = new RDBMSTokenClient();
        client.setClientName("tokenClient1");
        client.setId("tokenClientId");

        RDBMSToken token1 = new RDBMSToken();
        token1.setId("RdbmsTokenId1");
        token1.setTokenName("tokenName1");
        token1.setClient(client);

        RDBMSToken token2 = new RDBMSToken();
        token2.setId("tokenId2");
        token2.setTokenName("tokenName2");
        token2.setClient(client);

        em.persist(token1);
        em.persist(token2);

        String queryWithoutClause = "Select t from RDBMSToken t";
        assertOnTokenScroll(queryWithoutClause, 2);

        String queryWithClause = "Select t from RDBMSToken t where t.tokenName='tokenName1'";

        assertOnTokenScroll(queryWithClause, 1);

        // TODO:: Need to discuss , this should be working with token
        // support. Special scenario.
        String queryWithIdClause = "Select t from RDBMSToken t where t.tokenId = 'RDBMSTokenId1'";
        //        assertOnTokenScroll(queryWithIdClause, 1);

    }

    private void assertOnTokenScroll(String queryClause, int expected)
    {
        Query query = (Query) em.createQuery(queryClause, RDBMSToken.class);

        int count = 0;
        Iterator<RDBMSToken> tokens = query.iterate();
        while (tokens.hasNext())
        {
            RDBMSToken token = tokens.next();
            Assert.assertNotNull(token);
            RDBMSTokenClient client = token.getClient();
            Assert.assertNotNull(client);
            Assert.assertEquals("tokenClient1", client.getClientName());
            // Assert.assertEquals(2, client.getTokens().size());
            count++;
        }

        Assert.assertTrue(count > 0);
        Assert.assertTrue(count == expected);
    }

    private void onScroll()
    {
        Object p1 = prepareRDBMSInstance("1", 10);
        Object p2 = prepareRDBMSInstance("2", 20);
        Object p3 = prepareRDBMSInstance("3", 15);

        em.persist(p1);
        em.persist(p2);
        em.persist(p3);

        em.flush();
        em.clear();
        final String queryWithoutClause = "Select p from PersonRDBMS p";

        assertOnScroll(queryWithoutClause, 3);

        final String queryWithClause = "Select p from PersonRDBMS p where p.personName = vivek";

        assertOnScroll(queryWithClause, 3);

        final String queryWithAndClause = "Select p from PersonRDBMS p where p.personName = vivek and p.age = 15";

        assertOnScroll(queryWithAndClause, 1);

        final String queryWithLTClause = "Select p from PersonRDBMS p where p.personName = vivek and p.age < 15";

        assertOnScroll(queryWithLTClause, 1);

        final String queryWithGTClause = "Select p from PersonRDBMS p where p.personName = vivek and p.age >= 15";

        assertOnScroll(queryWithGTClause, 2);

        final String queryWithLTGTClause = "Select p from PersonRDBMS p where p.personName = vivek and p.age > 10 and p.age < 20";

        assertOnScroll(queryWithLTGTClause, 1);

        final String queryWithLTGTEClause = "Select p from PersonRDBMS p where p.personName = vivek and p.age >= 10 and p.age < 20";

        assertOnScroll(queryWithLTGTEClause, 2);

        String queryWithIdClause = "Select p from PersonRDBMS p where p.personId = '2' ";
        assertOnScroll(queryWithIdClause, 1);
    }

    private void assertOnScroll(final String queryWithoutClause, int expectedCount)
    {
        Query query = (Query) em.createQuery(queryWithoutClause, PersonRDBMS.class);

        assertOnFetch(query, 0, expectedCount);
        assertOnFetch(query, 2, expectedCount); // less records

        assertOnFetch(query, 4, expectedCount); // more fetch size than
                                                // available in db.
        assertOnFetch(query, 3, expectedCount); // more fetch size than
                                                // available in db.

        assertOnFetch(query, null, expectedCount); // set to null;

    }

    private void assertOnFetch(Query query, Integer fetchSize, int available)
    {
        query.setFetchSize(fetchSize);
        int counter = 0;
        Iterator<PersonRDBMS> iter = query.iterate();

        while (iter.hasNext())
        {
            Assert.assertNotNull(iter.next());
            counter++;
        }

        Assert.assertEquals(counter, fetchSize == null || available < fetchSize ? available : fetchSize);
        try
        {
            iter.next();
            Assert.fail();
        }
        catch (NoSuchElementException nsex)
        {
            Assert.assertNotNull(nsex.getMessage());
        }
    }

    @After
    public void tearDown()
    {
        em.close();
        emf.close();
        dropSchema();
    }

    private void createSchema() throws SQLException
    {
        try
        {
            cli = new RDBMSCli(SCHEMA);
            cli.createSchema(SCHEMA);
            cli.update("CREATE MEMORY TABLE TESTDB.PERSON (PERSON_ID VARCHAR(90) PRIMARY KEY, PERSON_NAME VARCHAR(256), AGE INTEGER)");
            cli.update("CREATE MEMORY TABLE TESTDB.TOKENS (TOKEN_ID VARCHAR(90) PRIMARY KEY, TOKEN_NAME VARCHAR(256), CLIENT_ID VARCHAR(256))");
            cli.update("CREATE MEMORY TABLE TESTDB.CLIENT (CLIENT_ID VARCHAR(90) PRIMARY KEY, CLIENT_NAME VARCHAR(256))");
        }
        catch (Exception e)
        {

            cli.update("DELETE FROM TESTDB.PERSON");
            cli.update("DROP TABLE TESTDB.PERSON");
            cli.update("DELETE FROM TESTDB.TOKENS");
            cli.update("DROP TABLE TESTDB.TOKENS");
            cli.update("DELETE FROM TESTDB.CLIENT");
            cli.update("DROP TABLE TESTDB.CLIENT");
            cli.update("DROP SCHEMA TESTDB");
            cli.update("CREATE MEMORY TABLE TESTDB.PERSON (PERSON_ID VARCHAR(90) PRIMARY KEY, PERSON_NAME VARCHAR(256), AGE INTEGER)");
            cli.update("CREATE MEMORY TABLE TESTDB.TOKENS (TOKEN_ID VARCHAR(90) PRIMARY KEY, TOKEN_NAME VARCHAR(256), CLIENT_ID VARCHAR(256))");
            cli.update("CREATE MEMORY TABLE TESTDB.CLIENT (CLIENT_ID VARCHAR(90) PRIMARY KEY, CLIENT_NAME VARCHAR(256))");
            // nothing
            // do
        }
    }

    private void dropSchema()
    {
        try
        {
            cli.update("DELETE FROM TESTDB.PERSON");
            cli.update("DROP TABLE TESTDB.PERSON");
            cli.update("DELETE FROM TESTDB.tokens");
            cli.update("DROP TABLE TESTDB.tokens");
            cli.update("DELETE FROM TESTDB.client");
            cli.update("DROP TABLE TESTDB.client");

            cli.update("DROP SCHEMA TESTDB");
            cli.closeConnection();
            cli.shutdown();
        }
        catch (Exception e)
        {
            // Nothing to do
        }
    }
}
TOP

Related Classes of com.impetus.client.crud.ResultIteratorTest

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.