blob: e731d9224373bb862036172fadd442f074d6c798 [file] [log] [blame]
Oleh Prypin69c02222018-05-23 15:18:12 +02001#!/usr/bin/env python
2
3# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
4#
5# Use of this source code is governed by a BSD-style license
6# that can be found in the LICENSE file in the root of the source
7# tree. An additional intellectual property rights grant can be found
8# in the file PATENTS. All contributing project authors may
9# be found in the AUTHORS file in the root of the source tree.
10
Mirko Bonadeidac422f2018-06-05 09:12:34 +020011from contextlib import contextmanager
12
13import os
14import tempfile
Oleh Prypin69c02222018-05-23 15:18:12 +020015import unittest
16
17script = __import__('gtest-parallel-wrapper') # pylint: disable=invalid-name
18
19
Mirko Bonadeidac422f2018-06-05 09:12:34 +020020@contextmanager
21def TemporaryDirectory():
22 tmp_dir = tempfile.mkdtemp()
23 yield tmp_dir
24 os.rmdir(tmp_dir)
25
26
Oleh Prypin69c02222018-05-23 15:18:12 +020027class GtestParallelWrapperTest(unittest.TestCase):
28 @classmethod
29 def _Expected(cls, gtest_parallel_args):
30 return ['--shard_index=0', '--shard_count=1'] + gtest_parallel_args
31
32 def testOverwrite(self):
33 result = script.ParseArgs(['--timeout=123', 'exec', '--timeout', '124'])
34 expected = self._Expected(['--timeout=124', 'exec'])
35 self.assertEqual(result.gtest_parallel_args, expected)
36
37 def testMixing(self):
38 result = script.ParseArgs(
39 ['--timeout=123', '--param1', 'exec', '--param2', '--timeout', '124'])
40 expected = self._Expected(
41 ['--timeout=124', 'exec', '--', '--param1', '--param2'])
42 self.assertEqual(result.gtest_parallel_args, expected)
43
44 def testMixingPositional(self):
45 result = script.ParseArgs(['--timeout=123', 'exec', '--foo1', 'bar1',
46 '--timeout', '124', '--foo2', 'bar2'])
47 expected = self._Expected(['--timeout=124', 'exec', '--', '--foo1', 'bar1',
48 '--foo2', 'bar2'])
49 self.assertEqual(result.gtest_parallel_args, expected)
50
51 def testDoubleDash1(self):
52 result = script.ParseArgs(
53 ['--timeout', '123', 'exec', '--', '--timeout', '124'])
54 expected = self._Expected(
55 ['--timeout=123', 'exec', '--', '--timeout', '124'])
56 self.assertEqual(result.gtest_parallel_args, expected)
57
58 def testDoubleDash2(self):
59 result = script.ParseArgs(['--timeout=123', '--', 'exec', '--timeout=124'])
60 expected = self._Expected(['--timeout=123', 'exec', '--', '--timeout=124'])
61 self.assertEqual(result.gtest_parallel_args, expected)
62
63 def testArtifacts(self):
Mirko Bonadeidac422f2018-06-05 09:12:34 +020064 with TemporaryDirectory() as tmp_dir:
65 output_dir = os.path.join(tmp_dir, 'foo')
66 result = script.ParseArgs(['exec', '--store-test-artifacts',
67 '--output_dir', output_dir])
68 exp_artifacts_dir = os.path.join(output_dir, 'test_artifacts')
69 exp = self._Expected(['--output_dir=' + output_dir, 'exec', '--',
70 '--test_artifacts_dir=' + exp_artifacts_dir])
71 self.assertEqual(result.gtest_parallel_args, exp)
72 self.assertEqual(result.output_dir, output_dir)
73 self.assertRegexpMatches(result.test_artifacts_dir,
74 output_dir + '.test_artifacts')
Oleh Prypin69c02222018-05-23 15:18:12 +020075
76 def testNoDirsSpecified(self):
77 result = script.ParseArgs(['exec'])
78 self.assertEqual(result.output_dir, None)
79 self.assertEqual(result.test_artifacts_dir, None)
80
81 def testOutputDirSpecified(self):
82 result = script.ParseArgs(['exec', '--output_dir', '/tmp/foo'])
83 self.assertEqual(result.output_dir, '/tmp/foo')
84 self.assertEqual(result.test_artifacts_dir, None)
85
86 def testJsonTestResults(self):
87 result = script.ParseArgs(['--isolated-script-test-output', '/tmp/foo',
88 'exec'])
89 expected = self._Expected(['--dump_json_test_results=/tmp/foo', 'exec'])
90 self.assertEqual(result.gtest_parallel_args, expected)
91
92 def testShortArg(self):
93 result = script.ParseArgs(['-d', '/tmp/foo', 'exec'])
94 expected = self._Expected(['--output_dir=/tmp/foo', 'exec'])
95 self.assertEqual(result.gtest_parallel_args, expected)
96 self.assertEqual(result.output_dir, '/tmp/foo')
97
98 def testBoolArg(self):
99 result = script.ParseArgs(['--gtest_also_run_disabled_tests', 'exec'])
100 expected = self._Expected(['--gtest_also_run_disabled_tests', 'exec'])
101 self.assertEqual(result.gtest_parallel_args, expected)
102
103 def testNoArgs(self):
104 result = script.ParseArgs(['exec'])
105 expected = self._Expected(['exec'])
106 self.assertEqual(result.gtest_parallel_args, expected)
107
108 def testDocExample(self):
Mirko Bonadeidac422f2018-06-05 09:12:34 +0200109 with TemporaryDirectory() as tmp_dir:
110 output_dir = os.path.join(tmp_dir, 'foo')
111 result = script.ParseArgs([
112 'some_test', '--some_flag=some_value', '--another_flag',
113 '--output_dir=' + output_dir, '--store-test-artifacts',
114 '--isolated-script-test-output=SOME_DIR',
115 '--isolated-script-test-perf-output=SOME_OTHER_DIR',
116 '--foo=bar', '--baz'])
117 expected_artifacts_dir = os.path.join(output_dir, 'test_artifacts')
118 expected = self._Expected([
119 '--output_dir=' + output_dir, '--dump_json_test_results=SOME_DIR',
120 'some_test', '--',
121 '--test_artifacts_dir=' + expected_artifacts_dir,
122 '--some_flag=some_value', '--another_flag',
123 '--isolated-script-test-perf-output=SOME_OTHER_DIR',
124 '--foo=bar', '--baz'])
125 self.assertEqual(result.gtest_parallel_args, expected)
Oleh Prypin69c02222018-05-23 15:18:12 +0200126
127
128if __name__ == '__main__':
129 unittest.main()