From f73f502ecd93ec57cf336d3be252974833b9a6cf Mon Sep 17 00:00:00 2001 From: Marc Bonnici Date: Mon, 21 May 2018 16:16:41 +0100 Subject: [PATCH] tests/agenda_parser: Update agenda tests to the AgendaParser The current test was designed to test the removed `Agenda` class, we now use use an `AgendaParser` so update the tests to test its functionality instead. --- tests/data/bad-syntax-agenda.yaml | 6 + tests/test_agenda.py | 195 ------------------------------ tests/test_agenda_parser.py | 173 ++++++++++++++++++++++++++ 3 files changed, 179 insertions(+), 195 deletions(-) create mode 100644 tests/data/bad-syntax-agenda.yaml delete mode 100644 tests/test_agenda.py create mode 100644 tests/test_agenda_parser.py diff --git a/tests/data/bad-syntax-agenda.yaml b/tests/data/bad-syntax-agenda.yaml new file mode 100644 index 00000000..6bfe28e8 --- /dev/null +++ b/tests/data/bad-syntax-agenda.yaml @@ -0,0 +1,6 @@ +config: + # tab on the following line + reboot_policy: never + workloads: + - antutu + diff --git a/tests/test_agenda.py b/tests/test_agenda.py deleted file mode 100644 index 38f2fca9..00000000 --- a/tests/test_agenda.py +++ /dev/null @@ -1,195 +0,0 @@ -# Copyright 2013-2015 ARM Limited -# -# 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. -# - - -# pylint: disable=E0611 -# pylint: disable=R0201 -import os -from StringIO import StringIO -from unittest import TestCase - -from nose.tools import assert_equal, assert_in, raises - -from wa.framework.agenda import Agenda -from wa.framework.exception import ConfigError - - -YAML_TEST_FILE = os.path.join(os.path.dirname(__file__), 'data', 'test-agenda.yaml') - -invalid_agenda_text = """ -workloads: - - id: 1 - workload_parameters: - test: 1 -""" -invalid_agenda = StringIO(invalid_agenda_text) -invalid_agenda.name = 'invalid1' - -duplicate_agenda_text = """ -global: - iterations: 1 -workloads: - - id: 1 - workload_name: antutu - workload_parameters: - test: 1 - - id: 1 - workload_name: andebench -""" -duplicate_agenda = StringIO(duplicate_agenda_text) -duplicate_agenda.name = 'invalid2' - -short_agenda_text = """ -workloads: [antutu, linpack, andebench] -""" -short_agenda = StringIO(short_agenda_text) -short_agenda.name = 'short' - -default_ids_agenda_text = """ -workloads: - - antutu - - id: 1 - name: linpack - - id: test - name: andebench - params: - number_of_threads: 1 - - vellamo -""" -default_ids_agenda = StringIO(default_ids_agenda_text) -default_ids_agenda.name = 'default_ids' - -sectioned_agenda_text = """ -sections: - - id: sec1 - runtime_params: - dp: one - workloads: - - antutu - - andebench - - name: linpack - runtime_params: - dp: two - - id: sec2 - runtime_params: - dp: three - workloads: - - antutu -workloads: - - nenamark -""" -sectioned_agenda = StringIO(sectioned_agenda_text) -sectioned_agenda.name = 'sectioned' - -dup_sectioned_agenda_text = """ -sections: - - id: sec1 - workloads: - - antutu - - id: sec1 - workloads: - - andebench -workloads: - - nenamark -""" -dup_sectioned_agenda = StringIO(dup_sectioned_agenda_text) -dup_sectioned_agenda.name = 'dup-sectioned' - -caps_agenda_text = """ -config: - device: TC2 -global: - runtime_parameters: - sysfile_values: - /sys/test/MyFile: 1 - /sys/test/other file: 2 -workloads: - - id: 1 - name: linpack -""" -caps_agenda = StringIO(caps_agenda_text) -caps_agenda.name = 'caps' - -bad_syntax_agenda_text = """ -config: - # tab on the following line - reboot_policy: never -workloads: - - antutu -""" -bad_syntax_agenda = StringIO(bad_syntax_agenda_text) -bad_syntax_agenda.name = 'bad_syntax' - -section_ids_test_text = """ -config: - device: TC2 - reboot_policy: never -workloads: - - name: bbench - id: bbench - - name: audio -sections: - - id: foo - - id: bar -""" -section_ids_agenda = StringIO(section_ids_test_text) -section_ids_agenda.name = 'section_ids' - - -class AgendaTest(TestCase): - - def test_yaml_load(self): - agenda = Agenda(YAML_TEST_FILE) - assert_equal(len(agenda.workloads), 4) - - def test_duplicate_id(self): - try: - Agenda(duplicate_agenda) - except ConfigError, e: - assert_in('duplicate', e.message.lower()) # pylint: disable=E1101 - else: - raise Exception('ConfigError was not raised for an agenda with duplicate ids.') - - def test_yaml_missing_field(self): - try: - Agenda(invalid_agenda_text) - except ConfigError, e: - assert_in('workload name', e.message) - else: - raise Exception('ConfigError was not raised for an invalid agenda.') - - def test_defaults(self): - agenda = Agenda(short_agenda) - assert_equal(len(agenda.workloads), 3) - assert_equal(agenda.workloads[0].workload_name, 'antutu') - assert_equal(agenda.workloads[0].id, '1') - - def test_default_id_assignment(self): - agenda = Agenda(default_ids_agenda) - assert_equal(agenda.workloads[0].id, '2') - assert_equal(agenda.workloads[3].id, '3') - - def test_sections(self): - agenda = Agenda(sectioned_agenda) - assert_equal(agenda.sections[0].workloads[0].workload_name, 'antutu') - assert_equal(agenda.sections[1].runtime_parameters['dp'], 'three') - - @raises(ConfigError) - def test_dup_sections(self): - Agenda(dup_sectioned_agenda) - - @raises(ConfigError) - def test_bad_syntax(self): - Agenda(bad_syntax_agenda) diff --git a/tests/test_agenda_parser.py b/tests/test_agenda_parser.py new file mode 100644 index 00000000..4829b957 --- /dev/null +++ b/tests/test_agenda_parser.py @@ -0,0 +1,173 @@ +# Copyright 2013-2015 ARM Limited +# +# 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. +# +# 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. +# + + +# pylint: disable=E0611 +# pylint: disable=R0201 +import os +import yaml +from collections import defaultdict +from unittest import TestCase + +from nose.tools import assert_equal, assert_in, raises, assert_true + +from wa.framework.configuration.execution import ConfigManager +from wa.framework.configuration.parsers import AgendaParser +from wa.framework.exception import ConfigError +from wa.utils.types import reset_all_counters + +YAML_TEST_FILE = os.path.join(os.path.dirname(__file__), 'data', 'test-agenda.yaml') +YAML_BAD_SYNTAX_FILE = os.path.join(os.path.dirname(__file__), 'data', 'bad-syntax-agenda.yaml') + +invalid_agenda_text = """ +workloads: + - id: 1 + workload_parameters: + test: 1 +""" +invalid_agenda = yaml.load(invalid_agenda_text) +invalid_agenda.name = 'invalid1' + +duplicate_agenda_text = """ +global: + iterations: 1 +workloads: + - id: 1 + workload_name: antutu + workload_parameters: + test: 1 + - id: "1" + workload_name: benchmarkpi +""" +duplicate_agenda = yaml.load(duplicate_agenda_text) +duplicate_agenda.name = 'invalid2' + +short_agenda_text = """ +workloads: [antutu, dhrystone, benchmarkpi] +""" +short_agenda = yaml.load(short_agenda_text) +short_agenda.name = 'short' + +default_ids_agenda_text = """ +workloads: + - antutu + - id: wk1 + name: benchmarkpi + - id: test + name: dhrystone + params: + cpus: 1 + - vellamo +""" +default_ids_agenda = yaml.load(default_ids_agenda_text) +default_ids_agenda.name = 'default_ids' + +sectioned_agenda_text = """ +sections: + - id: sec1 + runtime_params: + dp: one + workloads: + - name: antutu + workload_parameters: + markers_enabled: True + - benchmarkpi + - name: dhrystone + runtime_params: + dp: two + - id: sec2 + runtime_params: + dp: three + workloads: + - antutu +workloads: + - memcpy +""" +sectioned_agenda = yaml.load(sectioned_agenda_text) +sectioned_agenda.name = 'sectioned' + +dup_sectioned_agenda_text = """ +sections: + - id: sec1 + workloads: + - antutu + - id: sec1 + workloads: + - benchmarkpi +workloads: + - memcpy +""" +dup_sectioned_agenda = yaml.load(dup_sectioned_agenda_text) +dup_sectioned_agenda.name = 'dup-sectioned' + + +class AgendaTest(TestCase): + + def setUp(self): + reset_all_counters() + self.config = ConfigManager() + self.parser = AgendaParser() + + def test_yaml_load(self): + self.parser.load_from_path(self.config, YAML_TEST_FILE) + assert_equal(len(self.config.jobs_config.root_node.workload_entries), 4) + + def test_duplicate_id(self): + try: + self.parser.load(self.config, duplicate_agenda, 'test') + except ConfigError, e: + assert_in('duplicate', e.message.lower()) # pylint: disable=E1101 + else: + raise Exception('ConfigError was not raised for an agenda with duplicate ids.') + + def test_yaml_missing_field(self): + try: + self.parser.load(self.config, invalid_agenda, 'test') + except ConfigError, e: + assert_in('workload name', e.message) + else: + raise Exception('ConfigError was not raised for an invalid agenda.') + + def test_defaults(self): + self.parser.load(self.config, short_agenda, 'test') + workload_entries = self.config.jobs_config.root_node.workload_entries + assert_equal(len(workload_entries), 3) + assert_equal(workload_entries[0].config['workload_name'], 'antutu') + assert_equal(workload_entries[0].id, 'wk1') + + def test_default_id_assignment(self): + self.parser.load(self.config, default_ids_agenda, 'test2') + workload_entries = self.config.jobs_config.root_node.workload_entries + assert_equal(workload_entries[0].id, 'wk2') + assert_equal(workload_entries[3].id, 'wk3') + + def test_sections(self): + self.parser.load(self.config, sectioned_agenda, 'test') + root_node_workload_entries = self.config.jobs_config.root_node.workload_entries + leaves = list(self.config.jobs_config.root_node.leaves()) + section1_workload_entries = leaves[0].workload_entries + section2_workload_entries = leaves[0].workload_entries + + assert_equal(root_node_workload_entries[0].config['workload_name'], 'memcpy') + assert_true(section1_workload_entries[0].config['workload_parameters']['markers_enabled']) + assert_equal(section2_workload_entries[0].config['workload_name'], 'antutu') + + @raises(ConfigError) + def test_dup_sections(self): + self.parser.load(self.config, dup_sectioned_agenda, 'test') + + @raises(ConfigError) + def test_bad_syntax(self): + self.parser.load_from_path(self.config, YAML_BAD_SYNTAX_FILE)