/*
* Copyright Terracotta, 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 org.ehcache.impl.internal.events;
import org.ehcache.core.spi.store.events.StoreEvent;
import org.ehcache.core.spi.store.events.StoreEventFilter;
import org.ehcache.core.spi.store.events.StoreEventListener;
import org.ehcache.event.EventType;
import org.hamcrest.Matcher;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import java.util.HashSet;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import static org.ehcache.core.internal.util.ValueSuppliers.supplierOf;
import static org.ehcache.impl.internal.store.offheap.AbstractOffHeapStoreTest.eventType;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verifyNoMoreInteractions;
/**
* InvocationScopedEventSinkTest
*/
public class InvocationScopedEventSinkTest {
private StoreEventListener<String, String> listener;
private InvocationScopedEventSink<String, String> eventSink;
@Before
@SuppressWarnings("unchecked")
public void setUp() {
HashSet<StoreEventListener<String, String>> storeEventListeners = new HashSet<StoreEventListener<String, String>>();
listener = mock(StoreEventListener.class);
storeEventListeners.add(listener);
eventSink = new InvocationScopedEventSink<String, String>(new HashSet<StoreEventFilter<String, String>>(),
false, new BlockingQueue[] { new ArrayBlockingQueue<FireableStoreEventHolder<String, String>>(10) }, storeEventListeners);
}
@Test
public void testReset() {
eventSink.created("k1", "v1");
eventSink.evicted("k1", supplierOf("v2"));
eventSink.reset();
eventSink.created("k1", "v1");
eventSink.updated("k1", supplierOf("v1"), "v2");
eventSink.evicted("k1", supplierOf("v2"));
eventSink.close();
InOrder inOrder = inOrder(listener);
Matcher<StoreEvent<String, String>> createdMatcher = eventType(EventType.CREATED);
inOrder.verify(listener).onEvent(argThat(createdMatcher));
Matcher<StoreEvent<String, String>> updatedMatcher = eventType(EventType.UPDATED);
inOrder.verify(listener).onEvent(argThat(updatedMatcher));
Matcher<StoreEvent<String, String>> evictedMatcher = eventType(EventType.EVICTED);
inOrder.verify(listener).onEvent(argThat(evictedMatcher));
verifyNoMoreInteractions(listener);
}
}