blob: 583d1c3da979f5303c83d4d3cee0b910a75039e0 [file] [log] [blame]
Laszlo Nagybc687582016-01-12 22:38:41 +00001# -*- coding: utf-8 -*-
2# The LLVM Compiler Infrastructure
3#
4# This file is distributed under the University of Illinois Open Source
5# License. See LICENSE.TXT for details.
6
Laszlo Nagy8bd63e52016-04-19 12:03:03 +00007import libear
Laszlo Nagybc687582016-01-12 22:38:41 +00008import libscanbuild.intercept as sut
Laszlo Nagy8bd63e52016-04-19 12:03:03 +00009import unittest
Laszlo Nagybc687582016-01-12 22:38:41 +000010import os.path
11
12
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000013class InterceptUtilTest(unittest.TestCase):
Laszlo Nagybc687582016-01-12 22:38:41 +000014
15 def test_format_entry_filters_action(self):
16 def test(command):
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000017 trace = {'command': command, 'directory': '/opt/src/project'}
18 return list(sut.format_entry(trace))
Laszlo Nagybc687582016-01-12 22:38:41 +000019
20 self.assertTrue(test(['cc', '-c', 'file.c', '-o', 'file.o']))
21 self.assertFalse(test(['cc', '-E', 'file.c']))
22 self.assertFalse(test(['cc', '-MM', 'file.c']))
23 self.assertFalse(test(['cc', 'this.o', 'that.o', '-o', 'a.out']))
Laszlo Nagybc687582016-01-12 22:38:41 +000024
25 def test_format_entry_normalize_filename(self):
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000026 parent = os.path.join(os.sep, 'home', 'me')
27 current = os.path.join(parent, 'project')
Laszlo Nagybc687582016-01-12 22:38:41 +000028
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000029 def test(filename):
30 trace = {'directory': current, 'command': ['cc', '-c', filename]}
31 return list(sut.format_entry(trace))[0]['file']
Laszlo Nagybc687582016-01-12 22:38:41 +000032
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000033 self.assertEqual(os.path.join(current, 'file.c'), test('file.c'))
34 self.assertEqual(os.path.join(current, 'file.c'), test('./file.c'))
35 self.assertEqual(os.path.join(parent, 'file.c'), test('../file.c'))
36 self.assertEqual(os.path.join(current, 'file.c'),
37 test(os.path.join(current, 'file.c')))
Laszlo Nagybc687582016-01-12 22:38:41 +000038
39 def test_sip(self):
40 def create_status_report(filename, message):
41 content = """#!/usr/bin/env sh
42 echo 'sa-la-la-la'
43 echo 'la-la-la'
44 echo '{0}'
45 echo 'sa-la-la-la'
46 echo 'la-la-la'
47 """.format(message)
48 lines = [line.strip() for line in content.split('\n')]
49 with open(filename, 'w') as handle:
50 handle.write('\n'.join(lines))
51 handle.close()
52 os.chmod(filename, 0x1ff)
53
54 def create_csrutil(dest_dir, status):
55 filename = os.path.join(dest_dir, 'csrutil')
56 message = 'System Integrity Protection status: {0}'.format(status)
57 return create_status_report(filename, message)
58
59 def create_sestatus(dest_dir, status):
60 filename = os.path.join(dest_dir, 'sestatus')
61 message = 'SELinux status:\t{0}'.format(status)
62 return create_status_report(filename, message)
63
64 ENABLED = 'enabled'
65 DISABLED = 'disabled'
66
67 OSX = 'darwin'
Laszlo Nagybc687582016-01-12 22:38:41 +000068
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000069 with libear.TemporaryDirectory() as tmpdir:
Laszlo Nagy46fc18a2017-01-28 22:48:26 +000070 saved = os.environ['PATH']
Laszlo Nagybc687582016-01-12 22:38:41 +000071 try:
Laszlo Nagybc687582016-01-12 22:38:41 +000072 os.environ['PATH'] = tmpdir + ':' + saved
73
74 create_csrutil(tmpdir, ENABLED)
75 self.assertTrue(sut.is_preload_disabled(OSX))
76
77 create_csrutil(tmpdir, DISABLED)
78 self.assertFalse(sut.is_preload_disabled(OSX))
Laszlo Nagybc687582016-01-12 22:38:41 +000079 finally:
80 os.environ['PATH'] = saved
81
Laszlo Nagy46fc18a2017-01-28 22:48:26 +000082 saved = os.environ['PATH']
Laszlo Nagybc687582016-01-12 22:38:41 +000083 try:
Laszlo Nagybc687582016-01-12 22:38:41 +000084 os.environ['PATH'] = ''
85 # shall be false when it's not in the path
86 self.assertFalse(sut.is_preload_disabled(OSX))
Laszlo Nagybc687582016-01-12 22:38:41 +000087
88 self.assertFalse(sut.is_preload_disabled('unix'))
89 finally:
90 os.environ['PATH'] = saved