| # Copyright 2023 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import json |
| |
| from typing import List, Self |
| from dataclasses import dataclass |
| |
| TEST_URL_KEY = "test_url" |
| TEST_ARGS_KEY = "test_args" |
| TEST_FILTERS_KEY = "test_filters" |
| RUN_DISABLED_TESTS_KEY = "run_disabled_tests" |
| PARALLEL_KEY = "parallel" |
| MAX_SEVERITY_LOGS_KEY = "max_severity_logs" |
| REALM_KEY = "realm" |
| |
| |
| @dataclass |
| class ExecutionParams: |
| """Class to parse and store execution parameters""" |
| |
| test_url: str |
| test_args: List[str] |
| test_filters: List[str] |
| run_disabled_tests: bool |
| parallel: str |
| max_severity_logs: str |
| realm: str |
| |
| @classmethod |
| def initialize_from_json(cls, json_str: str) -> Self: |
| """Initialize and validate params from standard json format. |
| |
| Args: |
| json_str (str): standard json format containing arguments to run tests. |
| |
| Raises: |
| ValueError: Validation error |
| |
| Returns: |
| Self |
| """ |
| # Parse the JSON string |
| json_data = json.loads(json_str) |
| |
| # Check if 'test_url' is missing in the JSON data |
| if TEST_URL_KEY not in json_data: |
| raise ValueError(f"Missing '{TEST_URL_KEY}' in the JSON data") |
| |
| # Extract fields from the JSON data |
| test_url = json_data[TEST_URL_KEY] |
| test_args = json_data.get(TEST_ARGS_KEY, []) |
| test_filters = json_data.get(TEST_FILTERS_KEY, []) |
| run_disabled_tests = json_data.get(RUN_DISABLED_TESTS_KEY, False) |
| parallel = json_data.get(PARALLEL_KEY, None) |
| max_severity_logs = json_data.get(MAX_SEVERITY_LOGS_KEY, None) |
| realm = json_data.get(REALM_KEY, None) |
| |
| return cls( |
| test_url, |
| test_args, |
| test_filters, |
| run_disabled_tests, |
| parallel, |
| max_severity_logs, |
| realm, |
| ) |