| # Copyright 2018 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Test the build_summary module.""" |
| |
| import json |
| |
| from chromite.lib import build_summary |
| from chromite.lib import constants |
| from chromite.lib import cros_test_lib |
| |
| |
| class BuildSummaryTests(cros_test_lib.TestCase): |
| """Test the BuildSummary class.""" |
| |
| def testPartialJson(self) -> None: |
| """Test that fields not present in JSON aren't changed.""" |
| summary = build_summary.BuildSummary() |
| raw_json = '{"build_number": 10}' |
| summary.from_json(raw_json) |
| |
| # Only build_number changes. |
| default_summary = build_summary.BuildSummary() |
| self.assertEqual(summary.build_number, 10) |
| self.assertEqual( |
| summary.master_build_id, default_summary.master_build_id |
| ) |
| self.assertEqual(summary.status, default_summary.status) |
| |
| def testInvalidJson(self) -> None: |
| """Test that invalid JSON raises an exception.""" |
| bad_json = "{" |
| summary = build_summary.BuildSummary() |
| self.assertRaises(ValueError, summary.from_json, bad_json) |
| |
| def testJsonUnknownKeys(self) -> None: |
| """Test that unknown keys in JSON don't produce any effect.""" |
| raw_json = '{"unknown_key": 50}' |
| summary = build_summary.BuildSummary() |
| summary.from_json(raw_json) |
| self.assertFalse(hasattr(summary, "unknown_key")) |
| |
| def testJsonInvalidStatus(self) -> None: |
| """Test that an invalid status in JSON is ignored.""" |
| raw_json = '{"status": "whoops"}' |
| summary = build_summary.BuildSummary() |
| summary.from_json(raw_json) |
| self.assertEqual(summary.status, constants.BUILDER_STATUS_MISSING) |
| |
| def testRoundTrip(self) -> None: |
| """Test that a BuildSummary can round-trip through JSON.""" |
| summary1 = build_summary.BuildSummary() |
| summary1.build_number = 314 |
| summary1.buildbucket_id = 3140000 |
| summary1.status = constants.BUILDER_STATUS_PASSED |
| summary1.master_build_id = 2718 |
| |
| encoded = summary1.to_json() |
| summary2 = build_summary.BuildSummary() |
| summary2.from_json(encoded) |
| |
| self.assertEqual(summary1, summary2) |
| |
| def testJsonNoUnecessaryKeys(self) -> None: |
| """Test that the JSON output doesn't contain keys for zero values.""" |
| summary = build_summary.BuildSummary(build_number=5) |
| out_fields = json.loads(summary.to_json()) |
| self.assertSetEqual( |
| set(out_fields.keys()), set(["build_number", "status"]) |
| ) |
| |
| def testAttributesListMatchObject(self) -> None: |
| """Test that all attributes are listed in _PERSIST_ATTRIBUTES.""" |
| summary = build_summary.BuildSummary() |
| # pylint: disable=protected-access |
| self.assertSetEqual( |
| set(vars(summary).keys()), set(summary._PERSIST_ATTRIBUTES) |
| ) |
| |
| def testBuildSummary(self) -> None: |
| summary = build_summary.BuildSummary() |
| description = summary.build_description() |
| self.assertEqual(description, "local build") |
| |
| # buildbucket_id string |
| summary = build_summary.BuildSummary(buildbucket_id="bb_id") |
| description = summary.build_description() |
| self.assertEqual(description, "buildbucket_id=bb_id") |
| |
| # buildbucket_id int (can this really happen) |
| summary = build_summary.BuildSummary(buildbucket_id=1234) |
| description = summary.build_description() |
| self.assertEqual(description, "buildbucket_id=1234") |
| |
| # build_number int. |
| summary = build_summary.BuildSummary(build_number=12) |
| description = summary.build_description() |
| self.assertEqual(description, "build_number=12") |
| |
| # build_number str. |
| summary = build_summary.BuildSummary(build_number="12") |
| description = summary.build_description() |
| self.assertEqual(description, "build_number=12") |