Admin Panel

from amitools.vamos.loader import SegmentLoader
from amitools.vamos.machine import MockMemory
from amitools.vamos.mem import MemoryAlloc


def loader_segload_sys_int_test(buildlibnix, mem_alloc):
  mem, alloc = mem_alloc
  lib_file = buildlibnix.make_lib('testnix')
  loader = SegmentLoader(alloc)
  info = loader.int_load_sys_seglist(lib_file)
  assert info
  info.seglist.free()
  assert alloc.is_all_free()


def loader_segload_ami_int_test(buildlibnix, mem_alloc):
  mem, alloc = mem_alloc
  lib_file = buildlibnix.make_lib('testnix')

  class PathMgrMock:
    def ami_to_sys_path(self, lock, ami_path, mustExist=True):
      if ami_path == "blu":
        return lib_file
  pm = PathMgrMock()
  loader = SegmentLoader(alloc, path_mgr=pm)
  info = loader.int_load_ami_seglist("blu")
  assert info
  info.seglist.free()
  assert alloc.is_all_free()


def loader_segload_sys_load_unload_test(buildlibnix, mem_alloc):
  mem, alloc = mem_alloc
  lib_file = buildlibnix.make_lib('testnix')
  loader = SegmentLoader(alloc)
  # load
  baddr = loader.load_sys_seglist(lib_file)
  assert baddr > 0
  info = loader.get_info(baddr)
  assert info.seglist.get_baddr() == baddr
  # unload
  ok = loader.unload_seglist(baddr)
  assert ok
  info = loader.get_info(baddr)
  assert info is None
  assert loader.shutdown() == 0
  assert alloc.is_all_free()


def loader_segload_ami_load_unload_test(buildlibnix, mem_alloc):
  mem, alloc = mem_alloc
  lib_file = buildlibnix.make_lib('testnix')

  class PathMgrMock:
    def ami_to_sys_path(self, lock, ami_path, mustExist=True):
      if ami_path == "blu":
        return lib_file
  pm = PathMgrMock()
  loader = SegmentLoader(alloc, path_mgr=pm)
  # load
  baddr = loader.load_ami_seglist("blu")
  assert baddr > 0
  info = loader.get_info(baddr)
  assert info.seglist.get_baddr() == baddr
  # unload
  ok = loader.unload_seglist(baddr)
  assert ok
  info = loader.get_info(baddr)
  assert info is None
  assert loader.shutdown() == 0
  assert alloc.is_all_free()


def loader_segload_register(mem_alloc):
  mem, alloc = mem_alloc
  loader = SegmentLoader(alloc)
  # my seglist
  seglist = SegList.alloc(mem, [64])
  baddr = seglist.get_baddr()
  loader.register_seglist(baddr)
  # unload registered seglist
  assert loader.unload_seglist(baddr)
  assert loader.shutdown() == 0
  assert alloc.is_all_free()


def loader_segload_unregister(mem_alloc):
  mem, alloc = mem_alloc
  loader = SegmentLoader(alloc)
  # my seglist
  seglist = SegList.alloc(mem, [64])
  baddr = seglist.get_baddr()
  loader.register_seglist(baddr)
  loader.unregister_seglist(baddr)
  # unload registered seglist
  assert not loader.unload_seglist(baddr)
  assert loader.shutdown() == 0
  assert alloc.is_all_free()