cache: split storage apart from Store
This commit is contained in:
@@ -28,6 +28,7 @@ import java.io.File;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import net.runelite.cache.CacheProperties;
|
||||
import net.runelite.cache.fs.Store;
|
||||
import net.runelite.cache.fs.tree.TreeStorage;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
@@ -50,10 +51,10 @@ public class CacheClientTest
|
||||
@Ignore
|
||||
public void test() throws Exception
|
||||
{
|
||||
try (Store store = new Store(new File("d:/temp")))
|
||||
try (Store store = new Store(new File("D:\\rs\\07\\temp\\cache")))
|
||||
{
|
||||
store.load();
|
||||
|
||||
|
||||
CacheClient c = new CacheClient(store, CacheProperties.getRsVersion());
|
||||
c.connect();
|
||||
CompletableFuture<Integer> handshake = c.handshake();
|
||||
@@ -62,11 +63,11 @@ public class CacheClientTest
|
||||
logger.info("Handshake result: {}", result);
|
||||
|
||||
Assert.assertEquals(0, (int) result);
|
||||
|
||||
|
||||
c.download();
|
||||
|
||||
c.close();
|
||||
|
||||
|
||||
store.save();
|
||||
}
|
||||
}
|
||||
@@ -77,8 +78,9 @@ public class CacheClientTest
|
||||
{
|
||||
try (Store store = new Store(new File("C:\\rs\\temp")))
|
||||
{
|
||||
store.loadTree(new File("C:\\rs\\runescape-data\\cache"));
|
||||
|
||||
TreeStorage storage = new TreeStorage(new File("C:\\rs\\runescape-data\\cache"));
|
||||
storage.load(store);
|
||||
|
||||
CacheClient c = new CacheClient(store, CacheProperties.getRsVersion());
|
||||
c.connect();
|
||||
CompletableFuture<Integer> handshake = c.handshake();
|
||||
@@ -87,12 +89,13 @@ public class CacheClientTest
|
||||
logger.info("Handshake result: {}", result);
|
||||
|
||||
Assert.assertEquals(0, (int) result);
|
||||
|
||||
|
||||
c.download();
|
||||
|
||||
c.close();
|
||||
|
||||
store.saveTree(new File("C:\\rs\\temp\\t"));
|
||||
|
||||
storage = new TreeStorage(new File("C:\\rs\\temp\\t"));
|
||||
storage.save(store);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.cache.fs;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import net.runelite.cache.StoreLocation;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
|
||||
public class DataFileTest
|
||||
{
|
||||
@Rule
|
||||
public TemporaryFolder folder = StoreLocation.getTemporaryFolder();
|
||||
|
||||
@Test
|
||||
public void test1() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
DataFile df = new DataFile(store, file);
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.NONE, 0, null);
|
||||
DataFileWriteResult res = df.write(42, 3, compressedData, 0);
|
||||
|
||||
compressedData = df.read(42, 3, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
|
||||
Assert.assertEquals(res.crc, res2.crc);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test2() throws IOException
|
||||
{
|
||||
byte[] b = new byte[1024];
|
||||
for (int i = 0; i < 1024; ++i)
|
||||
{
|
||||
b[i] = (byte) i;
|
||||
}
|
||||
|
||||
File file = folder.newFile();
|
||||
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
DataFile df = new DataFile(store, file);
|
||||
|
||||
byte[] compressedData = DataFile.compress(b, CompressionType.BZ2, 42, null);
|
||||
DataFileWriteResult res = df.write(42, 0x1FFFF, compressedData, 42);
|
||||
|
||||
compressedData = df.read(42, 0x1FFFF, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
Assert.assertArrayEquals(b, buf);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGZipCompression() throws IOException
|
||||
{
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
DataFile df = new DataFile(store, folder.newFile());
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.GZ, 0, null);
|
||||
DataFileWriteResult res = df.write(41, 4, compressedData, 0);
|
||||
|
||||
compressedData = df.read(41, 4, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBZip2Compression() throws IOException
|
||||
{
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
DataFile df = new DataFile(store, folder.newFile());
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.BZ2, 5, null);
|
||||
DataFileWriteResult res = df.write(41, 4, compressedData, 0);
|
||||
|
||||
compressedData = df.read(41, 4, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCrc() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
DataFile df = new DataFile(store, file);
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.NONE, 42, null);
|
||||
DataFileWriteResult res = df.write(42, 3, compressedData, 0);
|
||||
|
||||
compressedData = df.read(42, 3, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
Assert.assertEquals(res.crc, res2.crc);
|
||||
Assert.assertEquals(42, res2.revision);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKeys() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
int[] keys = new int[] { 4, 8, 15, 16 };
|
||||
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
DataFile df = new DataFile(store, file);
|
||||
|
||||
byte[] compressedData = DataFile.compress("testtesttesttest1".getBytes(), CompressionType.NONE, 42, keys);
|
||||
DataFileWriteResult res = df.write(42, 3, compressedData, 0);
|
||||
|
||||
compressedData = df.read(42, 3, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, keys);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("testtesttesttest1", str);
|
||||
Assert.assertEquals(res.crc, res2.crc);
|
||||
Assert.assertEquals(42, res2.revision);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import com.google.common.io.Files;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import net.runelite.cache.StoreLocation;
|
||||
import net.runelite.cache.fs.tree.TreeStorage;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
@@ -70,6 +71,10 @@ public class StoreLoadTest
|
||||
Assert.assertTrue(store.equals(testStore));
|
||||
|
||||
testStore.save();
|
||||
}
|
||||
|
||||
try (Store testStore = new Store(testStoreFile))
|
||||
{
|
||||
testStore.load();
|
||||
|
||||
Assert.assertTrue(store.equals(testStore));
|
||||
@@ -86,7 +91,8 @@ public class StoreLoadTest
|
||||
{
|
||||
store.load();
|
||||
|
||||
store.saveTree(folder.newFolder());
|
||||
TreeStorage storage = new TreeStorage(folder.newFolder());
|
||||
storage.save(store);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,8 +102,9 @@ public class StoreLoadTest
|
||||
{
|
||||
try (Store store = new Store(folder.newFolder()))
|
||||
{
|
||||
store.loadTree(new File("C:\\rs\\temp\\tree"));
|
||||
|
||||
TreeStorage storage = new TreeStorage(new File("C:\\rs\\temp\\tree"));
|
||||
storage.load(store);
|
||||
|
||||
try (Store store2 = new Store(StoreLocation.LOCATION))
|
||||
{
|
||||
store2.load();
|
||||
@@ -114,7 +121,9 @@ public class StoreLoadTest
|
||||
try (Store store = new Store(new File("d:/rs/07/temp/cache")))
|
||||
{
|
||||
store.load();
|
||||
store.saveTree(new File("d:/rs/07/temp/tree"));
|
||||
|
||||
TreeStorage storage = new TreeStorage(new File("d:/rs/07/temp/tree"));
|
||||
storage.save(store);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
import net.runelite.cache.StoreLocation;
|
||||
import net.runelite.cache.fs.tree.TreeStorage;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
@@ -150,11 +151,13 @@ public class StoreTest
|
||||
|
||||
// Test tree save/load
|
||||
File tree = folder.newFolder();
|
||||
store.saveTree(tree);
|
||||
Storage treeStorage = new TreeStorage(tree);
|
||||
|
||||
try (Store store2 = new Store(folder.newFolder()))
|
||||
treeStorage.save(store);
|
||||
|
||||
try (Store store2 = new Store(treeStorage))
|
||||
{
|
||||
store2.loadTree(tree);
|
||||
store2.load();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
156
cache/src/test/java/net/runelite/cache/fs/jagex/DataFileTest.java
vendored
Normal file
156
cache/src/test/java/net/runelite/cache/fs/jagex/DataFileTest.java
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017, Adam <Adam@sigterm.info>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.cache.fs.jagex;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import net.runelite.cache.StoreLocation;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
|
||||
public class DataFileTest
|
||||
{
|
||||
@Rule
|
||||
public TemporaryFolder folder = StoreLocation.getTemporaryFolder();
|
||||
|
||||
@Test
|
||||
public void test1() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
DataFile df = new DataFile(file);
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.NONE, 0, null);
|
||||
DataFileWriteResult res = df.write(42, 3, compressedData, 0);
|
||||
|
||||
compressedData = df.read(42, 3, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
|
||||
Assert.assertEquals(res.crc, res2.crc);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test2() throws IOException
|
||||
{
|
||||
byte[] b = new byte[1024];
|
||||
for (int i = 0; i < 1024; ++i)
|
||||
{
|
||||
b[i] = (byte) i;
|
||||
}
|
||||
|
||||
File file = folder.newFile();
|
||||
|
||||
DataFile df = new DataFile(file);
|
||||
|
||||
byte[] compressedData = DataFile.compress(b, CompressionType.BZ2, 42, null);
|
||||
DataFileWriteResult res = df.write(42, 0x1FFFF, compressedData, 42);
|
||||
|
||||
compressedData = df.read(42, 0x1FFFF, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
Assert.assertArrayEquals(b, buf);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGZipCompression() throws IOException
|
||||
{
|
||||
DataFile df = new DataFile(folder.newFile());
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.GZ, 0, null);
|
||||
DataFileWriteResult res = df.write(41, 4, compressedData, 0);
|
||||
|
||||
compressedData = df.read(41, 4, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBZip2Compression() throws IOException
|
||||
{
|
||||
DataFile df = new DataFile(folder.newFile());
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.BZ2, 5, null);
|
||||
DataFileWriteResult res = df.write(41, 4, compressedData, 0);
|
||||
|
||||
compressedData = df.read(41, 4, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCrc() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
DataFile df = new DataFile(file);
|
||||
|
||||
byte[] compressedData = DataFile.compress("test".getBytes(), CompressionType.NONE, 42, null);
|
||||
DataFileWriteResult res = df.write(42, 3, compressedData, 0);
|
||||
|
||||
compressedData = df.read(42, 3, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, null);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("test", str);
|
||||
Assert.assertEquals(res.crc, res2.crc);
|
||||
Assert.assertEquals(42, res2.revision);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKeys() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
int[] keys = new int[]
|
||||
{
|
||||
4, 8, 15, 16
|
||||
};
|
||||
|
||||
DataFile df = new DataFile(file);
|
||||
|
||||
byte[] compressedData = DataFile.compress("testtesttesttest1".getBytes(), CompressionType.NONE, 42, keys);
|
||||
DataFileWriteResult res = df.write(42, 3, compressedData, 0);
|
||||
|
||||
compressedData = df.read(42, 3, res.sector, res.compressedLength);
|
||||
DataFileReadResult res2 = DataFile.decompress(compressedData, keys);
|
||||
|
||||
byte[] buf = res2.data;
|
||||
String str = new String(buf);
|
||||
Assert.assertEquals("testtesttesttest1", str);
|
||||
Assert.assertEquals(res.crc, res2.crc);
|
||||
Assert.assertEquals(42, res2.revision);
|
||||
}
|
||||
}
|
||||
@@ -22,8 +22,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.runelite.cache.fs;
|
||||
package net.runelite.cache.fs.jagex;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -37,18 +36,15 @@ public class IndexFileTest
|
||||
{
|
||||
@Rule
|
||||
public TemporaryFolder folder = StoreLocation.getTemporaryFolder();
|
||||
|
||||
|
||||
@Test
|
||||
public void test() throws IOException
|
||||
{
|
||||
File file = folder.newFile();
|
||||
try (Store store = new Store(folder.getRoot()))
|
||||
{
|
||||
IndexFile index = new IndexFile(store, 5, file);
|
||||
IndexEntry entry = new IndexEntry(index, 7, 8, 9);
|
||||
index.write(entry);
|
||||
IndexEntry entry2 = index.read(7);
|
||||
Assert.assertEquals(entry, entry2);
|
||||
}
|
||||
IndexFile index = new IndexFile(5, file);
|
||||
IndexEntry entry = new IndexEntry(index, 7, 8, 9);
|
||||
index.write(entry);
|
||||
IndexEntry entry2 = index.read(7);
|
||||
Assert.assertEquals(entry, entry2);
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,8 @@ public class CacheServerTest
|
||||
|
||||
server.start();
|
||||
|
||||
try (Store store2 = new Store(folder.newFolder()); CacheClient client = new CacheClient(store2, HOST, REVISION))
|
||||
try (Store store2 = new Store(folder.newFolder());
|
||||
CacheClient client = new CacheClient(store2, HOST, REVISION))
|
||||
{
|
||||
client.connect();
|
||||
client.handshake().get();
|
||||
|
||||
Reference in New Issue
Block a user