f6d27de1cd
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 18s
CI / security (pull_request) Successful in 34s
CI / typecheck (pull_request) Successful in 36s
CI / unit_tests (pull_request) Successful in 2m30s
CI / integration_tests (pull_request) Successful in 3m6s
CI / docker (pull_request) Successful in 40s
CI / coverage (pull_request) Successful in 4m28s
CI / benchmark-regression (pull_request) Successful in 29m56s
CI / lint (push) Successful in 13s
CI / quality (push) Successful in 20s
CI / build (push) Successful in 21s
CI / security (push) Successful in 32s
CI / typecheck (push) Successful in 34s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 2m38s
CI / integration_tests (push) Successful in 3m12s
CI / docker (push) Successful in 40s
CI / coverage (push) Successful in 4m27s
CI / benchmark-publish (push) Successful in 16m51s
Introduce ComponentResolver with a deterministic 3-level scope chain (plan > project > global) for resolving pluggable Protocol-based components. The resolver supports caching, thread-safety, config.toml extension loading, plan metadata loading, introspection APIs, and security-restricted dynamic imports. Includes 39 BDD scenarios, 9 Robot Framework integration tests, ASV benchmarks, and vulture whitelist updates. 100% code coverage on component_resolver.py; overall coverage at 97.07%. ISSUES CLOSED: #552
82 lines
3.7 KiB
Plaintext
82 lines
3.7 KiB
Plaintext
*** Settings ***
|
|
Documentation End-to-end tests for ComponentResolver with 3-level scope chain
|
|
Resource ${CURDIR}/common.resource
|
|
Suite Setup Setup Test Environment
|
|
Suite Teardown Cleanup Test Environment
|
|
|
|
*** Variables ***
|
|
${HELPER} ${CURDIR}/helper_component_resolver.py
|
|
|
|
*** Test Cases ***
|
|
ComponentResolver Global Default Resolution
|
|
[Documentation] Verify global default is resolved when no overrides exist
|
|
${result}= Run Process ${PYTHON} ${HELPER} global-default cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-global-ok
|
|
|
|
ComponentResolver Project Override
|
|
[Documentation] Verify project-level override takes precedence over global
|
|
${result}= Run Process ${PYTHON} ${HELPER} project-override cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-project-override-ok
|
|
|
|
ComponentResolver Plan Override
|
|
[Documentation] Verify plan-level override takes highest precedence
|
|
${result}= Run Process ${PYTHON} ${HELPER} plan-override cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-plan-override-ok
|
|
|
|
ComponentResolver Fallthrough To Global
|
|
[Documentation] Verify fallthrough when no plan or project override matches
|
|
${result}= Run Process ${PYTHON} ${HELPER} fallthrough cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-fallthrough-ok
|
|
|
|
ComponentResolver Missing Component Error
|
|
[Documentation] Verify ComponentNotFoundError for unregistered components
|
|
${result}= Run Process ${PYTHON} ${HELPER} not-found cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-not-found-ok
|
|
|
|
ComponentResolver Caching Behavior
|
|
[Documentation] Verify resolution results are cached
|
|
${result}= Run Process ${PYTHON} ${HELPER} caching cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-caching-ok
|
|
|
|
ComponentResolver Security Module Prefix
|
|
[Documentation] Verify disallowed module prefixes are rejected
|
|
${result}= Run Process ${PYTHON} ${HELPER} security cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-security-ok
|
|
|
|
ComponentResolver Introspection APIs
|
|
[Documentation] Verify list_global_types, list_project_types, list_plan_types
|
|
${result}= Run Process ${PYTHON} ${HELPER} introspection cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-introspection-ok
|
|
|
|
ComponentResolver Clear All
|
|
[Documentation] Verify clear removes all registrations
|
|
${result}= Run Process ${PYTHON} ${HELPER} clear cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} component-resolver-clear-ok
|