# -*- coding: utf-8 -*-
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Test for chromite qemu logic"""

from __future__ import print_function

import glob
import os

from chromite.lib import cros_test_lib
from chromite.lib import qemu


class QemuTests(cros_test_lib.TestCase):
  """Verify Qemu logic works"""

  def testArchDetect(self):
    """Verify we correctly probe each arch"""
    test_dir = os.path.join(os.path.realpath(os.path.dirname(__file__)),
                            'datafiles')
    test_files = os.path.join(test_dir, 'arch.*.elf')

    for test in glob.glob(test_files):
      test_file = os.path.basename(test)
      exp_arch = test_file.split('.')[1]

      arch = qemu.Qemu.DetectArch(test_file, test_dir)
      if arch is None:
        # See if we have a mask for it.
        # pylint: disable=protected-access
        self.assertNotIn(exp_arch, qemu.Qemu._MAGIC_MASK.keys(),
                         msg='ELF "%s" did not match "%s", but should have' %
                         (test, exp_arch))
      else:
        self.assertEqual(arch, exp_arch)

  def testRegisterStr(self):
    """Verify the binfmt register string doesn't exceed kernel limits"""
    # pylint: disable=protected-access
    for arch in qemu.Qemu._MAGIC_MASK.keys():
      name = 'qemu-%s' % arch
      interp = '/build/bin/%s' % name
      register = qemu.Qemu.GetRegisterBinfmtStr(arch, name, interp)
      self.assertGreaterEqual(256, len(register),
                              msg='arch "%s" has too long of a register string:'
                                  ' %i: %r' % (arch, len(register), register))

  def testFullInterpPath(self):
    """Sanity check for the interp helper."""
    self.assertNotEqual('', qemu.Qemu.GetFullInterpPath('foo'))

  def testInode(self):
    """Sanity check for the inode helper."""
    self.assertEqual(-1, qemu.Qemu.inode('/.....'))
    self.assertLess(0, qemu.Qemu.inode('/'))
