Admin Panel

import datetime
import collections
from amitools.vamos.libcore import LibCreator, LibInfo, LibCtx, LibProfiler
from amitools.vamos.machine import MockMachine
from amitools.vamos.label import LabelManager
from amitools.vamos.mem import MemoryAlloc
from amitools.vamos.lib.VamosTestLibrary import VamosTestLibrary


def setup():
  machine = MockMachine(fill=23)
  mem = machine.get_mem()
  traps = machine.get_traps()
  cpu = machine.get_cpu()
  alloc = MemoryAlloc.for_machine(machine)
  ctx = LibCtx(machine)
  return mem, traps, alloc, ctx


def libcore_create_lib_default_test():
  mem, traps, alloc, ctx = setup()
  impl = VamosTestLibrary()
  # create info for lib
  date = datetime.date(2012, 11, 12)
  info = LibInfo('vamostest.library', 42, 3, date)
  # create lib
  creator = LibCreator(alloc, traps)
  vlib = creator.create_lib(info, ctx, impl)
  assert impl.get_cnt() == 0
  # open
  vlib.open()
  assert impl.get_cnt() == 1
  # close
  vlib.close()
  assert impl.get_cnt() == 0
  # free lib
  vlib.free()
  assert impl.get_cnt() is None
  assert alloc.is_all_free()


def libcore_create_lib_fake_with_fd_test():
  mem, traps, alloc, ctx = setup()
  impl = None
  # create info for lib
  date = datetime.date(2012, 11, 12)
  info = LibInfo('vamostest.library', 42, 3, date)
  # create lib
  creator = LibCreator(alloc, traps)
  lib = creator.create_lib(info, ctx, impl)
  # free lib
  lib.free()
  assert alloc.is_all_free()


def libcore_create_lib_fake_without_fd_test():
  mem, traps, alloc, ctx = setup()
  impl = None
  # create info for lib
  date = datetime.date(2012, 11, 12)
  info = LibInfo('foo.library', 42, 3, date)
  # create lib
  creator = LibCreator(alloc, traps)
  lib = creator.create_lib(info, ctx, impl)
  assert lib.get_fd().get_neg_size() == 30
  assert lib.get_library().neg_size == 32
  # free lib
  lib.free()
  assert alloc.is_all_free()


def libcore_create_lib_fake_without_fd_cfg_test():
  mem, traps, alloc, ctx = setup()
  impl = None
  # create info for lib
  date = datetime.date(2012, 11, 12)
  info = LibInfo('foo.library', 42, 3, date)
  # lib_cfg
  Cfg = collections.namedtuple('Cfg', ['num_fake_funcs'])
  lib_cfg = Cfg(10)
  # create lib
  creator = LibCreator(alloc, traps)
  lib = creator.create_lib(info, ctx, impl, lib_cfg)
  assert lib.get_fd().get_neg_size() == 66
  assert lib.get_library().neg_size == 68
  # free lib
  lib.free()
  assert alloc.is_all_free()


def libcore_create_lib_label_test():
  mem, traps, alloc, ctx = setup()
  impl = None
  # create info for lib
  date = datetime.date(2012, 11, 12)
  info = LibInfo('vamostest.library', 42, 3, date)
  # create lib
  creator = LibCreator(alloc, traps)
  lib = creator.create_lib(info, ctx, impl)
  # check label
  assert alloc.get_label_mgr()
  label = lib.get_library()._label
  assert label
  assert label.fd == lib.get_fd()
  # free lib
  lib.free()
  assert alloc.is_all_free()


def libcore_create_lib_profile_test():
  mem, traps, alloc, ctx = setup()
  impl = VamosTestLibrary()
  # create info for lib
  date = datetime.date(2012, 11, 12)
  info = LibInfo('vamostest.library', 42, 3, date)
  # create lib
  lib_profiler = LibProfiler(names=["all"])
  creator = LibCreator(alloc, traps, lib_profiler=lib_profiler)
  lib_profiler.setup()
  lib = creator.create_lib(info, ctx, impl)
  profiler = creator.get_profiler()
  prof = profiler.get_profile('vamostest.library')
  assert prof
  assert lib.profile
  # free lib
  lib.free()
  assert alloc.is_all_free()