521a552e56
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 14s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 19s
CI / typecheck (pull_request) Successful in 37s
CI / security (pull_request) Successful in 51s
CI / unit_tests (pull_request) Successful in 2m31s
CI / integration_tests (pull_request) Successful in 3m27s
CI / docker (pull_request) Successful in 56s
CI / coverage (pull_request) Successful in 6m7s
CI / lint (push) Successful in 12s
CI / build (push) Successful in 14s
CI / quality (push) Successful in 17s
CI / security (push) Successful in 42s
CI / typecheck (push) Successful in 44s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 2m37s
CI / docker (push) Successful in 39s
CI / integration_tests (push) Successful in 3m24s
CI / coverage (push) Successful in 5m9s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (pull_request) Successful in 32m7s
Implement plugin architecture framework enabling custom implementations of tools, strategies, sandbox strategies, index backends, and pipeline components through module:ClassName resolution and entry point discovery. Key changes: - Add infrastructure/plugins/ package with PluginLoader, PluginManager, types, exceptions - Implement dynamic import via module:ClassName with security prefix allowlist - Add entry point discovery via importlib.metadata - Add Protocol validation for loaded plugin classes - Add plugin lifecycle management (discover/activate/deactivate) - Add config-driven registration (custom_module + custom_class + custom_options) - Register PluginManager in DI container - Add comprehensive Behave BDD tests, Robot integration tests, ASV benchmarks ISSUES CLOSED: #585
90 lines
4.0 KiB
Plaintext
90 lines
4.0 KiB
Plaintext
*** Settings ***
|
|
Documentation Integration tests for Plugin Architecture Framework
|
|
Resource ${CURDIR}/common.resource
|
|
Suite Setup Setup Test Environment
|
|
Suite Teardown Cleanup Test Environment
|
|
|
|
*** Variables ***
|
|
${HELPER} ${CURDIR}/helper_plugin_architecture.py
|
|
|
|
*** Test Cases ***
|
|
PluginLoader Loads Valid Class
|
|
[Documentation] Verify PluginLoader can import a class from module:ClassName
|
|
${result}= Run Process ${PYTHON} ${HELPER} load-class cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-load-class-ok
|
|
|
|
PluginLoader Rejects Disallowed Module Prefix
|
|
[Documentation] Verify PluginLoader security prefix allowlist
|
|
${result}= Run Process ${PYTHON} ${HELPER} prefix-security cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-prefix-security-ok
|
|
|
|
PluginLoader Protocol Validation Pass
|
|
[Documentation] Verify protocol validation succeeds for conforming class
|
|
${result}= Run Process ${PYTHON} ${HELPER} protocol-pass cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-protocol-pass-ok
|
|
|
|
PluginLoader Protocol Validation Fail
|
|
[Documentation] Verify protocol validation fails for non-conforming class
|
|
${result}= Run Process ${PYTHON} ${HELPER} protocol-fail cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-protocol-fail-ok
|
|
|
|
PluginManager Lifecycle
|
|
[Documentation] Verify register -> activate -> deactivate lifecycle
|
|
${result}= Run Process ${PYTHON} ${HELPER} lifecycle cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-lifecycle-ok
|
|
|
|
PluginManager Config-Driven Registration
|
|
[Documentation] Verify config-driven plugin registration
|
|
${result}= Run Process ${PYTHON} ${HELPER} config-registration cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-config-registration-ok
|
|
|
|
PluginManager Error Handling
|
|
[Documentation] Verify error transitions and exception types
|
|
${result}= Run Process ${PYTHON} ${HELPER} error-handling cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-error-handling-ok
|
|
|
|
DI Container PluginManager Resolution
|
|
[Documentation] Verify DI container resolves PluginManager singleton
|
|
${result}= Run Process ${PYTHON} ${HELPER} di-resolution cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-di-resolution-ok
|
|
|
|
PluginManager Thread Safety
|
|
[Documentation] Verify concurrent plugin registration is thread-safe
|
|
${result}= Run Process ${PYTHON} ${HELPER} thread-safety cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-thread-safety-ok
|
|
|
|
PluginManager Extension Points
|
|
[Documentation] Verify extension point registration and listing
|
|
${result}= Run Process ${PYTHON} ${HELPER} extension-points cwd=${WORKSPACE}
|
|
Log ${result.stdout}
|
|
Log ${result.stderr}
|
|
Should Be Equal As Integers ${result.rc} 0
|
|
Should Contain ${result.stdout} plugin-extension-points-ok
|