fixes from review

This commit is contained in:
ghidravore 2019-09-04 17:51:02 -04:00
parent cbd270cec2
commit 99b3404873
3 changed files with 40 additions and 30 deletions

View file

@ -191,7 +191,7 @@ public class FileBytes {
return getBytes(originalBuffers, offset, b, off, length);
}
synchronized void checkValid() {
void checkValid() {
if (invalid) {
throw new ConcurrentModificationException();
}
@ -362,19 +362,25 @@ public class FileBytes {
@Override
public boolean equals(Object obj) {
if (this == obj)
if (this == obj) {
return true;
if (obj == null)
}
if (obj == null) {
return false;
if (getClass() != obj.getClass())
}
if (getClass() != obj.getClass()) {
return false;
}
FileBytes other = (FileBytes) obj;
if (adapter != other.adapter)
if (adapter != other.adapter) {
return false;
if (id != other.id)
}
if (id != other.id) {
return false;
if (invalid != other.invalid)
}
if (invalid != other.invalid) {
return false;
}
return true;
}

View file

@ -154,18 +154,23 @@ class FileBytesAdapterV0 extends FileBytesAdapter {
private DBBuffer[] createBuffers(long size, InputStream is) throws IOException {
int maxBufSize = getMaxBufferSize();
int bufCount = (int) (size + maxBufSize - 1) / maxBufSize;
int bufCount = (int) (size / maxBufSize);
int sizeLastBuf = (int) (size % maxBufSize);
// there is a remainder then we have one additional buffer
if (sizeLastBuf > 0) {
bufCount++;
}
else {
// divides evenly, so sizeLastBuf is full maxBuffSize
sizeLastBuf = maxBufSize;
}
DBBuffer[] buffers = new DBBuffer[bufCount];
int bufSize = maxBufSize;
int lastBufSize = (int) (size % maxBufSize);
for (int i = 0; i < bufCount; i++) {
if (lastBufSize != 0 && i == (bufCount - 1)) {
bufSize = lastBufSize;
}
buffers[i] = handle.createBuffer(bufSize);
for (int i = 0; i < bufCount - 1; i++) {
buffers[i] = handle.createBuffer(maxBufSize);
}
buffers[bufCount - 1] = handle.createBuffer(sizeLastBuf);
try {
for (DBBuffer buffer : buffers) {

View file

@ -45,10 +45,7 @@ public class FileBytesTest extends AbstractGenericTest {
private Program program;
private Memory mem;
private int transactionID;
public FileBytesTest() {
super();
}
private File tempDir;
@Test
public void testStoreAndRetrieveFileBytes() throws Exception {
@ -73,7 +70,7 @@ public class FileBytesTest extends AbstractGenericTest {
byte[] outBytes = new byte[200];
saveAndRestoreProgram();
saveAndRestoreProgram("A");
List<FileBytes> list = program.getMemory().getAllFileBytes();
fileBytes = list.get(0);
@ -93,7 +90,7 @@ public class FileBytesTest extends AbstractGenericTest {
int dataSize = MAX_BUFFER_SIZE_FOR_TESTING + MAX_BUFFER_SIZE_FOR_TESTING / 2;
FileBytes fileBytes = createFileBytes("testFile", dataSize);
saveAndRestoreProgram();
saveAndRestoreProgram("A");
byte[] outBytes = new byte[400];
List<FileBytes> list = program.getMemory().getAllFileBytes();
@ -118,7 +115,7 @@ public class FileBytesTest extends AbstractGenericTest {
createFileBytes("file2", 20);
createFileBytes("file3", 30);
saveAndRestoreProgram();
saveAndRestoreProgram("A");
List<FileBytes> fileBytesList = mem.getAllFileBytes();
assertEquals(3, fileBytesList.size());
assertEquals("file1", fileBytesList.get(0).getFilename());
@ -135,12 +132,12 @@ public class FileBytesTest extends AbstractGenericTest {
createFileBytes("file2", 20);
createFileBytes("file3", 30);
saveAndRestoreProgram();
saveAndRestoreProgram("A");
List<FileBytes> fileBytes = mem.getAllFileBytes();
mem.deleteFileBytes(fileBytes.get(1));
saveAndRestoreProgram();
saveAndRestoreProgram("B");
List<FileBytes> fileBytesList = mem.getAllFileBytes();
assertEquals(2, fileBytesList.size());
assertEquals("file1", fileBytesList.get(0).getFilename());
@ -253,17 +250,18 @@ public class FileBytesTest extends AbstractGenericTest {
}
}
private void saveAndRestoreProgram() throws Exception {
private void saveAndRestoreProgram(String dbName) throws Exception {
program.endTransaction(transactionID, true);
PrivateDatabase privateDatabase = saveProgram(program);
PrivateDatabase privateDatabase = saveProgram(program, dbName);
program.release(this);
program = restoreProgram(privateDatabase);
mem = program.getMemory();
transactionID = program.startTransaction("test");
}
private PrivateDatabase saveProgram(Program program) throws Exception {
File dir = createTempDirectory("program");
File dbDir = new File(dir, "program.db");
private PrivateDatabase saveProgram(Program program, String dbName) throws Exception {
File dbDir = new File(tempDir, dbName);
DBHandle dbh = ((ProgramDB) program).getDBHandle();
BufferFile bfile = PrivateDatabase.createDatabase(dbDir, null, dbh.getBufferSize());
@ -278,6 +276,7 @@ public class FileBytesTest extends AbstractGenericTest {
@Before
public void setUp() throws Exception {
tempDir = createTempDirectory("FileBytesTest");
FileBytesAdapter.setMaxBufferSize(MAX_BUFFER_SIZE_FOR_TESTING);
Language language = getLanguage("Toy:BE:64:default");
CompilerSpec compilerSpec = language.getDefaultCompilerSpec();