diff options
author | Trevor Gamblin <tgamblin@baylibre.com> | 2024-09-24 07:54:58 -0400 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-09-30 17:00:50 +0100 |
commit | bb0f1625d7655d04c6df3c144e488f676ff2f762 (patch) | |
tree | 3e3a07f71c4e1950f5e7cc47dbdd1605888d0d16 /meta/lib/patchtest/tests/test_metadata.py | |
parent | dd3a73961b49b508771a8cd579ebf1004f786f12 (diff) | |
download | poky-bb0f1625d7655d04c6df3c144e488f676ff2f762.tar.gz |
patchtest: patterns: add module, refactor
Currently, patchtest has a lot of spread-out definitions for patterns
used in various setup and test functions. Organize these by putting them
all into a new patterns.py module. This allows the tests/pyparsing
directory to be removed, as it is now redundant. Also remove some
definitions where they were duplicated or unused, and perform some
renames to improve readability and avoid collisions. Many of these
variables are composed from others, so the file is only partially
sorted.
(From OE-Core rev: 1ab55d495957918be532a36224b5598c9955a44d)
Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/patchtest/tests/test_metadata.py')
-rw-r--r-- | meta/lib/patchtest/tests/test_metadata.py | 56 |
1 files changed, 20 insertions, 36 deletions
diff --git a/meta/lib/patchtest/tests/test_metadata.py b/meta/lib/patchtest/tests/test_metadata.py index f5dbcf01ed..8c2305a184 100644 --- a/meta/lib/patchtest/tests/test_metadata.py +++ b/meta/lib/patchtest/tests/test_metadata.py | |||
@@ -6,27 +6,11 @@ | |||
6 | 6 | ||
7 | import base | 7 | import base |
8 | import os | 8 | import os |
9 | import patterns | ||
9 | import pyparsing | 10 | import pyparsing |
10 | from data import PatchTestInput, PatchTestDataStore | 11 | from data import PatchTestInput, PatchTestDataStore |
11 | 12 | ||
12 | class TestMetadata(base.Metadata): | 13 | class TestMetadata(base.Metadata): |
13 | metadata_lic = 'LICENSE' | ||
14 | invalid_license = 'PATCHTESTINVALID' | ||
15 | metadata_chksum = 'LIC_FILES_CHKSUM' | ||
16 | license_var = 'LICENSE' | ||
17 | closed = 'CLOSED' | ||
18 | lictag_re = pyparsing.AtLineStart("License-Update:") | ||
19 | lic_chksum_added = pyparsing.AtLineStart("+" + metadata_chksum) | ||
20 | lic_chksum_removed = pyparsing.AtLineStart("-" + metadata_chksum) | ||
21 | add_mark = pyparsing.Regex('\\+ ') | ||
22 | max_length = 200 | ||
23 | metadata_src_uri = 'SRC_URI' | ||
24 | md5sum = 'md5sum' | ||
25 | sha256sum = 'sha256sum' | ||
26 | git_regex = pyparsing.Regex('^git\\:\\/\\/.*') | ||
27 | metadata_summary = 'SUMMARY' | ||
28 | cve_check_ignore_var = 'CVE_CHECK_IGNORE' | ||
29 | cve_status_var = 'CVE_STATUS' | ||
30 | 14 | ||
31 | def test_license_presence(self): | 15 | def test_license_presence(self): |
32 | if not self.added: | 16 | if not self.added: |
@@ -41,13 +25,13 @@ class TestMetadata(base.Metadata): | |||
41 | open_flag = 'a' | 25 | open_flag = 'a' |
42 | with open(auto_conf, open_flag) as fd: | 26 | with open(auto_conf, open_flag) as fd: |
43 | for pn in self.added: | 27 | for pn in self.added: |
44 | fd.write('LICENSE ??= "%s"\n' % self.invalid_license) | 28 | fd.write('LICENSE ??= "%s"\n' % patterns.invalid_license) |
45 | 29 | ||
46 | no_license = False | 30 | no_license = False |
47 | for pn in self.added: | 31 | for pn in self.added: |
48 | rd = self.tinfoil.parse_recipe(pn) | 32 | rd = self.tinfoil.parse_recipe(pn) |
49 | license = rd.getVar(self.metadata_lic) | 33 | license = rd.getVar(patterns.metadata_lic) |
50 | if license == self.invalid_license: | 34 | if license == patterns.invalid_license: |
51 | no_license = True | 35 | no_license = True |
52 | break | 36 | break |
53 | 37 | ||
@@ -74,11 +58,11 @@ class TestMetadata(base.Metadata): | |||
74 | # we are not interested in images | 58 | # we are not interested in images |
75 | if '/images/' in pathname: | 59 | if '/images/' in pathname: |
76 | continue | 60 | continue |
77 | lic_files_chksum = rd.getVar(self.metadata_chksum) | 61 | lic_files_chksum = rd.getVar(patterns.metadata_chksum) |
78 | if rd.getVar(self.license_var) == self.closed: | 62 | if rd.getVar(patterns.license_var) == patterns.closed: |
79 | continue | 63 | continue |
80 | if not lic_files_chksum: | 64 | if not lic_files_chksum: |
81 | self.fail('%s is missing in newly added recipe' % self.metadata_chksum) | 65 | self.fail('%s is missing in newly added recipe' % patterns.metadata_chksum) |
82 | 66 | ||
83 | def test_lic_files_chksum_modified_not_mentioned(self): | 67 | def test_lic_files_chksum_modified_not_mentioned(self): |
84 | if not self.modified: | 68 | if not self.modified: |
@@ -89,10 +73,10 @@ class TestMetadata(base.Metadata): | |||
89 | if patch.path.endswith('.patch'): | 73 | if patch.path.endswith('.patch'): |
90 | continue | 74 | continue |
91 | payload = str(patch) | 75 | payload = str(patch) |
92 | if (self.lic_chksum_added.search_string(payload) or self.lic_chksum_removed.search_string(payload)): | 76 | if (patterns.lic_chksum_added.search_string(payload) or patterns.lic_chksum_removed.search_string(payload)): |
93 | # if any patch on the series contain reference on the metadata, fail | 77 | # if any patch on the series contain reference on the metadata, fail |
94 | for commit in self.commits: | 78 | for commit in self.commits: |
95 | if self.lictag_re.search_string(commit.commit_message): | 79 | if patterns.lictag_re.search_string(commit.commit_message): |
96 | break | 80 | break |
97 | else: | 81 | else: |
98 | self.fail('LIC_FILES_CHKSUM changed without "License-Update:" tag and description in commit message') | 82 | self.fail('LIC_FILES_CHKSUM changed without "License-Update:" tag and description in commit message') |
@@ -104,10 +88,10 @@ class TestMetadata(base.Metadata): | |||
104 | continue | 88 | continue |
105 | payload = str(patch) | 89 | payload = str(patch) |
106 | for line in payload.splitlines(): | 90 | for line in payload.splitlines(): |
107 | if self.add_mark.search_string(line): | 91 | if patterns.add_mark.search_string(line): |
108 | current_line_length = len(line[1:]) | 92 | current_line_length = len(line[1:]) |
109 | if current_line_length > self.max_length: | 93 | if current_line_length > patterns.patch_max_line_length: |
110 | self.fail('Patch line too long (current length %s, maximum is %s)' % (current_line_length, self.max_length), | 94 | self.fail('Patch line too long (current length %s, maximum is %s)' % (current_line_length, patterns.patch_max_line_length), |
111 | data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])]) | 95 | data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])]) |
112 | 96 | ||
113 | def pretest_src_uri_left_files(self): | 97 | def pretest_src_uri_left_files(self): |
@@ -123,7 +107,7 @@ class TestMetadata(base.Metadata): | |||
123 | if 'core-image' in pn: | 107 | if 'core-image' in pn: |
124 | continue | 108 | continue |
125 | rd = self.tinfoil.parse_recipe(pn) | 109 | rd = self.tinfoil.parse_recipe(pn) |
126 | PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)] = rd.getVar(self.metadata_src_uri) | 110 | PatchTestDataStore['%s-%s-%s' % (self.shortid(), patterns.metadata_src_uri, pn)] = rd.getVar(patterns.metadata_src_uri) |
127 | 111 | ||
128 | def test_src_uri_left_files(self): | 112 | def test_src_uri_left_files(self): |
129 | # these tests just make sense on patches that can be merged | 113 | # these tests just make sense on patches that can be merged |
@@ -138,11 +122,11 @@ class TestMetadata(base.Metadata): | |||
138 | if 'core-image' in pn: | 122 | if 'core-image' in pn: |
139 | continue | 123 | continue |
140 | rd = self.tinfoil.parse_recipe(pn) | 124 | rd = self.tinfoil.parse_recipe(pn) |
141 | PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)] = rd.getVar(self.metadata_src_uri) | 125 | PatchTestDataStore['%s-%s-%s' % (self.shortid(), patterns.metadata_src_uri, pn)] = rd.getVar(patterns.metadata_src_uri) |
142 | 126 | ||
143 | for pn in self.modified: | 127 | for pn in self.modified: |
144 | pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)].split() | 128 | pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), patterns.metadata_src_uri, pn)].split() |
145 | test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)].split() | 129 | test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), patterns.metadata_src_uri, pn)].split() |
146 | 130 | ||
147 | pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')]) | 131 | pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')]) |
148 | test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')]) | 132 | test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')]) |
@@ -175,11 +159,11 @@ class TestMetadata(base.Metadata): | |||
175 | if 'core-image' in pn: | 159 | if 'core-image' in pn: |
176 | continue | 160 | continue |
177 | rd = self.tinfoil.parse_recipe(pn) | 161 | rd = self.tinfoil.parse_recipe(pn) |
178 | summary = rd.getVar(self.metadata_summary) | 162 | summary = rd.getVar(patterns.metadata_summary) |
179 | 163 | ||
180 | # "${PN} version ${PN}-${PR}" is the default, so fail if default | 164 | # "${PN} version ${PN}-${PR}" is the default, so fail if default |
181 | if summary.startswith('%s version' % pn): | 165 | if summary.startswith('%s version' % pn): |
182 | self.fail('%s is missing in newly added recipe' % self.metadata_summary) | 166 | self.fail('%s is missing in newly added recipe' % patterns.metadata_summary) |
183 | 167 | ||
184 | def test_cve_check_ignore(self): | 168 | def test_cve_check_ignore(self): |
185 | # Skip if we neither modified a recipe or target branches are not | 169 | # Skip if we neither modified a recipe or target branches are not |
@@ -191,7 +175,7 @@ class TestMetadata(base.Metadata): | |||
191 | if 'core-image' in pn: | 175 | if 'core-image' in pn: |
192 | continue | 176 | continue |
193 | rd = self.tinfoil.parse_recipe(pn) | 177 | rd = self.tinfoil.parse_recipe(pn) |
194 | cve_check_ignore = rd.getVar(self.cve_check_ignore_var) | 178 | cve_check_ignore = rd.getVar(patterns.cve_check_ignore_var) |
195 | 179 | ||
196 | if cve_check_ignore is not None: | 180 | if cve_check_ignore is not None: |
197 | self.fail('%s is deprecated and should be replaced by %s' % (self.cve_check_ignore_var, self.cve_status_var)) | 181 | self.fail('%s is deprecated and should be replaced by %s' % (patterns.cve_check_ignore_var, patterns.cve_status_var)) |