Package com.impetus.kundera.rest.resources

Source Code of com.impetus.kundera.rest.resources.PolyglotQueryTest

/**
* Copyright 2014 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.kundera.rest.resources;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.ws.rs.core.MediaType;

import junit.framework.Assert;

import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.impetus.kundera.client.cassandra.persistence.CassandraCli;
import com.impetus.kundera.rest.common.Constants;
import com.impetus.kundera.rest.common.ExternalLink;
import com.impetus.kundera.rest.common.JAXBUtils;
import com.impetus.kundera.rest.common.PreferenceCassandra;
import com.impetus.kundera.rest.common.Professional;
import com.impetus.kundera.rest.common.ProfessionalDetailCassandra;
import com.impetus.kundera.rest.common.TweetCassandra;
import com.impetus.kundera.rest.common.UserCassandra;
import com.impetus.kundera.rest.dao.RESTClient;
import com.impetus.kundera.rest.dao.RESTClientImpl;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.test.framework.JerseyTest;

/**
* Test for all data types using {@link Professional} entity Cassandra-CLI
* Commands to run for non-embedded mode: create keyspace KunderaExamples; use
* KunderaExamples; drop column family PROFESSIONAL; create column family
* PROFESSIONAL with comparator=UTF8Type and key_validation_class=UTF8Type and
* column_metadata=[ {column_name: DEPARTMENT_ID, validation_class:LongType,
* index_type: KEYS}, {column_name: IS_EXCEPTIONAL,
* validation_class:BooleanType, index_type: KEYS}, {column_name: AGE,
* validation_class:IntegerType, index_type: KEYS}, {column_name: GRADE,
* validation_class:UTF8Type, index_type: KEYS}, {column_name:
* DIGITAL_SIGNATURE, validation_class:BytesType, index_type: KEYS},
* {column_name: RATING, validation_class:IntegerType, index_type: KEYS},
* {column_name: COMPLIANCE, validation_class:FloatType, index_type: KEYS},
* {column_name: HEIGHT, validation_class:DoubleType, index_type: KEYS},
* {column_name: ENROLMENT_DATE, validation_class:DateType, index_type: KEYS},
* {column_name: ENROLMENT_TIME, validation_class:DateType, index_type: KEYS},
* {column_name: JOINING_DATE_TIME, validation_class:DateType, index_type:
* KEYS}, {column_name: YEARS_SPENT, validation_class:IntegerType, index_type:
* KEYS}, {column_name: UNIQUE_ID, validation_class:LongType, index_type: KEYS},
* {column_name: MONTHLY_SALARY, validation_class:DoubleType, index_type: KEYS},
* {column_name: JOB_ATTEMPTS, validation_class:IntegerType, index_type: KEYS},
* {column_name: ACCUMULATED_WEALTH, validation_class:DecimalType, index_type:
* KEYS}, {column_name: GRADUATION_DAY, validation_class:DateType, index_type:
* KEYS} ]; describe KunderaExamples;
*
* @author chhavi.gangwal
*/
public class PolyglotQueryTest extends JerseyTest
{
    private static final String _KEYSPACE = "KunderaExamples";
   
    private static final String _PU = "twiCassandra,twiMongo";

    private static Logger log = LoggerFactory.getLogger(DataTypeTest.class);

    static String mediaType = MediaType.APPLICATION_JSON;

    static RESTClient restClient;

    String applicationToken = null;

    String sessionToken = null;

    String userString;

    String pk1;

    String pk2;
   
    String userId1;
   
    String userId2;

   

   

    private final static boolean AUTO_MANAGE_SCHEMA = true;

    public PolyglotQueryTest() throws Exception
    {
        super(Constants.KUNDERA_REST_RESOURCES_PACKAGE);
    }

   

    @Before
    public void setup() throws Exception
    {

    }

