diff options
Diffstat (limited to 'meta/lib/patchtest/tests/test_patch_upstream_status.py')
-rw-r--r-- | meta/lib/patchtest/tests/test_patch_upstream_status.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/meta/lib/patchtest/tests/test_patch_upstream_status.py b/meta/lib/patchtest/tests/test_patch_upstream_status.py new file mode 100644 index 0000000000..eda5353c66 --- /dev/null +++ b/meta/lib/patchtest/tests/test_patch_upstream_status.py | |||
@@ -0,0 +1,64 @@ | |||
1 | # Checks related to the patch's upstream-status lines | ||
2 | # | ||
3 | # Copyright (C) 2016 Intel Corporation | ||
4 | # | ||
5 | # SPDX-License-Identifier: GPL-2.0 | ||
6 | |||
7 | import base | ||
8 | import parse_upstream_status | ||
9 | import pyparsing | ||
10 | import os | ||
11 | |||
12 | class PatchUpstreamStatus(base.Base): | ||
13 | |||
14 | upstream_status_regex = pyparsing.AtLineStart("+" + "Upstream-Status") | ||
15 | |||
16 | @classmethod | ||
17 | def setUpClassLocal(cls): | ||
18 | cls.newpatches = [] | ||
19 | # get just those relevant patches: new software patches | ||
20 | for patch in cls.patchset: | ||
21 | if patch.path.endswith('.patch') and patch.is_added_file: | ||
22 | cls.newpatches.append(patch) | ||
23 | |||
24 | def setUp(self): | ||
25 | if self.unidiff_parse_error: | ||
26 | self.skip('Python-unidiff parse error') | ||
27 | self.valid_status = ', '.join(parse_upstream_status.upstream_status_nonliteral_valid_status) | ||
28 | self.standard_format = 'Upstream-Status: <Valid status>' | ||
29 | |||
30 | def test_upstream_status_presence_format(self): | ||
31 | if not PatchUpstreamStatus.newpatches: | ||
32 | self.skip("There are no new software patches, no reason to test Upstream-Status presence/format") | ||
33 | |||
34 | for newpatch in PatchUpstreamStatus.newpatches: | ||
35 | payload = newpatch.__str__() | ||
36 | if not self.upstream_status_regex.search_string(payload): | ||
37 | self.fail('Added patch file is missing Upstream-Status in the header', | ||
38 | 'Add Upstream-Status: <Valid status> to the header of %s' % newpatch.path, | ||
39 | data=[('Standard format', self.standard_format), ('Valid status', self.valid_status)]) | ||
40 | for line in payload.splitlines(): | ||
41 | if self.patchmetadata_regex.match(line): | ||
42 | continue | ||
43 | if self.upstream_status_regex.search_string(line): | ||
44 | if parse_upstream_status.inappropriate_status_mark.searchString(line): | ||
45 | try: | ||
46 | parse_upstream_status.upstream_status_inappropriate_info.parseString(line.lstrip('+')) | ||
47 | except pyparsing.ParseException as pe: | ||
48 | self.fail('Upstream-Status is Inappropriate, but no reason was provided', | ||
49 | 'Include a brief reason why %s is inappropriate' % os.path.basename(newpatch.path), | ||
50 | data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Inappropriate [reason]')]) | ||
51 | elif parse_upstream_status.submitted_status_mark.searchString(line): | ||
52 | try: | ||
53 | parse_upstream_status.upstream_status_submitted_info.parseString(line.lstrip('+')) | ||
54 | except pyparsing.ParseException as pe: | ||
55 | self.fail('Upstream-Status is Submitted, but it is not mentioned where', | ||
56 | 'Include where %s was submitted' % os.path.basename(newpatch.path), | ||
57 | data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Submitted [where]')]) | ||
58 | else: | ||
59 | try: | ||
60 | parse_upstream_status.upstream_status.parseString(line.lstrip('+')) | ||
61 | except pyparsing.ParseException as pe: | ||
62 | self.fail('Upstream-Status is in incorrect format', | ||
63 | 'Fix Upstream-Status format in %s' % os.path.basename(newpatch.path), | ||
64 | data=[('Current', pe.pstr), ('Standard format', self.standard_format), ('Valid status', self.valid_status)]) | ||