blob: 07ad1fc14ee25b8039d462eff59dfedcbaa468a2 [file] [log] [blame]
Dan Shi70647ca2015-07-16 22:52:35 -07001# Copyright 2015 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Alex Zamorzaevf0573b52019-04-05 12:07:59 -07005import mox
Dan Shi70647ca2015-07-16 22:52:35 -07006import unittest
7
8import common
9from autotest_lib.frontend import setup_django_lite_environment
Alex Zamorzaevf0573b52019-04-05 12:07:59 -070010from autotest_lib.server import frontend
Dan Shi70647ca2015-07-16 22:52:35 -070011from autotest_lib.server import site_utils
12from autotest_lib.server.cros.dynamic_suite import tools
Xixuan Wue3e362f2018-04-26 16:34:28 -070013from autotest_lib.server.cros.dynamic_suite import suite_common
Dan Shi70647ca2015-07-16 22:52:35 -070014
15
Alex Zamorzaevf0573b52019-04-05 12:07:59 -070016class SiteUtilsUnittests(mox.MoxTestBase):
Richard Barnette6e991202018-04-16 17:37:55 -070017 """Test functions in site_utils.py"""
Dan Shi70647ca2015-07-16 22:52:35 -070018
19 def testParseJobName(self):
20 """Test method parse_job_name.
21 """
22 trybot_paladin_build = 'trybot-lumpy-paladin/R27-3837.0.0-b123'
23 trybot_release_build = 'trybot-lumpy-release/R27-3837.0.0-b456'
24 release_build = 'lumpy-release/R27-3837.0.0'
25 paladin_build = 'lumpy-paladin/R27-3878.0.0-rc7'
Dan Shief31f032016-05-13 15:51:39 -070026 brillo_build = 'git_mnc-brillo-dev/lumpy-eng/1234'
Dan Shie02810d2016-08-25 09:44:57 -070027 chrome_pfq_build = 'lumpy-chrome-pfq/R27-3837.0.0'
28 chromium_pfq_build = 'lumpy-chromium-pfq/R27-3837.0.0'
Dan Shi70647ca2015-07-16 22:52:35 -070029
30 builds = [trybot_paladin_build, trybot_release_build, release_build,
Dan Shie02810d2016-08-25 09:44:57 -070031 paladin_build, brillo_build, chrome_pfq_build,
32 chromium_pfq_build]
Dan Shi70647ca2015-07-16 22:52:35 -070033 test_name = 'login_LoginSuccess'
34 board = 'lumpy'
35 suite = 'bvt'
36 for build in builds:
37 expected_info = {'board': board,
38 'suite': suite,
Dan Shief31f032016-05-13 15:51:39 -070039 'build': build}
40 build_parts = build.split('/')
41 if len(build_parts) == 2:
42 expected_info['build_version'] = build_parts[1]
43 else:
44 expected_info['build_version'] = build_parts[2]
Dan Shi70647ca2015-07-16 22:52:35 -070045 suite_job_name = ('%s-%s' %
Xixuan Wue3e362f2018-04-26 16:34:28 -070046 (build, suite_common.canonicalize_suite_name(suite)))
Dan Shi70647ca2015-07-16 22:52:35 -070047 info = site_utils.parse_job_name(suite_job_name)
48 self.assertEqual(info, expected_info, '%s failed to be parsed to '
49 '%s' % (suite_job_name, expected_info))
50 test_job_name = tools.create_job_name(build, suite, test_name)
51 info = site_utils.parse_job_name(test_job_name)
52 self.assertEqual(info, expected_info, '%s failed to be parsed to '
53 '%s' % (test_job_name, expected_info))
54
55
Alex Zamorzaevf0573b52019-04-05 12:07:59 -070056 def testGetViewsFromTko(self):
57 """Test method get_test_views_from_tko
58 """
59 test_results = [
60 ('dummy_Pass', 'GOOD'),
61 ('dummy_Fail.RetrySuccess', 'GOOD'),
62 ('dummy_Fail.RetrySuccess', 'FAIL'),
63 ('dummy_Fail.Fail', 'FAIL'),
64 ('dummy_Fail.Fail', 'FAIL'),
65 ]
66
67 expected_test_views = {
68 'dummy_Pass': ['GOOD'],
69 'dummy_Fail.RetrySuccess': ['FAIL', 'GOOD'],
70 'dummy_Fail.Fail': ['FAIL', 'FAIL'],
71 }
72
73 self.mox.UnsetStubs()
74 tko = self.mox.CreateMock(frontend.TKO)
75 tko.run('get_detailed_test_views', afe_job_id=0).AndReturn(
Alex Zamorzaevd81fed52019-04-25 10:56:32 -070076 [{'test_name':r[0], 'status':r[1]} for r in test_results])
Alex Zamorzaevf0573b52019-04-05 12:07:59 -070077
78 self.mox.ReplayAll()
79 test_views = site_utils.get_test_views_from_tko(0, tko)
80 self.mox.VerifyAll()
81
82 self.assertEqual(sorted(test_views.keys()),
83 sorted(expected_test_views.keys()),
84 'Test list %s does not match expected test list %s.' %
85 (sorted(test_views.keys()),
86 sorted(expected_test_views.keys())))
87
88 for test_name, test_status_list in test_views.iteritems():
89 self.assertEqual(sorted(test_status_list),
90 sorted(expected_test_views[test_name]),
91 'For test %s the status list %s does not match '
92 'expected status list %s.' %
93 (test_name,
94 sorted(test_status_list),
95 sorted(expected_test_views[test_name])))
96
97
Dan Shi70647ca2015-07-16 22:52:35 -070098if __name__ == '__main__':
99 unittest.main()