blob: 66ad6f3e824f90f64d3bb1090c64a536fc30daed [file] [log] [blame]
# 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,
)