Admin Panel
from amitools.vamos.libnative import LibLoader
from amitools.vamos.loader import SegmentLoader
from amitools.vamos.mem import MemoryAlloc
from amitools.vamos.machine import Machine
from amitools.vamos.atypes import ExecLibrary, Library
def setup(path_mgr=None):
machine = Machine()
mem = machine.get_mem()
alloc = MemoryAlloc.for_machine(machine)
segload = SegmentLoader(alloc, path_mgr=path_mgr)
loader = LibLoader(machine, alloc, segload)
sp = machine.get_ram_begin() - 4
# setup exec
exec_lib = ExecLibrary.alloc(alloc, "exec.library", "bla", 520*6)
exec_lib.setup()
exec_lib.fill_funcs()
exec_base = exec_lib.get_addr()
mem.w32(4, exec_base)
machine.set_zero_mem(0, exec_base)
return loader, segload, alloc, mem, sp, exec_lib
def libnative_loader_load_sys_lib_test(buildlibnix):
loader, segload, alloc, mem, sp, exec_lib = setup()
# load
lib_file = buildlibnix.make_lib('testnix')
lib_base, seglist_baddr = loader.load_sys_lib(lib_file, run_sp=sp)
assert lib_base > 0
assert seglist_baddr > 0
# we have to manually clean the lib here (as Exec FreeMem() does not work)
lib = Library(mem, lib_base, alloc)
lib.free()
# cleanup
segload.unload_seglist(seglist_baddr)
assert segload.shutdown() == 0
exec_lib.free()
assert alloc.is_all_free()
def libnative_loader_load_sys_lib_fail_test():
loader, segload, alloc, mem, sp, exec_lib = setup()
# load
lib_file = "bla.library"
lib_base, seglist_baddr = loader.load_sys_lib(lib_file, run_sp=sp)
assert lib_base == 0
assert seglist_baddr == 0
# cleanup
exec_lib.free()
assert alloc.is_all_free()
def libnative_loader_load_ami_lib_test(buildlibnix):
# path mgr mock
lib_file = buildlibnix.make_lib('testnix')
class PathMgrMock:
def ami_to_sys_path(self, lock, ami_path, mustExist=True):
if ami_path == 'LIBS:testnix.library':
return lib_file
pm = PathMgrMock()
loader, segload, alloc, mem, sp, exec_lib = setup(pm)
# load
lib_base, seglist_baddr = loader.load_ami_lib("testnix.library", run_sp=sp)
assert lib_base > 0
assert seglist_baddr > 0
info = segload.get_info(seglist_baddr)
assert info
assert info.ami_file == 'LIBS:testnix.library'
assert info.sys_file == lib_file
# we have to manually clean the lib here (as Exec FreeMem() does not work)
lib = Library(mem, lib_base, alloc)
lib.free()
# cleanup
segload.unload_seglist(seglist_baddr)
assert segload.shutdown() == 0
exec_lib.free()
assert alloc.is_all_free()
def libnative_loader_load_ami_lib_fail_test():
# path mgr mock
lib_file = "bla.library"
class PathMgrMock:
def ami_to_sys_path(self, lock, ami_path, mustExist=True):
return None
pm = PathMgrMock()
loader, segload, alloc, mem, sp, exec_lib = setup(pm)
# load
lib_base, seglist_baddr = loader.load_ami_lib("testnix.library", run_sp=sp)
assert lib_base == 0
assert seglist_baddr == 0
# cleanup
assert segload.shutdown() == 0
exec_lib.free()
assert alloc.is_all_free()
def libnative_loader_base_name_test():
f = LibLoader.get_lib_base_name
assert f("bla.library") == "bla.library"
assert f("a/relative/bla.library") == "bla.library"
assert f("abs:bla.library") == "bla.library"
assert f("abs:relative/bla.library") == "bla.library"
def libnative_loader_search_paths_test():
f = LibLoader.get_lib_search_paths
# abs path
assert f("progdir:bla.library") == ["progdir:bla.library"]
assert f("abs:bla.library") == ["abs:bla.library"]
# rel path
assert f("bla.library") == ["bla.library",
"libs/bla.library",
"PROGDIR:bla.library",
"PROGDIR:libs/bla.library",
"LIBS:bla.library"]
assert f("foo/bla.library") == ["foo/bla.library",
"libs/foo/bla.library",
"PROGDIR:foo/bla.library",
"PROGDIR:libs/foo/bla.library",
"LIBS:foo/bla.library"]