mirror of https://github.com/zlatinb/muwire
wip on persistence tests
parent
206ee8a8dc
commit
b86f81159e
|
@ -19,7 +19,7 @@ class PersisterService {
|
||||||
final Timer timer
|
final Timer timer
|
||||||
final def fileSource
|
final def fileSource
|
||||||
|
|
||||||
PersisterService(File location, EventBus listener, int interval, def FileSource) {
|
PersisterService(File location, EventBus listener, int interval, def fileSource) {
|
||||||
this.location = location
|
this.location = location
|
||||||
this.listener = listener
|
this.listener = listener
|
||||||
this.interval = interval
|
this.interval = interval
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.muwire.core.files
|
package com.muwire.core.files
|
||||||
|
|
||||||
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
import com.muwire.core.EventBus
|
import com.muwire.core.EventBus
|
||||||
|
@ -10,20 +11,51 @@ import groovy.json.JsonOutput
|
||||||
import groovy.util.GroovyTestCase
|
import groovy.util.GroovyTestCase
|
||||||
import net.i2p.data.Base32
|
import net.i2p.data.Base32
|
||||||
|
|
||||||
class PersisterServiceTest extends GroovyTestCase {
|
class PersisterServiceTest {
|
||||||
|
|
||||||
@Test
|
class Listener {
|
||||||
void testName() {
|
def publishedFiles = []
|
||||||
File sharedDir = new File("sharedDir")
|
def onFileLoadedEvent(FileLoadedEvent e) {
|
||||||
|
publishedFiles.add(e.loadedFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EventBus eventBus
|
||||||
|
Listener listener
|
||||||
|
File sharedDir
|
||||||
|
File sharedFile1
|
||||||
|
|
||||||
|
@Before
|
||||||
|
void setup() {
|
||||||
|
eventBus = new EventBus()
|
||||||
|
listener = new Listener()
|
||||||
|
eventBus.register(FileLoadedEvent.class, listener)
|
||||||
|
|
||||||
|
sharedDir = new File("sharedDir")
|
||||||
sharedDir.mkdir()
|
sharedDir.mkdir()
|
||||||
sharedDir.deleteOnExit()
|
sharedDir.deleteOnExit()
|
||||||
|
|
||||||
File sharedFile1 = new File(sharedDir,"file1")
|
sharedFile1 = new File(sharedDir,"file1")
|
||||||
sharedFile1.deleteOnExit()
|
sharedFile1.deleteOnExit()
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeToSharedFile(int size) {
|
||||||
FileOutputStream fos = new FileOutputStream(sharedFile1);
|
FileOutputStream fos = new FileOutputStream(sharedFile1);
|
||||||
fos.write new byte[1]
|
fos.write new byte[size]
|
||||||
fos.close()
|
fos.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
private File initPersisted() {
|
||||||
|
File persisted = new File("persisted")
|
||||||
|
if (persisted.exists())
|
||||||
|
persisted.delete()
|
||||||
|
persisted.deleteOnExit()
|
||||||
|
persisted
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test1SharedFile1Piece() {
|
||||||
|
writeToSharedFile(1)
|
||||||
FileHasher fh = new FileHasher()
|
FileHasher fh = new FileHasher()
|
||||||
InfoHash ih1 = fh.hashFile(sharedFile1)
|
InfoHash ih1 = fh.hashFile(sharedFile1)
|
||||||
|
|
||||||
|
@ -35,29 +67,53 @@ class PersisterServiceTest extends GroovyTestCase {
|
||||||
|
|
||||||
json = JsonOutput.toJson(json)
|
json = JsonOutput.toJson(json)
|
||||||
|
|
||||||
File persisted = new File("persisted")
|
File persisted = initPersisted()
|
||||||
if (persisted.exists())
|
|
||||||
persisted.delete()
|
|
||||||
persisted.deleteOnExit()
|
|
||||||
persisted.write json
|
persisted.write json
|
||||||
|
|
||||||
SharedFile loadedFile
|
|
||||||
def eventListener = new Object() {
|
|
||||||
def onFileLoadedEvent(FileLoadedEvent e) {
|
|
||||||
loadedFile = e.loadedFile
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EventBus eventBus = new EventBus()
|
|
||||||
eventBus.register(FileLoadedEvent.class, eventListener)
|
|
||||||
|
|
||||||
PersisterService ps = new PersisterService(persisted, eventBus, 100, null)
|
PersisterService ps = new PersisterService(persisted, eventBus, 100, null)
|
||||||
ps.start()
|
ps.start()
|
||||||
Thread.sleep(2000)
|
Thread.sleep(2000)
|
||||||
|
|
||||||
|
assert listener.publishedFiles.size() == 1
|
||||||
|
def loadedFile = listener.publishedFiles[0]
|
||||||
assert loadedFile != null
|
assert loadedFile != null
|
||||||
assert loadedFile.file == sharedFile1.getCanonicalFile()
|
assert loadedFile.file == sharedFile1.getCanonicalFile()
|
||||||
assert loadedFile.infoHash == ih1
|
assert loadedFile.infoHash == ih1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test1SharedFile2Pieces() {
|
||||||
|
writeToSharedFile((0x1 << 18) + 1)
|
||||||
|
FileHasher fh = new FileHasher()
|
||||||
|
InfoHash ih1 = fh.hashFile(sharedFile1)
|
||||||
|
|
||||||
|
assert ih1.getHashList().length == 2 * 32
|
||||||
|
|
||||||
|
def json = [:]
|
||||||
|
json.file = sharedFile1.getCanonicalFile().toString()
|
||||||
|
json.length = sharedFile1.length()
|
||||||
|
json.infoHash = Base32.encode ih1.getRoot()
|
||||||
|
|
||||||
|
byte [] tmp = new byte[32]
|
||||||
|
System.arraycopy(ih1.getHashList(), 0, tmp, 0, 32)
|
||||||
|
String hash1 = Base32.encode(tmp)
|
||||||
|
System.arraycopy(ih1.getHashList(), 32, tmp, 0, 32)
|
||||||
|
String hash2 = Base32.encode(tmp)
|
||||||
|
json.hashList = [hash1, hash2]
|
||||||
|
|
||||||
|
json = JsonOutput.toJson(json)
|
||||||
|
|
||||||
|
File persisted = initPersisted()
|
||||||
|
persisted.write json
|
||||||
|
|
||||||
|
PersisterService ps = new PersisterService(persisted, eventBus, 100, null)
|
||||||
|
ps.start()
|
||||||
|
Thread.sleep(2000)
|
||||||
|
|
||||||
|
assert listener.publishedFiles.size() == 1
|
||||||
|
def loadedFile = listener.publishedFiles[0]
|
||||||
|
assert loadedFile != null
|
||||||
|
assert loadedFile.file == sharedFile1.getCanonicalFile()
|
||||||
|
assert loadedFile.infoHash == ih1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue