[ https://issues.apache.org/jira/browse/GORA-497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16138912#comment-16138912 ]
ASF GitHub Bot commented on GORA-497: ------------------------------------- Github user madhawa-gunasekara commented on a diff in the pull request: https://github.com/apache/gora/pull/110#discussion_r134844996 --- Diff: gora-cassandra-cql/src/test/java/org/apache/gora/cassandra/store/TestCassandraStoreWithNativeSerialization.java --- @@ -0,0 +1,305 @@ +/* + * 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.gora.cassandra.store; + +import org.apache.gora.cassandra.GoraCassandraTestDriver; +import org.apache.gora.cassandra.example.generated.nativeSerialization.ComplexTypes; +import org.apache.gora.cassandra.example.generated.nativeSerialization.User; +import org.apache.gora.cassandra.query.CassandraQuery; +import org.apache.gora.query.Query; +import org.apache.gora.query.Result; +import org.apache.gora.store.DataStore; +import org.apache.gora.util.GoraException; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.UUID; + +/** + * This class tests Cassandra Store functionality with Cassandra Native Serialization. + */ +public class TestCassandraStoreWithNativeSerialization { + private static GoraCassandraTestDriver testDriver = new GoraCassandraTestDriver(); + private static DataStore<UUID, User> userDataStore; + private static Properties parameter; + + @BeforeClass + public static void setUpClass() throws Exception { + setProperties(); + testDriver.setParameters(parameter); + testDriver.setUpClass(); + userDataStore = testDriver.createDataStore(UUID.class, User.class); + } + + private static void setProperties() { + parameter = new Properties(); + parameter.setProperty(CassandraStoreParameters.CASSANDRA_SERVERS, "localhost"); + parameter.setProperty(CassandraStoreParameters.PORT, "9042"); + parameter.setProperty(CassandraStoreParameters.CASSANDRA_SERIALIZATION_TYPE, "native"); + parameter.setProperty(CassandraStoreParameters.PROTOCOL_VERSION, "3"); + parameter.setProperty(CassandraStoreParameters.CLUSTER_NAME, "Test Cluster"); + parameter.setProperty("gora.cassandrastore.mapping.file", "nativeSerialization/gora-cassandra-mapping.xml"); + } + + @After + public void tearDown() throws Exception { + testDriver.tearDown(); + } + + @AfterClass + public static void tearDownClass() throws Exception { + testDriver.tearDownClass(); + } + + /** + * In this test case, put and get behavior of the data store are testing. + */ + @Test + public void testSimplePutAndGet() { + UUID id = UUID.randomUUID(); + User user1 = new User(id, "madhawa", Date.from(Instant.now())); + // storing data; + userDataStore.put(id, user1); + // get data; + User olduser = userDataStore.get(id); + Assert.assertEquals(olduser.getName(), user1.getName()); + Assert.assertEquals(olduser.getDateOfBirth(), user1.getDateOfBirth()); + } + + /** + * In this test case, put and delete behavior of the data store are testing. + */ + @Test + public void testSimplePutDeleteAndGet() { + UUID id = UUID.randomUUID(); + User user1 = new User(id, "kasun", Date.from(Instant.now())); + // storing data; + userDataStore.put(id, user1); + // get data; + User olduser = userDataStore.get(user1.getUserId()); + Assert.assertEquals(olduser.getName(), user1.getName()); + Assert.assertEquals(olduser.getDateOfBirth(), user1.getDateOfBirth()); + // delete data; + userDataStore.delete(user1.getUserId()); + // get data + User deletedUser = userDataStore.get(id); + Assert.assertNull(deletedUser); + } + + /** + * In this test case, schema exists method behavior of the data store is testing. + */ + @Test() + public void testSchemaExists() { + userDataStore.deleteSchema(); + Assert.assertFalse(userDataStore.schemaExists()); + userDataStore.createSchema(); + Assert.assertTrue(userDataStore.schemaExists()); + } + + /** + * In this test case, schema exists method behavior of the data store is testing. + */ + @Test + public void testTruncateSchema() { + if (!userDataStore.schemaExists()) { + userDataStore.createSchema(); + } + UUID id = UUID.randomUUID(); + User user1 = new User(id, "Madhawa Kasun", Date.from(Instant.now())); + userDataStore.put(id, user1); + User olduser = userDataStore.get(id); + Assert.assertEquals(olduser.getName(), user1.getName()); + Assert.assertEquals(olduser.getDateOfBirth(), user1.getDateOfBirth()); + userDataStore.truncateSchema(); + olduser = userDataStore.get(id); + Assert.assertNull(olduser); + } + + /** + * In this test case, get with fields method behavior of the data store is testing. + */ + @Test + public void testGetWithFields() { + UUID id = UUID.randomUUID(); + User user1 = new User(id, "Madhawa Kasun Gunasekara", Date.from(Instant.now())); + userDataStore.put(id, user1); + // get data; + User olduser = userDataStore.get(user1.getUserId()); + Assert.assertEquals(olduser.getName(), user1.getName()); + Assert.assertEquals(olduser.getDateOfBirth(), user1.getDateOfBirth()); + User olduserWithFields = userDataStore.get(id, new String[]{"name"}); + Assert.assertNull(olduserWithFields.getDateOfBirth()); + } + + /** + * In this test case, get with fields method behavior of the data store is testing. + */ + @Test + public void testExecute() throws Exception { + userDataStore.truncateSchema(); + Map<UUID, User> users = new HashMap<>(); + UUID id1 = UUID.randomUUID(); + User user1 = new User(id1, "user1", Date.from(Instant.now())); + users.put(id1, user1); + userDataStore.put(id1, user1); + UUID id2 = UUID.randomUUID(); + User user2 = new User(id2, "user2", Date.from(Instant.now())); + users.put(id2, user2); + userDataStore.put(id2, user2); + UUID id3 = UUID.randomUUID(); + User user3 = new User(id3, "user3", Date.from(Instant.now())); + users.put(id3, user3); + userDataStore.put(id3, user3); + Query<UUID, User> query1 = userDataStore.newQuery(); + Result<UUID, User> result1 = userDataStore.execute(query1); + int i = 0; + Assert.assertEquals(result1.getProgress(),0.0,0.0); + while (result1.next()) { + // check objects values + Assert.assertEquals(result1.get().getName(), users.get(result1.getKey()).getName()); + Assert.assertEquals(result1.get().getDateOfBirth(), users.get(result1.getKey()).getDateOfBirth()); + Assert.assertEquals(result1.get().getUserId(), users.get(result1.getKey()).getUserId()); + i++; + } + Assert.assertEquals(result1.getProgress(),1.0,0.0); + Assert.assertEquals(3, i); + + // Check limit query + Query<UUID, User> query2 = userDataStore.newQuery(); + query2.setLimit(2); + Result<UUID, User> result2 = userDataStore.execute(query2); + i = 0; + while (result2.next()) { + Assert.assertEquals(result2.get().getName(), users.get(result2.getKey()).getName()); + Assert.assertEquals(result2.get().getDateOfBirth(), users.get(result2.getKey()).getDateOfBirth()); + Assert.assertEquals(result2.get().getUserId(), users.get(result2.getKey()).getUserId()); + i++; + } + Assert.assertEquals(2, i); + + // check key element + Query<UUID, User> query3 = userDataStore.newQuery(); + query3.setKey(id1); + + Result<UUID, User> result3 = userDataStore.execute(query3); + i = 0; + while (result3.next()) { + Assert.assertEquals(result3.get().getName(), users.get(result3.getKey()).getName()); + Assert.assertEquals(result3.get().getDateOfBirth(), users.get(result3.getKey()).getDateOfBirth()); + Assert.assertEquals(result3.get().getUserId(), users.get(result3.getKey()).getUserId()); + i++; + } + Assert.assertEquals(1, i); + } + + /** + * In this test case, delete by query method behavior of the data store is testing. + */ + @Test + public void testDeleteByQuery() throws Exception { + userDataStore.truncateSchema(); + UUID id1 = UUID.randomUUID(); + User user1 = new User(id1, "user1", Date.from(Instant.now())); + userDataStore.put(id1, user1); + UUID id2 = UUID.randomUUID(); + User user2 = new User(id2, "user2", Date.from(Instant.now())); + userDataStore.put(id2, user2); + Query<UUID, User> query1 = userDataStore.newQuery(); + query1.setKey(id1); + userDataStore.deleteByQuery(query1); + User user = userDataStore.get(id1); + Assert.assertNull(user); + + //test deleteByFields + Query<UUID, User> query2 = userDataStore.newQuery(); + query2.setKey(id2); + query2.setFields("name"); + userDataStore.deleteByQuery(query2); + User partialDeletedUser = userDataStore.get(id2); + Assert.assertNull(partialDeletedUser.getName()); + Assert.assertEquals(partialDeletedUser.getDateOfBirth(),user2.getDateOfBirth()); + } + + /** + * In this test case, update by quert method behavior of the data store is testing. + */ + @Test + public void testUpdateByQuery() { + userDataStore.truncateSchema(); + UUID id1 = UUID.randomUUID(); + User user1 = new User(id1, "user1", Date.from(Instant.now())); + userDataStore.put(id1, user1); + UUID id2 = UUID.randomUUID(); + User user2 = new User(id2, "user2", Date.from(Instant.now())); + userDataStore.put(id2, user2); + Query<UUID, User> query1 = userDataStore.newQuery(); + if(query1 instanceof CassandraQuery) { + ((CassandraQuery) query1).addUpdateField("name", "madhawa"); + } + query1.setKey(id1); + if(userDataStore instanceof CassandraStore) { + ((CassandraStore) userDataStore).updateByQuery(query1); + } + User user = userDataStore.get(id1); + Assert.assertEquals(user.getName(),"madhawa"); + } + + @Test + public void testComplexTypes() throws GoraException { + DataStore<String, ComplexTypes> documentDataStore = testDriver.createDataStore(String.class, ComplexTypes.class); --- End diff -- added > Migrate CassandraThrift to CQL > ------------------------------- > > Key: GORA-497 > URL: https://issues.apache.org/jira/browse/GORA-497 > Project: Apache Gora > Issue Type: Improvement > Components: gora-cassandra > Reporter: Madhawa Gunasekara > Assignee: Madhawa Gunasekara > Labels: gsoc2017 > Fix For: 0.8 > > -- This message was sent by Atlassian JIRA (v6.4.14#64029)