From 7ccd74458c48f2af89f676f4cb7e926618bee0c5 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 11 Sep 2017 16:59:48 -0400 Subject: [PATCH] cache: fix tree storage test by sorting files prior to adding Change archive.addFile(int) -> addFile(FSFile) --- .../runelite/cache/client/CacheClient.java | 3 ++- .../java/net/runelite/cache/fs/Archive.java | 3 +-- .../runelite/cache/fs/jagex/DiskStorage.java | 3 ++- .../runelite/cache/fs/tree/TreeStorage.java | 19 +++++++++++++------ .../java/net/runelite/cache/fs/StoreTest.java | 15 ++++++++++----- .../cache/server/CacheServerTest.java | 3 ++- 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/client/CacheClient.java b/cache/src/main/java/net/runelite/cache/client/CacheClient.java index c5948d2ebc..b57dd86c4f 100644 --- a/cache/src/main/java/net/runelite/cache/client/CacheClient.java +++ b/cache/src/main/java/net/runelite/cache/client/CacheClient.java @@ -306,8 +306,9 @@ public class CacheClient implements AutoCloseable archive.clearFiles(); for (FileData fd : ad.getFiles()) { - FSFile file = archive.addFile(fd.getId()); + FSFile file = new FSFile(fd.getId()); file.setNameHash(fd.getNameHash()); + archive.addFile(file); } CompletableFuture future = requestFile(index.getId(), ad.getId(), false); diff --git a/cache/src/main/java/net/runelite/cache/fs/Archive.java b/cache/src/main/java/net/runelite/cache/fs/Archive.java index bc55180bcb..0821c9416b 100644 --- a/cache/src/main/java/net/runelite/cache/fs/Archive.java +++ b/cache/src/main/java/net/runelite/cache/fs/Archive.java @@ -113,9 +113,8 @@ public class Archive this.data = data; } - public FSFile addFile(int id) + public FSFile addFile(FSFile file) { - FSFile file = new FSFile(id); this.files.addFile(file); return file; } diff --git a/cache/src/main/java/net/runelite/cache/fs/jagex/DiskStorage.java b/cache/src/main/java/net/runelite/cache/fs/jagex/DiskStorage.java index 5135cd6dc3..36bc07c9ed 100644 --- a/cache/src/main/java/net/runelite/cache/fs/jagex/DiskStorage.java +++ b/cache/src/main/java/net/runelite/cache/fs/jagex/DiskStorage.java @@ -137,8 +137,9 @@ public class DiskStorage implements Storage for (FileData fd : ad.getFiles()) { - FSFile file = archive.addFile(fd.getId()); + FSFile file = new FSFile(fd.getId()); file.setNameHash(fd.getNameHash()); + archive.addFile(file); } } diff --git a/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java b/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java index cefa0d1b7d..8a8bd355ec 100644 --- a/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java +++ b/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java @@ -28,6 +28,7 @@ import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import net.runelite.cache.fs.Archive; @@ -127,9 +128,10 @@ public class TreeStorage implements Storage byte[] data = Files.toByteArray(from); - FSFile file = archive.addFile(fileId); + FSFile file = new FSFile(fileId); file.setNameHash(nameHash); file.setContents(data); + archive.addFile(file); File archiveFile = new File(parent, archive.getArchiveId() + ".rev"); int rev = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); @@ -152,8 +154,9 @@ public class TreeStorage implements Storage assert archiveId == archive.getArchiveId(); - FSFile file = archive.addFile(fileId); + FSFile file = new FSFile(fileId); file.setNameHash(nameHash); + archive.addFile(file); byte[] contents = Files.toByteArray(from); file.setContents(contents); @@ -169,6 +172,8 @@ public class TreeStorage implements Storage public void loadTree(Archive archive, File parent, File from) throws IOException { + List files = new ArrayList<>(); + for (File file : from.listFiles()) { //fileId-fileName.dat @@ -178,13 +183,18 @@ public class TreeStorage implements Storage int fileId = Integer.parseInt(split[0]); int fileName = (int) Long.parseLong(split[1], 16); - FSFile f = archive.addFile(fileId); + FSFile f = new FSFile(fileId); f.setNameHash(fileName); + files.add(f); byte[] contents = Files.toByteArray(file); f.setContents(contents); } + // the filesystem may order these differently (eg, 1, 10, 2) + Collections.sort(files, (f1, f2) -> Integer.compare(f1.getFileId(), f2.getFileId())); + files.forEach(archive::addFile); + File archiveFile = new File(parent, archive.getArchiveId() + ".rev"); int rev = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); archive.setRevision(rev); @@ -192,9 +202,6 @@ public class TreeStorage implements Storage archiveFile = new File(parent, archive.getArchiveId() + ".name"); int name = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); archive.setNameHash(name); - - // the filesystem may order these differently (eg, 1, 10, 2) - Collections.sort(archive.getFiles(), (f1, f2) -> Integer.compare(f1.getFileId(), f2.getFileId())); } @Override diff --git a/cache/src/test/java/net/runelite/cache/fs/StoreTest.java b/cache/src/test/java/net/runelite/cache/fs/StoreTest.java index 534bf70c53..101652b59a 100644 --- a/cache/src/test/java/net/runelite/cache/fs/StoreTest.java +++ b/cache/src/test/java/net/runelite/cache/fs/StoreTest.java @@ -48,7 +48,8 @@ public class StoreTest { Index index = store.addIndex(0); Archive archive = index.addArchive(0); - FSFile file = archive.addFile(0); + FSFile file = new FSFile(0); + archive.addFile(file); file.setNameHash(7); file.setContents("test".getBytes()); @@ -77,8 +78,9 @@ public class StoreTest for (int i = 0; i < NUMBER_OF_FILES; ++i) { - FSFile file = archive.addFile(i); + FSFile file = new FSFile(i); file.setNameHash(random.nextInt()); + archive.addFile(file); byte[] data = new byte[random.nextInt(1024)]; random.nextBytes(data); file.setContents(data); @@ -115,8 +117,9 @@ public class StoreTest for (int i = 0; i < NUMBER_OF_FILES; ++i) { - FSFile file = archive.addFile(i); + FSFile file = new FSFile(i); file.setNameHash(random.nextInt(Integer.MAX_VALUE)); + archive.addFile(file); byte[] data = new byte[random.nextInt(1024)]; random.nextBytes(data); file.setContents(data); @@ -124,8 +127,9 @@ public class StoreTest for (int i = 0; i < NUMBER_OF_FILES; ++i) { - FSFile file = archive2.addFile(i); + FSFile file = new FSFile(i); file.setNameHash(random.nextInt(Integer.MAX_VALUE)); + archive2.addFile(file); byte[] data = new byte[random.nextInt(1024)]; random.nextBytes(data); file.setContents(data); @@ -133,8 +137,9 @@ public class StoreTest for (int i = 0; i < NUMBER_OF_FILES; ++i) { - FSFile file = archive3.addFile(i); + FSFile file = new FSFile(i); file.setNameHash(random.nextInt(Integer.MAX_VALUE)); + archive3.addFile(file); byte[] data = new byte[random.nextInt(1024)]; random.nextBytes(data); file.setContents(data); diff --git a/cache/src/test/java/net/runelite/cache/server/CacheServerTest.java b/cache/src/test/java/net/runelite/cache/server/CacheServerTest.java index 00310a258b..a003e9b546 100644 --- a/cache/src/test/java/net/runelite/cache/server/CacheServerTest.java +++ b/cache/src/test/java/net/runelite/cache/server/CacheServerTest.java @@ -115,9 +115,10 @@ public class CacheServerTest { Index index = store.addIndex(0); Archive archive = index.addArchive(0); - FSFile file = archive.addFile(0); + FSFile file = new FSFile(0); file.setNameHash(7); file.setContents("test".getBytes()); + archive.addFile(file); } }