blob: 493ac2a52ed6d742381df3ad87790301e96e2a51 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2014 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.
"""Unit tests for dep_tracker.py."""
from __future__ import print_function
import os
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.lib import unittest_lib
from chromite.scripts import dep_tracker
# Allow access private members for testing:
# pylint: disable=protected-access
class MainTest(cros_test_lib.OutputTestCase):
"""Tests for the main() function."""
def testHelp(self):
"""Test that --help is functioning."""
argv = ['--help']
with self.OutputCapturer() as output:
# Running with --help should exit with code==0.
self.AssertFuncSystemExitZero(dep_tracker.main, argv)
# Verify that a message beginning with "usage: " was printed.
stdout = output.GetStdout()
self.assertTrue(stdout.startswith('usage: '))
class DepTrackerTest(cros_test_lib.TempDirTestCase):
"""Tests for the DepTracker() class."""
def testSimpleDep(self):
unittest_lib.BuildELF(os.path.join(self.tempdir, 'libabc.so'),
['func_a', 'func_b', 'func_c'])
unittest_lib.BuildELF(os.path.join(self.tempdir, 'abc_main'),
undefined_symbols=['func_b'],
used_libs=['abc'],
executable=True)
dt = dep_tracker.DepTracker(self.tempdir)
dt.Init()
dt.ComputeELFFileDeps()
self.assertEqual(sorted(dt._files.keys()), ['abc_main', 'libabc.so'])
def testFiletypeSet(self):
"""Tests that the 'ftype' member is set for ELF files first."""
unittest_lib.BuildELF(os.path.join(self.tempdir, 'libabc.so'),
['func_a', 'func_b', 'func_c'])
osutils.WriteFile(os.path.join(self.tempdir, 'pyscript'),
'#!/usr/bin/python\nimport sys\nsys.exit(42)\n')
dt = dep_tracker.DepTracker(self.tempdir)
dt.Init()
# ComputeELFFileDeps() should compute the file type of ELF files so we
# don't need to parse them again.
dt.ComputeELFFileDeps()
self.assertTrue('ftype' in dt._files['libabc.so'])
self.assertFalse('ftype' in dt._files['pyscript'])
# ComputeFileTypes() shold compute the file type of every file.
dt.ComputeFileTypes()
self.assertTrue('ftype' in dt._files['libabc.so'])
self.assertTrue('ftype' in dt._files['pyscript'])