aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/upload_lexan_crashes_to_forcey_test.py
blob: 3c9c0d4b3d4f0c1315bbc21522bb57e6dff0ba77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 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.

"""Tests for upload_lexan_crashes_to_forcey."""

import datetime
import unittest
import unittest.mock

import upload_lexan_crashes_to_forcey


class Test(unittest.TestCase):
  """Tests for upload_lexan_crashes_to_forcey."""

  def test_date_parsing_functions(self):
    self.assertEqual(
        datetime.date(2020, 2, 1),
        upload_lexan_crashes_to_forcey.from_ymd('2020-02-01'))

  @unittest.mock.patch(
      'upload_lexan_crashes_to_forcey.test_cases_on_or_after',
      return_value=(
          (
              datetime.date(2020, 1, 1),
              ('gs://test-case-1', 'gs://test-case-1.1'),
          ),
          (datetime.date(2020, 1, 2), ('gs://test-case-2',)),
          (datetime.date(2020, 1, 1), ('gs://test-case-3',)),
          (datetime.date(2020, 1, 4), ('gs://test-case-4',)),
      ))
  @unittest.mock.patch('upload_lexan_crashes_to_forcey.submit_test_case')
  @unittest.mock.patch('upload_lexan_crashes_to_forcey.persist_state')
  def test_new_test_case_submission_functions(self, persist_state_mock,
                                              submit_test_case_mock,
                                              test_cases_on_or_after_mock):
    forcey_path = '/path/to/4c'
    real_state_file_path = '/path/to/state/file'
    earliest_date = datetime.date(2020, 1, 1)

    persist_state_calls = []

    # Since the set this gets is mutated, we need to copy it somehow.
    def persist_state_side_effect(test_cases_to_persist, state_file_path,
                                  most_recent_date):
      self.assertEqual(state_file_path, real_state_file_path)
      persist_state_calls.append(
          (sorted(test_cases_to_persist), most_recent_date))

    persist_state_mock.side_effect = persist_state_side_effect

    upload_lexan_crashes_to_forcey.submit_new_test_cases(
        last_seen_test_cases=(
            'gs://test-case-0',
            'gs://test-case-1',
        ),
        earliest_date_to_check=earliest_date,
        forcey=forcey_path,
        state_file_path=real_state_file_path,
    )

    test_cases_on_or_after_mock.assert_called_once_with(earliest_date)
    self.assertEqual(submit_test_case_mock.call_args_list, [
        unittest.mock.call('gs://test-case-1.1', forcey_path),
        unittest.mock.call('gs://test-case-2', forcey_path),
        unittest.mock.call('gs://test-case-3', forcey_path),
        unittest.mock.call('gs://test-case-4', forcey_path),
    ])

    self.assertEqual(persist_state_calls, [
        (
            ['gs://test-case-0', 'gs://test-case-1', 'gs://test-case-1.1'],
            datetime.date(2020, 1, 1),
        ),
        (
            [
                'gs://test-case-0',
                'gs://test-case-1',
                'gs://test-case-1.1',
                'gs://test-case-2',
            ],
            datetime.date(2020, 1, 2),
        ),
        (
            [
                'gs://test-case-0',
                'gs://test-case-1',
                'gs://test-case-1.1',
                'gs://test-case-2',
                'gs://test-case-3',
            ],
            datetime.date(2020, 1, 2),
        ),
        (
            [
                'gs://test-case-0',
                'gs://test-case-1',
                'gs://test-case-1.1',
                'gs://test-case-2',
                'gs://test-case-3',
                'gs://test-case-4',
            ],
            datetime.date(2020, 1, 4),
        ),
        (
            [
                'gs://test-case-1',
                'gs://test-case-1.1',
                'gs://test-case-2',
                'gs://test-case-3',
                'gs://test-case-4',
            ],
            datetime.date(2020, 1, 4),
        ),
    ])


if __name__ == '__main__':
  unittest.main()