    @After
    public void tearDown() throws Exception
    {
        super.tearDown();
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception
    {

        if (AUTO_MANAGE_SCHEMA)
        {
            CassandraCli.dropKeySpace(_KEYSPACE);
        }
    }

  
   
    @Test
    public void testUserCRUD() throws JsonParseException, JsonMappingException, IOException
    {
        WebResource webResource = resource();
        restClient = new RESTClientImpl();
        restClient.initialize(webResource, mediaType);

        buildUser1Str();
        // Get Application Token
        applicationToken = restClient.getApplicationToken(_PU, null);
        Assert.assertNotNull(applicationToken);
        applicationToken = applicationToken.replaceAll("^\"|\"$", "");
        Assert.assertTrue(applicationToken.startsWith("AT_"));

        // Get Session Token
        sessionToken = restClient.getSessionToken(applicationToken);
        Assert.assertNotNull(sessionToken);
        sessionToken = sessionToken.replaceAll("^\"|\"$", "");
        Assert.assertTrue(sessionToken.startsWith("ST_"));

        // Insert Record
        String insertResponse1 = restClient.insertEntity(sessionToken, userString, UserCassandra.class.getSimpleName());
      

        Assert.assertNotNull(insertResponse1);
        Assert.assertTrue(insertResponse1.indexOf("200") > 0);
      

        // Find Record
        String foundUser = restClient.findEntity(sessionToken, "0001", UserCassandra.class.getSimpleName());
        Assert.assertNotNull(foundUser);
        Assert.assertTrue(foundUser.indexOf("0001") > 0);
       
        foundUser = foundUser.substring(1,foundUser.length()-1);
        Map<String, Object> userDetails = new HashMap<String, Object>();
        ObjectMapper mapper = new ObjectMapper();
        userDetails = mapper.readValue(foundUser, userDetails.getClass());
        foundUser = mapper.writeValueAsString(userDetails.get("usercassandra"));
    
        // Update Record
        foundUser = foundUser.replaceAll("163.12", "165.21");
       
        String updatedUser = restClient.updateEntity(sessionToken, foundUser, UserCassandra.class.getSimpleName());
       
        Assert.assertNotNull(updatedUser);
        Assert.assertTrue(updatedUser.indexOf("165.21") > 0);

        /** JPA Query - Select */
        // Get All Professionals
        String jpaQuery = "select p from " + UserCassandra.class.getSimpleName() + " p";
        String queryResult = restClient.runJPAQuery(sessionToken, jpaQuery, new HashMap<String, Object>());
        log.debug("Query Result:" + queryResult);
       
        Assert.assertNotNull(queryResult);
        Assert.assertFalse(StringUtils.isEmpty(queryResult));
        Assert.assertTrue(queryResult.indexOf("usercassandra") > 0);
        Assert.assertTrue(queryResult.indexOf("0001") > 0);
        Assert.assertTrue(queryResult.indexOf("0002") > 0);
        Assert.assertTrue(queryResult.indexOf("0003") > 0);
       
        Assert.assertTrue(queryResult.indexOf("Motif") < 0);
      
        jpaQuery = "select p from " + UserCassandra.class.getSimpleName() + " p WHERE p.userId = :userId";
        Map<String, Object> params = new HashMap<String, Object>();
       
        params.put("userId", "0001");
       
       
        queryResult = restClient.runObjectJPAQuery(sessionToken, jpaQuery, params);
        log.debug("Query Result:" + queryResult);
       
        Assert.assertNotNull(queryResult);
        Assert.assertFalse(StringUtils.isEmpty(queryResult));
        Assert.assertTrue(queryResult.indexOf("usercassandra") > 0);
        Assert.assertTrue(queryResult.indexOf("0001") > 0);

       
        Assert.assertTrue(queryResult.indexOf("Motif") < 0);


        /** JPA Query - Select All */
        // Get All Professionals
        String allUsers = restClient.getAllEntities(sessionToken, UserCassandra.class.getSimpleName());
        log.debug(allUsers);
        Assert.assertNotNull(allUsers);
      

        // Close Session
        restClient.closeSession(sessionToken);

        // Close Application
        restClient.closeApplication(applicationToken);
    }
   
    private void buildUser1Str()
    {
      
      userId1 = "0001";
      userId2 = "0002";
     
      List<UserCassandra> friendList = new ArrayList<UserCassandra>();
     
      List<UserCassandra> followers = new ArrayList<UserCassandra>();
     
       UserCassandra user1 = new UserCassandra(userId1, "Amresh", "password1", "married");
      
         UserCassandra user2 = new UserCassandra(userId2, "Vivek", "password1", "married");
        
         UserCassandra user3 = new UserCassandra("0003", "Kuldeep", "password1", "single");

         friendList.add(user2);
         Calendar cal = Calendar.getInstance();
         cal.setTime(new Date(1344079067777l));

        
         user1.setProfessionalDetail(new ProfessionalDetailCassandra(1234567, true, 31, 'C', (byte) 8, (short) 5, (float) 10.0, 163.12, new Date(
                 Long.parseLong("1351667541111")), new Date(Long.parseLong("1351667542222")), new Date(
                 Long.parseLong("1351667543333")), 2, new Long(3634521523423L), new Double(7.23452342343),
    
         new BigInteger("123456789"), new BigDecimal(123456789), cal));
        
         user2.setProfessionalDetail(new ProfessionalDetailCassandra(1234568, true, 21, 'C', (byte) 8, (short) 5, (float) 10.0, 163.12, new Date(
                 Long.parseLong("1351667541111")), new Date(Long.parseLong("1351667542222")), new Date(
                 Long.parseLong("1351667543333")), 2, new Long(3634521523423L), new Double(7.23452342343),
    
         new BigInteger("123456789"), new BigDecimal(123456789), cal));

         user1.setPreference(new PreferenceCassandra("P1", "Motif", "2"));
        
         followers.add(user3);
        
         friendList.add(user2);
        
         user1.setFriends(friendList);
        
         user1.setFollowers(followers);
        
         Set<ExternalLink> externalLinks = new HashSet<ExternalLink>();
         List<TweetCassandra> tweetList = new ArrayList<TweetCassandra>();
        
         externalLinks.add(new ExternalLink("L1", "Facebook", "http://facebook.com/coolnerd"));
         externalLinks.add(new ExternalLink("L2", "LinkedIn", "http://linkedin.com/in/devilmate"));
         user1.setExternalLinks(externalLinks);
        
        
         tweetList.add(new TweetCassandra("Here is my first tweet", "Web"));
         tweetList.add(new TweetCassandra("Second Tweet from me", "Mobile"));
         user1.setTweets(tweetList);
        
       
         userString = JAXBUtils.toString(user1, mediaType);
        
        

    }


  

}
TOP

Related Classes of com.impetus.kundera.rest.resources.PolyglotQueryTest

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.