[jbosscache-commits] JBoss Cache SVN: r7788 - in core/branches/flat/src: test/java/org/horizon/loader and 1 other directory.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Wed Feb 25 12:29:45 EST 2009
Author: manik.surtani at jboss.com
Date: 2009-02-25 12:29:45 -0500 (Wed, 25 Feb 2009)
New Revision: 7788
Modified:
core/branches/flat/src/main/java/org/horizon/loader/CacheStore.java
core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java
Log:
More detailed fromStream()/toStream() contract and appropriate test
Modified: core/branches/flat/src/main/java/org/horizon/loader/CacheStore.java
===================================================================
--- core/branches/flat/src/main/java/org/horizon/loader/CacheStore.java 2009-02-25 16:42:15 UTC (rev 7787)
+++ core/branches/flat/src/main/java/org/horizon/loader/CacheStore.java 2009-02-25 17:29:45 UTC (rev 7788)
@@ -29,7 +29,14 @@
* implementation-specific format, typically generated using {@link #toStream(java.io.OutputStream)}. While not a
* requirement, it is recommended that implementations make use of the {@link org.horizon.marshall.Marshaller} when
* dealing with the stream to make use of efficient marshalling.
- *
+ * <p />
+ * It is imperative that implementations <b><i>do not</i></b> close the stream after finishing with it.
+ * <p />
+ * It is also <b><i>recommended</b></i> that implementations use their own start and end markers on the stream
+ * since other processes may write additional data to the stream after the cache store has written to it. As such,
+ * either markers or some other mechanism to prevent the store from reading too much information should be employed
+ * when writing to the stream in {@link #fromStream(java.io.InputStream)} to prevent data corruption.
+ * <p />
* @param inputStream stream to read from
* @throws CacheLoaderException in the event of problems writing to the store
*/
@@ -41,7 +48,14 @@
* <p/>
* While not a requirement, it is recommended that implementations make use of the {@link
* org.horizon.marshall.Marshaller} when dealing with the stream to make use of efficient marshalling.
- *
+ * <p />
+ * It is imperative that implementations <b><i>do not</i></b> close the stream after finishing with it.
+ * <p />
+ * It is also <b><i>recommended</b></i> that implementations use their own start and end markers on the stream
+ * since other processes may write additional data to the stream after the cache store has written to it. As such,
+ * either markers or some other mechanism to prevent the store from reading too much information in {@link #fromStream(java.io.InputStream)}
+ * should be employed, to prevent data corruption.
+ * <p />
* @param outputStream stream to write to
* @throws CacheLoaderException in the event of problems reading from the store
*/
Modified: core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java
===================================================================
--- core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java 2009-02-25 16:42:15 UTC (rev 7787)
+++ core/branches/flat/src/test/java/org/horizon/loader/BaseCacheStoreTest.java 2009-02-25 17:29:45 UTC (rev 7788)
@@ -248,7 +248,6 @@
ByteArrayOutputStream out = new ByteArrayOutputStream();
cs.toStream(out);
- out.flush();
out.close();
cs.clear();
cs.fromStream(new ByteArrayInputStream(out.toByteArray()));
@@ -264,6 +263,42 @@
assert expected.isEmpty();
}
+ public void testStreamingAPIReusingStreams() throws IOException, ClassNotFoundException, CacheLoaderException {
+ cs.store(new StoredEntry("k1", "v1", -1, -1));
+ cs.store(new StoredEntry("k2", "v2", -1, -1));
+ cs.store(new StoredEntry("k3", "v3", -1, -1));
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ byte[] dummyStartBytes = {1,2,3,4,5,6,7,8};
+ byte[] dummyEndBytes = {8,7,6,5,4,3,2,1};
+ out.write(dummyStartBytes);
+ cs.toStream(out);
+ out.write(dummyEndBytes);
+ out.close();
+ cs.clear();
+
+ // first pop the start bytes
+ byte[] dummy = new byte[8];
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ int bytesRead = in.read(dummy, 0, 8);
+ assert bytesRead == 8;
+ for (int i=1; i<9; i++) assert dummy[i - 1] == i : "Start byte stream corrupted!";
+ cs.fromStream(in);
+ bytesRead = in.read(dummy, 0, 8);
+ assert bytesRead == 8;
+ for (int i=8; i>0; i--) assert dummy[8 - i] == i : "Start byte stream corrupted!";
+
+ Set<StoredEntry> set = cs.loadAll();
+
+ assert set.size() == 3;
+ Set expected = new HashSet();
+ expected.add("k1");
+ expected.add("k2");
+ expected.add("k3");
+ for (StoredEntry se : set) assert expected.remove(se.getKey());
+ assert expected.isEmpty();
+ }
+
public void testConfigFile() throws Exception {
Class<? extends CacheLoaderConfig> cfgClass = cs.getConfigurationClass();
CacheLoaderConfig clc = Util.getInstance(cfgClass);
More information about the jbosscache-commits
mailing list