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

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

package com.netflix.astyanax.cql.test;

import java.util.Random;

import junit.framework.Assert;

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

import com.netflix.astyanax.cql.reads.model.CqlRangeBuilder;
import com.netflix.astyanax.cql.test.utils.ReadTests;
import com.netflix.astyanax.cql.test.utils.TestUtils;
import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.ColumnFamily;
import com.netflix.astyanax.model.ColumnList;
import com.netflix.astyanax.query.RowQuery;

public class SingleRowColumnPaginationTests extends ReadTests {
	
	private static ColumnFamily CF_COLUMN_RANGE_TEST = TestUtils.CF_COLUMN_RANGE_TEST;

	@BeforeClass
	public static void init() throws Exception {
		initContext();
		keyspace.createColumnFamily(CF_COLUMN_RANGE_TEST, null);
		CF_COLUMN_RANGE_TEST.describe(keyspace);
	}
	
	@AfterClass
	public static void tearDown() throws Exception {
		keyspace.dropColumnFamily(CF_COLUMN_RANGE_TEST);
	}

	@Test
	public void runAllTests() throws Exception {
		
		boolean rowDeleted = false;
		
		TestUtils.populateRowsForColumnRange(keyspace);
		Thread.sleep(1000);
		
		paginateColumnsForAllRows(rowDeleted);

		TestUtils.deleteRowsForColumnRange(keyspace);
		Thread.sleep(1000);
		rowDeleted = true;

		paginateColumnsForAllRows(rowDeleted);
	}
	
	private void paginateColumnsForAllRows(boolean rowDeleted) throws Exception {
		
		Random random = new Random();
		
		char ch = 'A';
		while (ch <= 'Z') {
			int pageSize = random.nextInt(26) % 10;
			if (pageSize <= 0) {
				pageSize = 10;
			}
			paginateColumnsForRowKey(String.valueOf(ch), rowDeleted, pageSize);
			ch++;
		}
	}

	private void paginateColumnsForRowKey(String rowKey, boolean rowDeleted, int pageSize) throws Exception {
		ColumnList columns;
		
		RowQuery query = keyspace
				.prepareQuery(TestUtils.CF_COLUMN_RANGE_TEST)
				.getKey(rowKey)
				.autoPaginate(true)
				.withColumnRange(
						new CqlRangeBuilder().setStart("a")
						.setFetchSize(pageSize).build());

		int count = 1; 
		while (!(columns = query.execute().getResult()).isEmpty()) {
			Assert.assertTrue(columns.size() <= pageSize);
			
			for (Column col : columns) {
				int value = col.getName().charAt(0) - 'a' + 1;
				Assert.assertEquals(count, value);
				count++;
			}
		}
		
		if (rowDeleted) {
			Assert.assertTrue(count == 1);
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy