/*
* Copyright (c) 2013-2017 Cinchapi Inc.
*
* 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.cinchapi.concourse.demo;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
import com.cinchapi.concourse.Timestamp;
import com.cinchapi.concourse.test.ConcourseIntegrationTest;
import com.cinchapi.concourse.thrift.Operator;
import com.cinchapi.concourse.time.Time;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**
* A test that follows the Concourse Getting Started guide at
* https://cinchapi.atlassian.net/wiki/display/CON/Getting+Started.
*
* @author Jeff Nelson
*/
public class GettingStartedTest extends ConcourseIntegrationTest {
@Test
public void testGettingStarted() {
// Add
Assert.assertTrue(client.add("name", "John Doe", 1));
Assert.assertTrue(client.add("name", "Johnny Doe", 1));
Assert.assertTrue(client.add("name", "Jonathan Doe", 1));
Assert.assertTrue(client.add("name", "J. Doe", 1));
Assert.assertTrue(client.add("age", 30, 1));
Assert.assertTrue(client.add("age", 30.5F, 1));
Assert.assertTrue(client.add("age", "30", 1));
Assert.assertTrue(client.add("age", true, 1));
// Remove
Assert.assertTrue(client.remove("age", true, 1));
// Fetch
Assert.assertEquals(Sets.newHashSet("John Doe", "Johnny Doe",
"Jonathan Doe", "J. Doe"), client.select("name", 1));
// Get
Assert.assertEquals("J. Doe", client.get("name", 1));
// Set
for (int i = 0; i < 5; i++) {
client.add("baz", i, 1);
}
Assert.assertEquals(Sets.newHashSet(0, 1, 2, 3, 4),
client.select("baz", 1));
client.set("baz", 6, 1);
Assert.assertEquals(Sets.newHashSet(6), client.select("baz", 1));
// Describe
Assert.assertEquals(Sets.newHashSet("name", "age", "baz"),
client.describe(1));
// Verify
Assert.assertTrue(client.verify("age", 30, 1));
// Find
for (int i = 0; i <= 1000; i++) {
client.add("count", i, i);
}
Set<Long> set = client.find("count", Operator.BETWEEN, 100, 300);
for (long i = 100; i < 300; i++) {
Assert.assertTrue(set.contains(i));
}
// Audit
Iterator<String> it = client.audit(1).values().iterator();
Assert.assertTrue(it.next().startsWith(
"ADD name AS John Doe (STRING) IN 1"));
Assert.assertTrue(it.next().startsWith(
"ADD name AS Johnny Doe (STRING) IN 1"));
Assert.assertTrue(it.next().startsWith(
"ADD name AS Jonathan Doe (STRING) IN 1"));
Assert.assertTrue(it.next().startsWith(
"ADD name AS J. Doe (STRING) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD age AS 30 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD age AS 30.5 (FLOAT) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD age AS 30 (STRING) IN 1"));
Assert.assertTrue(it.next()
.startsWith("ADD age AS true (BOOLEAN) IN 1"));
Assert.assertTrue(it.next().startsWith(
"REMOVE age AS true (BOOLEAN) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD baz AS 0 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD baz AS 1 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD baz AS 2 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD baz AS 3 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD baz AS 4 (INTEGER) IN 1"));
Assert.assertTrue(it.next()
.startsWith("REMOVE baz AS 0 (INTEGER) IN 1"));
Assert.assertTrue(it.next()
.startsWith("REMOVE baz AS 1 (INTEGER) IN 1"));
Assert.assertTrue(it.next()
.startsWith("REMOVE baz AS 2 (INTEGER) IN 1"));
Assert.assertTrue(it.next()
.startsWith("REMOVE baz AS 3 (INTEGER) IN 1"));
Assert.assertTrue(it.next()
.startsWith("REMOVE baz AS 4 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD baz AS 6 (INTEGER) IN 1"));
Assert.assertTrue(it.next().startsWith("ADD count AS 1 (INTEGER) IN 1"));
List<String> audit = Lists.newArrayList(client.audit(1).values());
it = client.audit("age", 1).values().iterator();
Assert.assertEquals(it.next(), audit.get(4));
Assert.assertEquals(it.next(), audit.get(5));
Assert.assertEquals(it.next(), audit.get(6));
Assert.assertEquals(it.next(), audit.get(7));
Assert.assertEquals(it.next(), audit.get(8));
// Revert
Iterator<Timestamp> it2 = client.audit(1).keySet().iterator();
for (int i = 0; i < 11; i++) {
it2.next();
};
Timestamp t1 = it2.next();
client.revert("baz", 1, t1);
Assert.assertEquals(Sets.newHashSet(0, 1, 2), client.select("baz", 1));
// Historical Describe
Assert.assertTrue(client.describe(1,
Timestamp.fromMicros(Time.now() - 86400000000L)).isEmpty());
it2 = client.audit(1).keySet().iterator();
for (int i = 0; i < 8; i++) {
it2.next();
};
t1 = it2.next();
Assert.assertEquals(Sets.newHashSet("name", "age"),
client.describe(1, t1));
// Historical Fetch
it2 = client.audit(1).keySet().iterator();
for (int i = 0; i < 1; i++) {
it2.next();
};
t1 = it2.next();
Assert.assertEquals(Sets.newHashSet("John Doe", "Johnny Doe"),
client.select("name", 1, t1));
// Historical Find
t1 = client.audit(50).keySet().iterator().next();
Assert.assertTrue(client.find("count", Operator.GREATER_THAN, 50, t1)
.isEmpty());
t1 = client.audit(500).keySet().iterator().next();
set = client.find("count", Operator.GREATER_THAN, 50, t1);
for (long i = 51; i <= 500; i++) {
Assert.assertTrue(set.contains(i));
}
// Historical Verify
it2 = client.audit("age", 1).keySet().iterator();
for (int i = 0; i < 3; i++) {
it2.next();
};
t1 = it2.next();
Assert.assertTrue(client.verify("age", true, 1, t1));
// Search
String[] strings = { "The Cat in the Hat", "Green Eggs and Ham",
"Horton Hears a Who", "The Cat in the Hat Comes Back",
"Scrambled Eggs Super" };
Set<Long> expected = Sets.newHashSet();
for (int i = 0; i < 1000; i++) {
String value = strings[i % strings.length];
client.add("title", value, i);
if(value.contains("eggs")) {
expected.add((long) i);
}
}
Set<Long> actual = client.search("title", "eggs");
for (Long record : expected) {
Assert.assertTrue(actual.contains(record));
}
}
}