2018-10-08 00:18:30 +00:00
|
|
|
from machfs import *
|
2018-10-07 10:31:42 +00:00
|
|
|
import os
|
|
|
|
import time
|
|
|
|
|
2018-10-08 01:06:35 +00:00
|
|
|
def test_upperlower():
|
|
|
|
h = Volume()
|
|
|
|
h['alpha'] = File()
|
|
|
|
assert h['alpha'] is h['ALPHA']
|
|
|
|
assert list(h.keys()) == ['alpha']
|
|
|
|
|
2018-10-07 10:31:42 +00:00
|
|
|
def test_roundtrip():
|
|
|
|
h = Volume()
|
|
|
|
f = File()
|
2018-10-08 01:06:35 +00:00
|
|
|
h['single file'] = f
|
2018-10-07 10:31:42 +00:00
|
|
|
f.data = f.rsrc = b'1234' * 4096
|
|
|
|
|
|
|
|
copies = [h.write(800*1024)]
|
|
|
|
for i in range(2):
|
|
|
|
h2 = Volume()
|
|
|
|
h2.read(copies[-1])
|
|
|
|
copies.append(h2.write(800*1024))
|
|
|
|
|
|
|
|
assert copies[0] == copies[1]
|
|
|
|
assert copies[1] == copies[2]
|
2018-10-08 01:06:35 +00:00
|
|
|
assert f.data in copies[-1]
|
2018-10-07 10:31:42 +00:00
|
|
|
|
|
|
|
def test_macos_mount():
|
|
|
|
h = Volume()
|
2018-10-08 01:06:35 +00:00
|
|
|
h.name = 'ElmoTest'
|
2018-10-07 10:31:42 +00:00
|
|
|
hf = File()
|
2018-10-07 14:07:43 +00:00
|
|
|
hf.data = b'12345' * 10
|
2018-10-07 14:24:57 +00:00
|
|
|
for i in reversed(range(100)):
|
2018-10-08 01:06:35 +00:00
|
|
|
last = 'testfile-%03d' % i
|
2018-10-07 14:07:43 +00:00
|
|
|
h[last] = hf
|
|
|
|
ser = h.write(10*1024*1024)
|
|
|
|
|
2018-10-07 10:31:42 +00:00
|
|
|
open('/tmp/SMALL.dmg','wb').write(ser)
|
2018-10-07 14:24:57 +00:00
|
|
|
os.system('hdiutil attach /tmp/SMALL.dmg')
|
2018-10-07 10:31:42 +00:00
|
|
|
n = 10
|
|
|
|
while 1:
|
|
|
|
n += 1
|
2018-10-07 14:07:43 +00:00
|
|
|
assert n < 200
|
2018-10-07 10:31:42 +00:00
|
|
|
time.sleep(0.1)
|
|
|
|
try:
|
2018-10-07 14:07:43 +00:00
|
|
|
os.stat('/Volumes/ElmoTest/testfile-000')
|
2018-10-07 10:31:42 +00:00
|
|
|
except:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
break
|
2018-10-08 01:06:35 +00:00
|
|
|
recovered = open('/Volumes/ElmoTest/' + last,'rb').read()
|
2018-10-07 10:31:42 +00:00
|
|
|
os.system('umount /Volumes/ElmoTest')
|
|
|
|
assert recovered == hf.data
|
2018-10-08 01:06:35 +00:00
|
|
|
|
2018-10-08 01:33:34 +00:00
|
|
|
h2 = Volume()
|
|
|
|
h2.read(ser)
|
|
|
|
assert h2['testfile-000'].data == hf.data
|
|
|
|
|
2018-11-05 23:29:10 +00:00
|
|
|
# def test_extents_overflow():
|
|
|
|
# h = Volume()
|
|
|
|
# h.read(open('SourceForEmulator.dmg','rb').read())
|
|
|
|
# assert h['aa'].data == b'a' * 278528
|
|
|
|
|
|
|
|
def test_many_sizes():
|
|
|
|
sizes = [800*1024, 1024*1024]
|
|
|
|
while sizes[-1] < 4*1024*1024*1024:
|
|
|
|
sizes.append(sizes[-1] * 2)
|
|
|
|
|
|
|
|
# okay, we have heaps of sizes
|
|
|
|
v = Volume()
|
|
|
|
v.name = 'ImportantTestVol'
|
|
|
|
for s in sizes:
|
|
|
|
ser = v.write(s-512)
|
|
|
|
open('/tmp/SMALL-%X.dmg'%s, 'wb').write(ser)
|