package org.jsr107.tck.integration;
import org.junit.Assert;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.fail;
/**
* Functional Tests for the {@link CacheLoaderClient} and {@link CacheLoaderServer}
* classes.
*
* @author Brian Oliver
*/
public class CacheLoaderClientServerTest {
/**
* Ensure that values can be loaded from the {@link CacheLoaderClient} via
* the {@link CacheLoaderServer}.
*/
@Test
public void shouldLoadFromServerWithClient() {
RecordingCacheLoader<String> recordingCacheLoader = new RecordingCacheLoader<String>();
CacheLoaderServer<String, String> serverCacheLoader = new CacheLoaderServer<String, String>(10000, recordingCacheLoader);
try {
serverCacheLoader.open();
CacheLoaderClient<String, String> clientCacheLoader = new CacheLoaderClient<>(serverCacheLoader.getInetAddress(), serverCacheLoader.getPort());
String value = clientCacheLoader.load("gudday");
Assert.assertThat(value, is(notNullValue()));
Assert.assertThat(value, is("gudday"));
Assert.assertThat(recordingCacheLoader.hasLoaded("gudday"), is(true));
} catch (Exception e) {
} finally {
serverCacheLoader.close();
}
}
/**
* Ensure that exceptions thrown by an underlying cache loader are re-thrown.
*/
@Test
public void shouldRethrowExceptions() {
FailingCacheLoader<String, String> failingCacheLoader = new FailingCacheLoader<>();
CacheLoaderServer<String, String> serverCacheLoader = new CacheLoaderServer<String, String>(10000, failingCacheLoader);
try {
serverCacheLoader.open();
CacheLoaderClient<String, String> clientCacheLoader = new CacheLoaderClient<>(serverCacheLoader.getInetAddress(), serverCacheLoader.getPort());
String value = clientCacheLoader.load("gudday");
fail("An UnsupportedOperationException should have been thrown");
} catch (Exception e) {
} finally {
serverCacheLoader.close();
}
}
/**
* Ensure that <code>null</code> entries can be passed from the
* {@link CacheLoaderServer} back to the {@link CacheLoaderClient}.
*/
@Test
public void shouldLoadNullValuesFromServerWithClient() {
NullValueCacheLoader<String, String> nullCacheLoader = new NullValueCacheLoader<>();
CacheLoaderServer<String, String> serverCacheLoader = new CacheLoaderServer<String, String>(10000, nullCacheLoader);
try {
serverCacheLoader.open();
CacheLoaderClient<String, String> clientCacheLoader = new CacheLoaderClient<>(serverCacheLoader.getInetAddress(), serverCacheLoader.getPort());
String value = clientCacheLoader.load("gudday");
Assert.assertThat(value, is(nullValue()));
} catch (Exception e) {
} finally {
serverCacheLoader.close();
}
}
}