package org.infinispan.functional.impl;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
import java.util.Optional;
import org.infinispan.commons.api.functional.EntryVersion.NumericEntryVersion;
import org.infinispan.commons.api.functional.MetaParam.MetaCreated;
import org.infinispan.commons.api.functional.MetaParam.MetaEntryVersion;
import org.infinispan.commons.api.functional.MetaParam.MetaLastUsed;
import org.infinispan.commons.api.functional.MetaParam.MetaLifespan;
import org.infinispan.commons.api.functional.MetaParam.MetaMaxIdle;
import org.testng.annotations.Test;
/**
* Unit test for metadata parameters collection.
*/
@Test(groups = "functional", testName = "functional.impl.MetaParamsTest")
public class MetaParamsTest {
public void testEmptyMetaParamsFind() {
MetaParams metas = MetaParams.empty();
assertTrue(metas.isEmpty());
assertEquals(0, metas.size());
assertFalse(metas.find(MetaLifespan.class).isPresent());
assertFalse(metas.find(MetaEntryVersion.class).isPresent());
assertFalse(metas.find(MetaMaxIdle.class).isPresent());
}
@Test
public void testAddFindMetaParam() {
MetaParams metas = MetaParams.empty();
MetaLifespan lifespan = new MetaLifespan(1000);
metas.add(lifespan);
assertFalse(metas.isEmpty());
assertEquals(1, metas.size());
Optional<MetaLifespan> lifespanFound = metas.find(MetaLifespan.class);
assertEquals(new MetaLifespan(1000), lifespanFound.get());
assertEquals(1000, metas.find(MetaLifespan.class).get().get().longValue());
assertFalse(new MetaLifespan(900).equals(lifespanFound.get()));
metas.add(new MetaLifespan(900));
assertFalse(metas.isEmpty());
assertEquals(1, metas.size());
assertEquals(Optional.of(new MetaLifespan(900)), metas.find(lifespan.getClass()));
}
@Test
public void testAddFindMultipleMetaParams() {
MetaParams metas = MetaParams.empty();
metas.addMany(new MetaLifespan(1000), new MetaMaxIdle(1000), new MetaEntryVersion<>(new NumericEntryVersion(12345)));
assertFalse(metas.isEmpty());
assertEquals(3, metas.size());
Optional<MetaMaxIdle> maxIdle = metas.find(MetaMaxIdle.class);
Class<MetaEntryVersion<Long>> type = MetaEntryVersion.type();
Optional<MetaEntryVersion<Long>> entryVersion = metas.find(type);
assertEquals(Optional.of(new MetaMaxIdle(1000)), maxIdle);
assertFalse(900 == maxIdle.get().get().longValue());
assertEquals(new MetaEntryVersion<>(new NumericEntryVersion(12345)), entryVersion.get());
assertFalse(new MetaEntryVersion<>(new NumericEntryVersion(23456)).equals(entryVersion.get()));
}
@Test
public void testReplaceFindMultipleMetaParams() {
MetaParams metas = MetaParams.empty();
metas.addMany(new MetaLifespan(1000), new MetaMaxIdle(1000), new MetaEntryVersion<>(new NumericEntryVersion(12345)));
assertFalse(metas.isEmpty());
assertEquals(3, metas.size());
metas.addMany(new MetaLifespan(2000), new MetaMaxIdle(2000));
assertFalse(metas.isEmpty());
assertEquals(3, metas.size());
assertEquals(Optional.of(new MetaMaxIdle(2000)), metas.find(MetaMaxIdle.class));
assertEquals(Optional.of(new MetaLifespan(2000)), metas.find(MetaLifespan.class));
assertEquals(Optional.of(new MetaEntryVersion<>(new NumericEntryVersion(12345))),
metas.find(MetaEntryVersion.class));
}
@Test
public void testConstructors() {
MetaParams metasOf1 = MetaParams.of(new MetaCreated(1000));
assertFalse(metasOf1.isEmpty());
assertEquals(1, metasOf1.size());
MetaParams metasOf2 = MetaParams.of(new MetaCreated(1000), new MetaLastUsed(2000));
assertFalse(metasOf2.isEmpty());
assertEquals(2, metasOf2.size());
MetaParams metasOf4 = MetaParams.of(
new MetaCreated(1000), new MetaLastUsed(2000), new MetaLifespan(3000), new MetaMaxIdle(4000));
assertFalse(metasOf4.isEmpty());
assertEquals(4, metasOf4.size());
}
@Test
public void testDuplicateParametersOnConstruction() {
MetaEntryVersion<Long> versionParam1 = new MetaEntryVersion<>(new NumericEntryVersion(100));
MetaEntryVersion<Long> versionParam2 = new MetaEntryVersion<>(new NumericEntryVersion(200));
MetaParams metas = MetaParams.of(versionParam1, versionParam2);
assertEquals(1, metas.size());
assertEquals(Optional.of(new MetaEntryVersion<>(new NumericEntryVersion(200))),
metas.find(MetaEntryVersion.class));
}
@Test
public void testDuplicateParametersOnAdd() {
MetaEntryVersion<Long> versionParam1 = new MetaEntryVersion<>(new NumericEntryVersion(100));
MetaParams metas = MetaParams.of(versionParam1);
assertEquals(1, metas.size());
assertEquals(Optional.of(new MetaEntryVersion<>(new NumericEntryVersion(100))),
metas.find(MetaEntryVersion.class));
MetaEntryVersion<Long> versionParam2 = new MetaEntryVersion<>(new NumericEntryVersion(200));
metas.add(versionParam2);
assertEquals(1, metas.size());
assertEquals(Optional.of(new MetaEntryVersion<>(new NumericEntryVersion(200))),
metas.find(MetaEntryVersion.class));
MetaEntryVersion<Long> versionParam3 = new MetaEntryVersion<>(new NumericEntryVersion(300));
MetaEntryVersion<Long> versionParam4 = new MetaEntryVersion<>(new NumericEntryVersion(400));
metas.addMany(versionParam3, versionParam4);
assertEquals(1, metas.size());
assertEquals(Optional.of(new MetaEntryVersion<>(new NumericEntryVersion(400))),
metas.find(MetaEntryVersion.class));
}
}