summaryrefslogtreecommitdiff
path: root/unittests/framework/backends/test_json_update.py
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/framework/backends/test_json_update.py')
-rw-r--r--unittests/framework/backends/test_json_update.py738
1 files changed, 0 insertions, 738 deletions
diff --git a/unittests/framework/backends/test_json_update.py b/unittests/framework/backends/test_json_update.py
index 501a895a4..db45c1b1e 100644
--- a/unittests/framework/backends/test_json_update.py
+++ b/unittests/framework/backends/test_json_update.py
@@ -24,7 +24,6 @@ from __future__ import (
absolute_import, division, print_function, unicode_literals
)
import os
-import copy
try:
import simplejson as json
except ImportError:
@@ -36,13 +35,10 @@ except ImportError:
import jsonschema
import pytest
-import six
from framework import backends
from framework import results
-from . import shared
-
# pylint: disable=protected-access,no-self-use
@@ -53,740 +49,6 @@ def setup_module():
yield
-class TestV0toV1(object):
- """Tests for version 0 -> version 1 of json results format."""
-
- # NOTE: It is very important to NOT use grouptools in this class.
- # The grouptools module changes and is updated from time to time, but this
- # file must remain static. It tests the update from one static version to
- # another static version.
- data = {
- 'options': {
- 'profile': "tests/fake.py",
- 'filter': [],
- 'exclude_filter': [],
- },
- 'name': 'fake-tests',
- 'lspci': 'fake',
- 'glxinfo': 'fake',
- 'tests': {
- 'sometest': {
- 'result': 'pass',
- 'time': 0.01,
- 'dmesg': ['this', 'is', 'dmesg'],
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput: stdout\n',
- },
- 'group1/groupA/test/subtest 1': {
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput:stdout\n',
- 'subtest': {
- 'subtest 1': 'pass',
- 'subtest 2': 'pass'
- },
- 'returncode': 0,
- 'command': 'this is a command',
- 'result': 'pass',
- 'time': 0.1
- },
- 'group1/groupA/test/subtest 2': {
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput:stdout\n',
- 'subtest': {
- 'subtest 1': 'pass',
- 'subtest 2': 'pass'
- },
- 'returncode': 0,
- 'command': 'this is a command',
- 'result': 'pass',
- 'time': 0.1
- },
- 'single/test/thing': {
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput:stdout\n',
- 'subtest': {
- 'subtest 1': 'pass',
- },
- 'returncode': 0,
- 'command': 'this is a command',
- 'result': 'pass',
- 'time': 0.1
- },
- 'group2/groupA/test/subtest 1/depth': {
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput:stdout\n',
- 'subtest': {
- 'subtest 1/depth': 'pass',
- 'subtest 2/float': 'pass'
- },
- 'returncode': 0,
- 'command': 'this is a command',
- 'result': 'pass',
- 'time': 0.1
- },
- 'group2/groupA/test/subtest 2/float': {
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput:stdout\n',
- 'subtest': {
- 'subtest 1/depth': 'pass',
- 'subtest 2/float': 'pass'
- },
- 'returncode': 0,
- 'command': 'this is a command',
- 'result': 'pass',
- 'time': 0.1
- },
- 'group3/groupA/test': {
- 'info': 'Returncode: 1\n\nErrors:stderr\n\nOutput:stdout\n',
- 'subtest': {
- 'subtest 1': 'pass',
- 'subtest 2': 'pass',
- 'subtest 3': 'pass',
- },
- 'returncode': 0,
- 'command': 'this is a command',
- 'result': 'pass',
- 'time': 0.1
- }
- }
- }
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('results.json')
- p.write(json.dumps(self.data))
- with p.open('r') as f:
- return backends.json._update_zero_to_one(backends.json._load(f))
-
- def test_dmesg(self, result):
- """backends.json.update_results (0 -> 1): dmesg is converted from a
- list to a string.
- """
- assert result.tests['sometest']['dmesg'] == 'this\nis\ndmesg'
-
- def test_subtests_remove_duplicates(self, result):
- """backends.json.update_results (0 -> 1): Removes duplicate entries"""
- assert 'group1/groupA/test/subtest 1' not in result.tests
- assert 'group1/groupA/test/subtest 2' not in result.tests
-
- def test_subtests_add_test(self, result):
- """backends.json.update_results (0 -> 1): Add an entry for the actual
- test.
- """
- assert result.tests.get('group1/groupA/test')
-
- def test_subtests_is_testresult(self, result):
- """backends.json.update_results (0 -> 1): The result of the new test is
- a dict Instance.
- """
- assert isinstance(result.tests['group1/groupA/test'], dict)
-
- def test_info_delete(self, result):
- """backends.json.update_results (0 -> 1): Remove the info name from
- results.
- """
- for value in six.itervalues(result.tests):
- assert 'info' not in value
-
- def test_returncode_from_info(self, result):
- """backends.json.update_results (0 -> 1): Use the returncode from info
- if there is no returncode.
- """
- assert result.tests['sometest']['returncode'] == 1
-
- def test_returncode_no_override(self, result):
- """backends.json.update_results (0 -> 1): Do not clobber returncode
- with info.
-
- The returncode from info should not overwrite an existing returcnode
- attribute, this test only tests that the value in info isn't used when
- there is a value in returncode already.
- """
- assert result.tests['group1/groupA/test']['returncode'] != 1
-
- def test_err_from_info(self, result):
- """backends.json.update_results (0 -> 1): add an err attribute from
- info.
- """
- assert result.tests['group1/groupA/test']['err'] == 'stderr'
-
- def test_out_from_info(self, result):
- """backends.json.update_results (0 -> 1): add an out attribute from
- info.
- """
- assert result.tests['group1/groupA/test']['out'] == 'stdout'
-
- def test_set_version(self, result):
- """backends.json.update_results (0 -> 1): Set the version to 1"""
- assert result.results_version == 1
-
- def test_dont_break_single_subtest(self, result):
- """backends.json.update_results (0 -> 1): Don't break single subtest
- entries.
-
- A test with a single subtest was written correctly before, don't break
- it by removing the name of the test. ex:
- test/foo/bar: {
- ...
- subtest: {
- 1x1: pass
- }
- }
-
- should remain test/foo/bar since bar is the name of the test not a
- subtest
- """
- assert result.tests.get('single/test/thing')
-
- def test_subtests_with_slash(self, result):
- """backends.json.update_results (0 -> 1): Subtest names with /'s are
- handled correctly.
- """
- expected = 'group2/groupA/test/subtest 1'
- assert expected not in result.tests
-
- def test_handle_fixed_subtests(self, result):
- """backends.json.update_results (0 -> 1): Correctly handle new single
- entry subtests correctly.
- """
- assert 'group3/groupA/test' in result.tests
-
- def test_load_results_unversioned(self, tmpdir):
- """backends.json.load_results: Loads unversioned results and updates .
- correctly.
-
- This test pickes on attribute (dmesg) to test, with the assumption taht
- if the other tests work then once the update path starts it runs
- correctly.
- """
- p = tmpdir.join('results.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- result = backends.json.load_results(six.text_type(p), 'none')
-
- assert result.tests['sometest'].dmesg == 'this\nis\ndmesg'
-
- def test_load_results_v0(self, tmpdir):
- """backends.json.load_results: Loads results v0 and updates correctly.
-
- This test pickes on attribute (dmesg) to test, with the assumption taht
- if the other tests work then once the update path starts it runs
- correctly.
- """
- data = copy.deepcopy(self.data)
- data['results_version'] = 0
-
- p = tmpdir.join('results.json')
- p.write(json.dumps(data, default=backends.json.piglit_encoder))
- result = backends.json.load_results(six.text_type(p), 'none')
-
- assert result.tests['sometest'].dmesg == 'this\nis\ndmesg'
-
- def test_info_split(self, tmpdir):
- """backends.json.update_results (0 -> 1): info can split into any
- number of elements.
- """
- data = copy.copy(self.data)
- data['tests']['sometest']['info'] = \
- 'Returncode: 1\n\nErrors:stderr\n\nOutput: stdout\n\nmore\n\nstuff'
-
- p = tmpdir.join('results.json')
- p.write(json.dumps(data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- backends.json._update_zero_to_one(backends.json._load(f))
-
- def test_load_results(self, tmpdir):
- """backends.json.update_results (1 -> current): load_results properly
- updates.
- """
- p = tmpdir.join('results.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- result = backends.json.load_results(six.text_type(p), 'none')
- assert result.results_version == backends.json.CURRENT_JSON_VERSION # pylint: disable=no-member
-
-
-class TestV1toV2(object):
- """Tests version 1 to version 2."""
-
- class TestWithChanges(object):
- """Test V1 to V2 of results."""
- data = {
- "results_version": 1,
- "name": "test",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- "env": {
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff"
- }
- },
- "tests": {
- "test/is/a/test": {
- "returncode": 0,
- "err": None,
- "environment": None,
- "command": "foo",
- "result": "skip",
- "time": 0.123,
- "out": None,
- }
- }
- }
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_one_to_two(backends.json._load(f))
-
- def test_version_is_two(self, result):
- """backends.json.update_results (1 -> 2): The result version is updated
- to 2.
- """
- assert result.results_version == 2
-
- def test_no_env(self, result):
- """backends.json.update_results (1 -> 2): Removes options['env']."""
- assert 'env' not in result.options
-
- def test_glxinfo(self, result):
- """backends.json.update_results (1 -> 2): puts glxinfo in the root."""
- assert result.glxinfo == 'and stuff'
-
- def test_lspci(self, result):
- """backends.json.update_results (1 -> 2): puts lspci in the root."""
- assert result.lspci == 'stuff'
-
- def test_uname(self, result):
- """backends.json.update_results (1 -> 2): puts uname in the root."""
- assert result.uname == 'more stuff'
-
- def test_wglinfo(self, result):
- """backends.json.update_results (1 -> 2): puts wglinfo in the root."""
- assert result.wglinfo == 'stuff'
-
- class TestWithoutChanges(object):
- """Test a version 1 to 2 update when version 1 was correct"""
- data = {
- "results_version": 1,
- "name": "test",
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- },
- "tests": {
- "test/is/a/test": {
- "returncode": 0,
- "err": None,
- "environment": None,
- "command": "foo",
- "result": "skip",
- "time": 0.123,
- "out": None,
- }
- }
- }
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_one_to_two(backends.json._load(f))
-
- def test_version_is_two(self, result):
- """backends.json.update_results (1 -> 2) no change: The result version
- is updated to 2.
- """
- assert result.results_version == 2
-
- def test_glxinfo(self, result):
- """backends.json.update_results (1 -> 2) no change: doesn't clobber
- glxinfo.
- """
- assert result.glxinfo == 'and stuff'
-
- def test_lspci(self, result):
- """backends.json.update_results (1 -> 2) no change: doesn't clobber
- lspci.
- """
- assert result.lspci == 'stuff'
-
- def test_uname(self, result):
- """backends.json.update_results (1 -> 2) no change: doesn't clobber
- uname.
- """
- assert result.uname == 'more stuff'
-
- def test_wglinfo(self, result):
- """backends.json.update_results (1 -> 2) no change: doesn't clobber
- wglinfo.
- """
- assert result.wglinfo == 'stuff'
-
-
-class TestV2toV3(object):
- """Tests for version 2 -> version 3 of json results"""
- # NOTE: do NOT use grouptools in this class, see v0 tests for explanation
- data = {
- "results_version": 2,
- "name": "test",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- "env": {
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff"
- }
- },
- "tests": {
- "test/is/a/test": {
- "returncode": 0,
- "err": None,
- "environment": None,
- "command": "foo",
- "result": "skip",
- "time": 0.123,
- "out": None,
- },
- "Test/Is/SomE/Other1/Test": {
- "returncode": 0,
- "err": None,
- "environment": None,
- "command": "foo",
- "result": "skip",
- "time": 0.123,
- "out": None,
- }
- }
- }
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_two_to_three(backends.json._load(f))
-
- def test_unchanged(self, result):
- """backends.json.update_results (2 -> 3): results with no caps are not
- mangled.
- """
- assert 'test/is/a/test' in result.tests
-
- def test_lower(self, result):
- """backends.json.update_results (2 -> 3): results with caps are
- lowered.
- """
- assert 'test/is/some/other1/test' in result.tests
-
- def test_removed(self, result):
- """backends.json.update_results (2 -> 3): results with caps are
- removed.
- """
- assert 'Test/Is/SomE/Other1/Test' not in result.tests
-
-
-class TestV3toV4(object):
- """Tests for version 3 to version 4."""
-
- # NOTE: do NOT use grouptools in this module, see v0 tests for explanation
- test_data = {
- 'returncode': 0,
- 'err': None,
- 'environment': None,
- 'command': 'foo',
- 'result': 'skip',
- 'time': 0.123,
- 'out': None,
- }
-
- data = {
- "results_version": 3,
- "name": "test",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- "env": {
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff"
- }
- },
- "tests": {
- "spec/arb_texture_rg/fs-shadow2d-red-01": test_data,
- "spec/arb_texture_rg/fs-shadow2d-red-02": test_data,
- "spec/arb_texture_rg/fs-shadow2d-red-03": test_data,
- "spec/arb_draw_instanced/draw-non-instanced": test_data,
- "spec/arb_draw_instanced/instance-array-dereference": test_data,
- "glslparsertest/foo": test_data,
- }
- }
-
- old = list(data['tests'].keys())
- new = [
- "spec/arb_texture_rg/execution/fs-shadow2d-red-01",
- "spec/arb_texture_rg/execution/fs-shadow2d-red-02",
- "spec/arb_texture_rg/execution/fs-shadow2d-red-03",
- "spec/arb_draw_instanced/execution/draw-non-instanced",
- "spec/arb_draw_instanced/execution/instance-array-dereference",
- ]
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_three_to_four(backends.json._load(f))
-
- def test_old_removed(self, result):
- """backends.json.update_results (3 -> 4): All old test names are
- removed.
- """
- for old in self.old:
- assert old not in result.tests
-
- def test_new_added(self, result):
- """backends.json.update_results (3 -> 4): All new test names are added.
- """
- for new in self.new:
- assert new in result.tests
-
- def test_new_has_data(self, result):
- """backends.json.update_results (3 -> 4): All new tests have expected
- data.
- """
- for new in self.new:
- assert result.tests[new] == self.test_data
-
- def test_missing(self, tmpdir):
- """backends.json.update_results (3 -> 4): updates successfully when
- tests to rename are not present.
- """
- data = copy.copy(self.data)
- del data['tests']['spec/arb_draw_instanced/instance-array-dereference']
-
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
-
- with p.open('r') as f:
- backends.json._update_three_to_four(backends.json._load(f))
-
-
-class TestV4toV5(object):
- test_data = {
- 'returncode': 0,
- 'err': None,
- 'environment': None,
- 'command': 'foo',
- 'result': 'skip',
- 'time': 0.123,
- 'out': None,
- }
-
- data = {
- "results_version": 4,
- "name": "test",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- "env": {
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff"
- }
- },
- "tests": {
- "a/test/group/of/great/length": test_data,
- "has\\windows": test_data,
- }
- }
-
- old = list(data['tests'].keys())
- new = [
- 'a@test@group@of@great@length',
- 'has@windows',
- ]
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_four_to_five(backends.json._load(f))
-
- def test_posix_removed(self, result):
- """backends.json.update_results (4 -> 5): / is replaced with @."""
- assert 'a/test/of/great/length' not in result.tests
-
- def test_win_removed(self, result):
- """backends.json.update_results (4 -> 5): \\ is replaced with @."""
- assert 'has\\windows' not in result.tests
-
- def test_new_added(self, result):
- """backends.json.update_results (4 -> 5): All new test names are added.
- """
- for new in self.new:
- assert new in result.tests
-
- def test_new_has_data(self, result):
- """backends.json.update_results (4 -> 5): All new tests have expected
- data.
- """
- for new in self.new:
- assert result.tests[new] == self.test_data
-
-
-class TestV5toV6(object):
- test_data = {
- 'returncode': 0,
- 'err': '',
- 'environment': None,
- 'command': 'foo',
- 'result': 'skip',
- 'time': 0.123,
- 'out': '',
- }
-
- data = {
- "results_version": 4,
- "name": "test",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- "env": {
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff"
- }
- },
- "tests": {
- 'a@test': test_data,
- }
- }
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_five_to_six(backends.json._load(f))
-
- def test_result_is_testresult_instance(self, result):
- """backends.json.update_results (5 -> 6): A test result is converted to
- a TestResult instance.
- """
- assert isinstance(result.tests['a@test'], results.TestResult)
-
-
-class TestV6toV7(object):
- """Tests for version 6 to version 7."""
-
- data = {
- "results_version": 6,
- "name": "test",
- "options": {
- "profile": ['quick'],
- "dmesg": False,
- "verbose": False,
- "platform": "gbm",
- "sync": False,
- "valgrind": False,
- "filter": [],
- "concurrent": "all",
- "test_count": 0,
- "exclude_tests": [],
- "exclude_filter": [],
- "env": {
- "lspci": "stuff",
- "uname": "more stuff",
- "glxinfo": "and stuff",
- "wglinfo": "stuff"
- }
- },
- "tests": {
- 'a@test': results.TestResult('pass'),
- 'a@nother@test': results.TestResult('fail'),
- 'a@nother@thing': results.TestResult('crash'),
- }
- }
-
- @pytest.fixture
- def result(self, tmpdir):
- p = tmpdir.join('result.json')
- p.write(json.dumps(self.data, default=backends.json.piglit_encoder))
- with p.open('r') as f:
- return backends.json._update_six_to_seven(backends.json._load(f))
-
- def test_is_TestrunResult(self, result):
- """backends.json.update_results (6 -> 7): makes TestrunResult."""
- assert isinstance(result, results.TestrunResult)
-
- def test_totals(self, result):
- """backends.json.update_results (6 -> 7): Totals are populated."""
- assert result.totals != {}
-
-
class TestV7toV8(object):
"""Tests for Version 7 to version 8."""