blob: 82925a6dc3a9a94b9277147d56775784deb51bbb [file] [log] [blame]
Dale Curtis4a431e62011-10-11 17:37:07 -07001#!/usr/bin/python -u
2#
3# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6#
7
Aviv Keshet4111f862013-02-13 13:11:11 -08008#pylint: disable-msg=C0111
9
Jakob Juelich3270e182014-10-13 10:00:43 -070010import os, shutil, tempfile, unittest
Dale Curtis4a431e62011-10-11 17:37:07 -070011
12import common
Dale Curtis4a431e62011-10-11 17:37:07 -070013from autotest_lib.client.common_lib import global_config
Jakob Juelich934f0dc2014-10-14 18:21:13 -070014from autotest_lib.frontend import database_settings_helper
Fang Deng9ec66802014-04-28 19:04:33 +000015from autotest_lib.frontend import setup_django_environment
16from autotest_lib.frontend import setup_test_environment
Dale Curtis4a431e62011-10-11 17:37:07 -070017from autotest_lib.tko.site_parse import StackTrace
18
19
20class stack_trace_test(unittest.TestCase):
21
22
23 def setUp(self):
Fang Deng9ec66802014-04-28 19:04:33 +000024 setup_test_environment.set_up()
Dale Curtis4a431e62011-10-11 17:37:07 -070025 self._fake_results = tempfile.mkdtemp()
26 self._cros_src_dir = global_config.global_config.get_config_value(
27 'CROS', 'source_tree', default=None)
28
29 if not self._cros_src_dir:
30 self.fail('No Chrome OS source tree defined in global_config.ini')
31
32 self._stack_trace = StackTrace(
33 self._fake_results, self._cros_src_dir)
34
35 self._cache_dir = os.path.join(
36 self._cros_src_dir, 'chroot', self._stack_trace._CACHE_DIR)
37
38 # Ensure we don't obliterate a live cache directory by accident.
39 if os.path.exists(self._cache_dir):
40 self.fail(
41 'Symbol cache directory already exists. Cowardly refusing to'
42 ' run. Please remove this directory manually to continue.')
43
44
45 def tearDown(self):
Fang Deng9ec66802014-04-28 19:04:33 +000046 setup_test_environment.tear_down()
Dale Curtis4a431e62011-10-11 17:37:07 -070047 shutil.rmtree(self._fake_results)
48 if os.path.exists(self._cache_dir):
49 shutil.rmtree(self._cache_dir)
50
51
52 def _setup_basic_cache(self,
53 job_name='x86-alex-r16-R16-1166.0.0-a1-b1118_bvt',
54 mkdir=True):
55 # Ensure cache directory is present.
56 self._stack_trace._get_cache_dir()
57 board, rev, version = self._stack_trace._parse_job_name(job_name)
58
59 symbols_dir = os.path.join(
60 self._cache_dir, '-'.join([board, rev, version]))
61 if mkdir:
62 os.mkdir(symbols_dir)
63
64 chroot_symbols_dir = os.sep + os.path.relpath(
65 symbols_dir, self._stack_trace._chroot_dir)
66
67 return job_name, symbols_dir, chroot_symbols_dir
68
69
70 def test_get_job_name(self):
71 job_name = 'x86-alex-r16-R16-1166.0.0-a1-b1118_regression'
72 with open(os.path.join(self._fake_results, 'keyval'), 'w') as f:
73 f.write('label=%s' % job_name)
74
75 self.assertEqual(self._stack_trace._get_job_name(), job_name)
76
77
78 def test_parse_3_tuple_job_name(self):
79 job_name = 'x86-alex-r16-R16-1166.0.0-a1-b1118_regression'
80 board, rev, version = self._stack_trace._parse_job_name(job_name)
81 self.assertEqual(board, 'x86-alex')
82 self.assertEqual(rev, 'r16')
83 self.assertEqual(version, '1166.0.0')
84
85
86 def test_parse_4_tuple_job_name(self):
87 job_name = 'x86-mario-r15-0.15.1011.74-a1-b61_bvt'
88 board, rev, version = self._stack_trace._parse_job_name(job_name)
89 self.assertEqual(board, 'x86-mario')
90 self.assertEqual(rev, 'r15')
91 self.assertEqual(version, '0.15.1011.74')
92
93
94 def test_parse_4_tuple_au_job_name(self):
95 job_name = 'x86-alex-r15-0.15.1011.81_to_0.15.1011.82-a1-b69_mton_au'
96 board, rev, version = self._stack_trace._parse_job_name(job_name)
97 self.assertEqual(board, 'x86-alex')
98 self.assertEqual(rev, 'r15')
99 self.assertEqual(version, '0.15.1011.82')
100
101
102 def test_parse_3_tuple_au_job_name(self):
103 job_name = 'x86-alex-r16-1165.0.0_to_R16-1166.0.0-a1-b69_mton_au'
104 board, rev, version = self._stack_trace._parse_job_name(job_name)
105 self.assertEqual(board, 'x86-alex')
106 self.assertEqual(rev, 'r16')
107 self.assertEqual(version, '1166.0.0')
108
109
Jakob Juelich934f0dc2014-10-14 18:21:13 -0700110 def testRunOnShardWithoutGlobalConfigsFails(self):
111 global_config.global_config.override_config_value(
112 'SHARD', 'shard_hostname', 'host1')
113 # settings module was already loaded during the imports of this file,
114 # so before the configuration setting was made, therefore reload it:
115 reload(database_settings_helper)
116 self.assertRaises(global_config.ConfigError,
117 database_settings_helper.get_global_db_config)
118
119
120 def testRunOnMasterWithoutGlobalConfigsWorks(self):
121 global_config.global_config.override_config_value(
122 'SHARD', 'shard_hostname', '')
123 from autotest_lib.frontend import database_settings_helper
124 # settings module was already loaded during the imports of this file,
125 # so before the configuration setting was made, therefore reload it:
126 reload(database_settings_helper)
127 database_settings_helper.get_global_db_config()
128
129
Dale Curtis4a431e62011-10-11 17:37:07 -0700130if __name__ == "__main__":
131 unittest.main()