package org.infinispan.query.blackbox;
import java.util.List;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.cache.Index;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.query.CacheQuery;
import org.infinispan.query.Search;
import org.infinispan.query.test.CustomKey;
import org.infinispan.query.test.Person;
import org.infinispan.test.SingleCacheManagerTest;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.infinispan.transaction.TransactionMode;
import org.testng.annotations.Test;
/**
* Class that will put in different kinds of keys into the cache and run a query on it to see if
* different primitives will work as keys.
*
* @author Navin Surtani
*/
@Test(groups = "functional", testName = "query.blackbox.KeyTypeTest")
public class KeyTypeTest extends SingleCacheManagerTest {
Person person1;
public KeyTypeTest() {
cleanup = CleanupPhase.AFTER_METHOD;
}
@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
ConfigurationBuilder cfg = getDefaultStandaloneCacheConfig(true);
cfg
.transaction()
.transactionMode(TransactionMode.TRANSACTIONAL)
.indexing()
.index(Index.ALL)
.addIndexedEntity(Person.class)
.addProperty("default.directory_provider", "ram")
.addProperty("lucene_version", "LUCENE_CURRENT");
cacheManager = TestCacheManagerFactory.createCacheManager(cfg);
person1 = new Person();
person1.setName("Navin");
person1.setBlurb("Owns a macbook");
person1.setAge(20);
return cacheManager;
}
public void testPrimitiveAndStringKeys(){
String key1 = "key1";
int key2 = 2;
byte key3 = 3;
float key4 = 4;
long key5 = 5;
short key6 = 6;
boolean key7 = true;
double key8 = 8;
char key9 = '9';
cache.put(key1, person1);
cache.put(key2, person1);
cache.put(key3, person1);
cache.put(key4, person1);
cache.put(key5, person1);
cache.put(key6, person1);
cache.put(key7, person1);
cache.put(key8, person1);
cache.put(key9, person1);
// Going to search the 'blurb' field for 'owns'
Term term = new Term("blurb", "owns");
CacheQuery<Person> cacheQuery = Search.getSearchManager(cache).getQuery(new TermQuery(term));
assert cacheQuery.getResultSize() == 9;
List<Person> found = cacheQuery.list();
for (int i = 0; i < 9; i++){
assert found.get(i).equals(person1);
}
}
public void testCustomKeys(){
CustomKey key1 = new CustomKey(1, 2, 3);
CustomKey key2 = new CustomKey(900, 800, 700);
CustomKey key3 = new CustomKey(1024, 2048, 4096);
cache.put(key1, person1);
cache.put(key2, person1);
cache.put(key3, person1);
Term term = new Term("blurb", "owns");
CacheQuery<?> cacheQuery = Search.getSearchManager(cache).getQuery(new TermQuery(term));
int i;
assert (i = cacheQuery.getResultSize()) == 3 : "Expected 3, was " + i;
}
}