# # Copyright (C) 2017 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # from vts.testcases.kernel.api.proc import KernelProcFileTestBase from vts.testcases.kernel.api.proc.KernelProcFileTestBase import repeat_rule, literal_token class ProcCpuInfoTest(KernelProcFileTestBase.KernelProcFileTestBase): '''/proc/cpuinfo displays a collection of cpu and architecture specific items. The file consists of multiple lines of 'identifier : values' where 'identifier' is a space separated name that can end in some tabs, and 'values' are space separated items that can also in in a space. Extra newlines are allowed between normal lines. ''' EXPECTED_FIELDS = [ ['Features', ['\t']], ['processor', ['\t']], ['CPU', 'architecture', []], ] start = 'lines' # Any character except for ':' and whitespace is allowed t_STRING = r'[^:^ ^\t^\n]+' # Numbers and literals are tokenized as strings instead t_NUMBER = r'x' t_HEX_LITERAL = r'x' t_FLOAT = r'x' p_lines = repeat_rule('line') p_string_spaces = repeat_rule('string_space', zero_ok=True) p_space_items = repeat_rule('space_item', zero_ok=True) p_TABs = repeat_rule('TAB', zero_ok=True) def p_line(self, p): '''line : string_spaces STRING TABs COLON space_items SPACE NEWLINE | string_spaces STRING TABs COLON space_items NEWLINE | NEWLINE''' if len(p) == 2: p[0] = [] return p[0] = [p[1] + [p[2], p[3]], p[5], p[6]] def p_space_item(self, p): 'space_item : SPACE STRING' p[0] = p[2] def p_string_space(self, p): 'string_space : STRING SPACE' p[0] = p[1] def result_correct(self, parse_result): expected_fields = self.EXPECTED_FIELDS[:] for line in parse_result: if len(line) > 0: if line[0] in expected_fields: expected_fields.remove(line[0]) return len(expected_fields) == 0 def get_path(self): return "/proc/cpuinfo"