package org.infinispan.cdi.embedded.test.assertions;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.util.List;
import org.infinispan.cdi.embedded.test.event.CacheObserver;
import org.infinispan.distribution.ch.ConsistentHash;
import org.infinispan.notifications.cachelistener.event.CacheEntriesEvictedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryActivatedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryExpiredEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryInvalidatedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryLoadedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryPassivatedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryRemovedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryVisitedEvent;
import org.infinispan.notifications.cachelistener.event.DataRehashedEvent;
import org.infinispan.notifications.cachelistener.event.TopologyChangedEvent;
import org.infinispan.notifications.cachelistener.event.TransactionCompletedEvent;
import org.infinispan.notifications.cachelistener.event.TransactionRegisteredEvent;
import org.infinispan.notifications.cachemanagerlistener.event.CacheStartedEvent;
import org.infinispan.notifications.cachemanagerlistener.event.CacheStoppedEvent;
import org.infinispan.notifications.cachemanagerlistener.event.ViewChangedEvent;
import org.infinispan.remoting.transport.Address;
/**
* Observer custom assertion.
*
* @author Sebastian Laskawiec
*/
public class ObserverAssertion {
private CacheObserver observer;
private Class<?> cacheAnnotation;
private ObserverAssertion(CacheObserver observer, Class<?> cacheAnnotation) {
this.cacheAnnotation = cacheAnnotation;
this.observer = observer;
}
public static ObserverAssertion assertThat(CacheObserver observer, Class<?> cacheAnnotation) {
return new ObserverAssertion(observer, cacheAnnotation);
}
private <T> List<T> getNonEmptyListOfEvents(Class<T> eventClass) {
List<T> events = observer.getEventsMap().getEvents(cacheAnnotation, eventClass);
assertTrue(events.size() > 0);
return events;
}
public ObserverAssertion hasProperName(String cacheName) {
assertEquals(getNonEmptyListOfEvents(CacheStartedEvent.class).get(0).getCacheName(), cacheName);
return this;
}
public ObserverAssertion hasStartedEvent() {
getNonEmptyListOfEvents(CacheStartedEvent.class);
return this;
}
public ObserverAssertion hasStoppedEvent() {
getNonEmptyListOfEvents(CacheStoppedEvent.class);
return this;
}
public ObserverAssertion hasEntryCreatedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryCreatedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryRemovedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryRemovedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryActivatedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryActivatedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntriesEvictedEvent(String key) {
assertTrue(getNonEmptyListOfEvents(CacheEntriesEvictedEvent.class).get(0).getEntries().containsKey(key));
return this;
}
public ObserverAssertion hasEntryExpiredEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryExpiredEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryModifiedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryModifiedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryInvalidatedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryInvalidatedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryLoadedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryLoadedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryPassivatedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryPassivatedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasEntryVisitedEvent(String key) {
assertEquals(getNonEmptyListOfEvents(CacheEntryVisitedEvent.class).get(0).getKey(), key);
return this;
}
public ObserverAssertion hasDataRehashEvent(ConsistentHash newHash) {
assertEquals(getNonEmptyListOfEvents(DataRehashedEvent.class).get(0).getConsistentHashAtEnd(), newHash);
return this;
}
public ObserverAssertion hasTransactionCompletedEvent(boolean isSuccesful) {
assertEquals(getNonEmptyListOfEvents(TransactionCompletedEvent.class).get(0).isTransactionSuccessful(), isSuccesful);
return this;
}
public ObserverAssertion hasTransactionRegisteredEvent(boolean isOriginLocal) {
assertEquals(getNonEmptyListOfEvents(TransactionRegisteredEvent.class).get(0).isOriginLocal(), isOriginLocal);
return this;
}
public ObserverAssertion hasViewChangedEvent(Address myAddress) {
assertEquals(getNonEmptyListOfEvents(ViewChangedEvent.class).get(0).getLocalAddress(), myAddress);
return this;
}
public ObserverAssertion hasTopologyChangedEvent(int topologyId) {
assertEquals(getNonEmptyListOfEvents(TopologyChangedEvent.class).get(0).getNewTopologyId(), topologyId);
return this;
}
}