blob: e6a294d69cc610392ad6c3b05f18a49fc79581f9 [file] [log] [blame]
# -*- 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
import sys
from chromite.lib import cros_test_lib
from chromite.lib import qemu
assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
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, list(qemu.Qemu._MAGIC_MASK),
msg='ELF "%s" did not match "%s", but should have' %
(test, exp_arch))
else:
self.assertEqual(arch, exp_arch)
def testArmRegisterStr(self):
"""Make sure the register string is exact.
We don't check every arch, just one to make sure the general logic is OK.
"""
exp = (b':foo:M::'
b'\x7fELF\x01\x01\x01!\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\x02'
b'\\x00(\\x00:\xff\xff\xff\xff\xff\xff\xff\\x00\xff\xff\xff\xff\xff'
b'\xff\xff\xff\xfe\xff\xff\xff:'
b'/pfx-binfmt-wrapper:POC')
self.assertEqual(exp, qemu.Qemu.GetRegisterBinfmtStr('arm', 'foo', '/pfx'))
def testRegisterStrLengths(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('/'))