All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.astyanax.cql.test.StaticColumnFamilyTests Maven / Gradle / Ivy

package com.netflix.astyanax.cql.test;

import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.ColumnFamily;
import com.netflix.astyanax.model.ColumnList;
import com.netflix.astyanax.model.Rows;
import com.netflix.astyanax.serializers.StringSerializer;

public class StaticColumnFamilyTests extends KeyspaceTests {

	private static ColumnFamily CF_ACCOUNTS = new ColumnFamily("accounts", StringSerializer.get(), StringSerializer.get());

	@BeforeClass
	public static void init() throws Exception {
		initContext();
		keyspace.prepareQuery(CF_ACCOUNTS)
				.withCql("CREATE TABLE astyanaxunittests.accounts (userid text PRIMARY KEY, user text, pswd text)")
				.execute();
		CF_ACCOUNTS.describe(keyspace);
	}

	@AfterClass
	public static void tearDown() throws Exception {
		keyspace.dropColumnFamily(CF_ACCOUNTS);
	}

	@Test
	public void testReadWriteOpsWithStaticNamedColumns() throws Exception {

		populateRowsForAccountsTable(keyspace);
		Thread.sleep(200);
		boolean rowDeleted = false; 

		performSimpleRowQuery(rowDeleted);
		performSimpleRowQueryWithColumnCollection(rowDeleted);
		performSimpleRowSingleColumnQuery(rowDeleted);
		performRowSliceQueryWithAllColumns(rowDeleted);
		performRowSliceQueryWithColumnSlice(rowDeleted);

		deleteRowsForAccountsTable(keyspace);
		Thread.sleep(200);
		rowDeleted = true; 

		performSimpleRowQuery(rowDeleted);
		performSimpleRowQueryWithColumnCollection(rowDeleted);
		performSimpleRowSingleColumnQuery(rowDeleted);
		performRowSliceQueryWithAllColumns(rowDeleted);
		performRowSliceQueryWithColumnSlice(rowDeleted);
	}


