package org.jsr107.tck.integration; import org.junit.Assert; import org.junit.Test; import javax.cache.Cache; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.fail; /** * Functional Tests for the {@link CacheWriterClient} and {@link CacheWriterServer} * classes. * * @author Joe Fialli */ public class CacheWriterClientServerTest { /** * Ensure that entry can be written from the {@link CacheWriterClient} via * the {@link CacheWriterServer}. */ @Test public void shouldWriteFromServerWithClient() { RecordingCacheWriter<String, String> recordingCacheWriter = new RecordingCacheWriter<>(); CacheWriterServer<String, String> serverCacheWriter = new CacheWriterServer<>(10000, recordingCacheWriter); try { serverCacheWriter.open(); CacheWriterClient<String, String> clientCacheWriter = new CacheWriterClient<>(serverCacheWriter.getInetAddress(), serverCacheWriter.getPort()); Cache.Entry<String, String> entry = new Entry<>("hello", "gudday"); clientCacheWriter.write(entry); String writtenValue = recordingCacheWriter.get("hello"); Assert.assertThat(writtenValue, is(notNullValue())); Assert.assertThat(writtenValue, is("gudday")); Assert.assertThat(recordingCacheWriter.hasWritten("hello"), is(true)); } catch (Exception e) {} finally { serverCacheWriter.close(); } } /** * Ensure that exceptions thrown by an underlying cache Writer are re-thrown. */ @Test public void shouldRethrowExceptions() { FailingCacheWriter<String, String> failingCacheWriter = new FailingCacheWriter<>(); CacheWriterServer<String, String> serverCacheWriter = new CacheWriterServer<>(10000, failingCacheWriter); try { serverCacheWriter.open(); CacheWriterClient<String, String> clientCacheWriter = new CacheWriterClient<>(serverCacheWriter.getInetAddress(), serverCacheWriter.getPort()); Cache.Entry<String, String> entry = new Entry<>("hello", "gudday"); clientCacheWriter.write(entry); fail("An UnsupportedOperationException should have been thrown"); } catch (Exception e) {} finally { serverCacheWriter.close(); } } /** * Ensure that <code>null</code> entries can be passed from the * {@link CacheWriterServer} back to the {@link CacheWriterClient}. */ /* * @Test * public void shouldLoadNullEntriesFromServerWithClient() { * * NullEntryCacheWriter<String, String> nullCacheWriter = new NullEntryCacheWriter<>(); * * CacheWriterServer<String, String> serverCacheWriter = * new CacheWriterServer<String, String>(10000, nullCacheWriter); * * try { * serverCacheWriter.open(); * * CacheWriterClient<String, String> clientCacheWriter = * new CacheWriterClient<>(serverCacheWriter.getInetAddress(), serverCacheWriter.getPort()); * * Cache.Entry<String, String> entry = new Entry<String,String>("hello", "gudday"); * * Cache.Entry<String, String> entry = clientCacheWriter.write(entry); * * Assert.assertThat(entry, is(nullValue())); * } catch (Exception e) { * * } finally { * serverCacheWriter.close(); * } * } */ private static class Entry<K, V> implements Cache.Entry<K, V> { private K key; private V value; public Entry(K key, V value) { setKey(key); setValue(value); } @Override public K getKey() { throw new UnsupportedOperationException("not implemented"); } @Override public V getValue() { throw new UnsupportedOperationException("not implemented"); } @Override public <T> T unwrap(Class<T> clazz) { throw new UnsupportedOperationException("not implemented"); } public void setKey(K key) { this.key = key; } public void setValue(V value) { this.value = value; } } }