	private void performSimpleRowQuery(boolean rowDeleted) throws Exception {
		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			String key = Character.toString(keyName);
			performSimpleRowQueryForRow(key, rowDeleted, key);
		}
	}

	private void performSimpleRowQueryForRow(String rowKey, boolean rowDeleted, String expectedChar) throws Exception {

		ColumnList result =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).execute().getResult();

		if (rowDeleted) {
			Assert.assertTrue(result.isEmpty());
		} else {
			Assert.assertFalse(result.isEmpty());
			Column col = result.getColumnByName("user");
			Assert.assertEquals("user" + expectedChar, col.getStringValue());
			col = result.getColumnByName("pswd");
			Assert.assertEquals("pswd" + expectedChar, col.getStringValue());
		}
	}

	private void performSimpleRowQueryWithColumnCollection(boolean rowDeleted) throws Exception {
		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			String key = Character.toString(keyName);
			performSimpleRowQueryWithColumnCollectionForRow(key, rowDeleted, key);
		}
	}

	private void performSimpleRowQueryWithColumnCollectionForRow(String rowKey, boolean rowDeleted, String expectedChar) throws Exception {

		ColumnList result =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).withColumnSlice("user", "pswd").execute().getResult();

		if (rowDeleted) {
			Assert.assertTrue(result.isEmpty());
		} else {
			Assert.assertFalse(result.isEmpty());
			Column col = result.getColumnByName("user");
			Assert.assertEquals("user" + expectedChar, col.getStringValue());
			col = result.getColumnByName("pswd");
			Assert.assertEquals("pswd" + expectedChar, col.getStringValue());
		}

		result =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).withColumnSlice("user").execute().getResult();

		if (rowDeleted) {
			Assert.assertTrue(result.isEmpty());
		} else {
			Assert.assertFalse(result.isEmpty());
			Column col = result.getColumnByName("user");
			Assert.assertEquals("user" + expectedChar, col.getStringValue());
		}

		result =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).withColumnSlice("pswd").execute().getResult();

		if (rowDeleted) {
			Assert.assertTrue(result.isEmpty());
		} else {
			Assert.assertFalse(result.isEmpty());
			Column col = result.getColumnByName("pswd");
			Assert.assertEquals("pswd" + expectedChar, col.getStringValue());
		}

		List cols = new ArrayList();
		cols.add("user"); cols.add("pswd");

		result =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).withColumnSlice(cols).execute().getResult();

		if (rowDeleted) {
			Assert.assertTrue(result.isEmpty());
		} else {
			Assert.assertFalse(result.isEmpty());
			Column col = result.getColumnByName("user");
			Assert.assertEquals("user" + expectedChar, col.getStringValue());
			col = result.getColumnByName("pswd");
			Assert.assertEquals("pswd" + expectedChar, col.getStringValue());
		}

		cols.remove("user");

		result =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).withColumnSlice(cols).execute().getResult();

		if (rowDeleted) {
			Assert.assertTrue(result.isEmpty());
		} else {
			Assert.assertFalse(result.isEmpty());
			Column col = result.getColumnByName("pswd");
			Assert.assertEquals("pswd" + expectedChar, col.getStringValue());
		}
	}

	private void performSimpleRowSingleColumnQuery(boolean rowDeleted) throws Exception {
		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			String key = Character.toString(keyName);
			performSimpleRowSingleColumnQueryForRow(key, rowDeleted, key);
		}
	}

	private void performSimpleRowSingleColumnQueryForRow(String rowKey, boolean rowDeleted, String expectedChar) throws Exception {

		Column col =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).getColumn("user").execute().getResult();
		if (rowDeleted) {
			Assert.assertNull(col);
		} else {
			Assert.assertTrue(col.hasValue());
			Assert.assertEquals("user" + expectedChar, col.getStringValue());
		}

		col =  keyspace.prepareQuery(CF_ACCOUNTS).getRow(rowKey).getColumn("pswd").execute().getResult();
		if (rowDeleted) {
			Assert.assertNull(col);
		} else {
			Assert.assertTrue(col.hasValue());
			Assert.assertEquals("pswd" + expectedChar, col.getStringValue());
		}
	}

	private void performRowSliceQueryWithAllColumns(boolean rowDeleted) throws Exception {

		List keys = new ArrayList();
		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			keys.add(Character.toString(keyName));
		}

		int index = 0;
		Rows rows =  keyspace.prepareQuery(CF_ACCOUNTS).getRowSlice(keys).execute().getResult();
		if (rowDeleted) {
			Assert.assertTrue(rows.isEmpty());
		} else {
			Assert.assertFalse(rows.isEmpty());
			for (com.netflix.astyanax.model.Row row : rows) {

				Assert.assertEquals(keys.get(index),row.getKey());

				ColumnList cols = row.getColumns();
				Assert.assertFalse(cols.isEmpty());
				Column col = cols.getColumnByName("user");
				Assert.assertEquals("user" + keys.get(index), col.getStringValue());
				col = cols.getColumnByName("pswd");
				Assert.assertEquals("pswd" + keys.get(index), col.getStringValue());

				index++;
			}
		}
	}

	private void performRowSliceQueryWithColumnSlice(boolean rowDeleted) throws Exception {

		List keys = new ArrayList();
		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			keys.add(Character.toString(keyName));
		}

		int index = 0;
		Rows rows =  keyspace.prepareQuery(CF_ACCOUNTS).getRowSlice(keys).withColumnSlice("user", "pswd").execute().getResult();
		if (rowDeleted) {
			Assert.assertTrue(rows.isEmpty());
		} else {
			Assert.assertFalse(rows.isEmpty());
			for (com.netflix.astyanax.model.Row row : rows) {

				Assert.assertEquals(keys.get(index),row.getKey());

				ColumnList cols = row.getColumns();
				Assert.assertFalse(cols.isEmpty());
				Column col = cols.getColumnByName("user");
				Assert.assertEquals("user" + keys.get(index), col.getStringValue());
				col = cols.getColumnByName("pswd");
				Assert.assertEquals("pswd" + keys.get(index), col.getStringValue());

				index++;
			}
		}

		index=0;
		rows =  keyspace.prepareQuery(CF_ACCOUNTS).getRowSlice(keys).withColumnSlice("user").execute().getResult();
		if (rowDeleted) {
			Assert.assertTrue(rows.isEmpty());
		} else {
			Assert.assertFalse(rows.isEmpty());
			for (com.netflix.astyanax.model.Row row : rows) {

				Assert.assertEquals(keys.get(index),row.getKey());

				ColumnList cols = row.getColumns();
				Assert.assertFalse(cols.isEmpty());
				Column col = cols.getColumnByName("user");
				Assert.assertEquals("user" + keys.get(index), col.getStringValue());

				index++;
			}
		}

		index=0;
		rows =  keyspace.prepareQuery(CF_ACCOUNTS).getRowSlice(keys).withColumnSlice("pswd").execute().getResult();
		if (rowDeleted) {
			Assert.assertTrue(rows.isEmpty());
		} else {
			Assert.assertFalse(rows.isEmpty());
			for (com.netflix.astyanax.model.Row row : rows) {

				Assert.assertEquals(keys.get(index),row.getKey());

				ColumnList cols = row.getColumns();
				Assert.assertFalse(cols.isEmpty());
				Column col = cols.getColumnByName("pswd");
				Assert.assertEquals("pswd" + keys.get(index), col.getStringValue());

				index++;
			}
		}
	}


	public static void populateRowsForAccountsTable(Keyspace keyspace) throws Exception {

		MutationBatch m = keyspace.prepareMutationBatch();

		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			String character = Character.toString(keyName);
			ColumnListMutation colMutation = m.withRow(CF_ACCOUNTS, character);
			colMutation.putColumn("user", "user" + character).putColumn("pswd", "pswd" + character);
			m.execute();
			m.discardMutations();
		}
	}

	public static void deleteRowsForAccountsTable(Keyspace keyspace) throws Exception {

		for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
			MutationBatch m = keyspace.prepareMutationBatch();
			String rowKey = Character.toString(keyName);
			m.withRow(CF_ACCOUNTS, rowKey).delete();
			m.execute();
			m.discardMutations();
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy