mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-15 01:18:26 +08:00
214 lines
6.3 KiB
Markdown
214 lines
6.3 KiB
Markdown
|
|
# Sandbox Provider Tests
|
||
|
|
|
||
|
|
This directory contains tests for the RAGFlow sandbox provider system.
|
||
|
|
|
||
|
|
## Test Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
tests/
|
||
|
|
├── pytest.ini # Pytest configuration
|
||
|
|
├── test_providers.py # Unit tests for all providers (mocked)
|
||
|
|
├── test_aliyun_provider.py # Unit tests for Aliyun provider (mocked)
|
||
|
|
├── test_aliyun_integration.py # Integration tests for Aliyun (real API)
|
||
|
|
└── sandbox_security_tests_full.py # Security tests for self-managed provider
|
||
|
|
```
|
||
|
|
|
||
|
|
## Test Types
|
||
|
|
|
||
|
|
### 1. Unit Tests (No Credentials Required)
|
||
|
|
|
||
|
|
Unit tests use mocks and don't require any external services or credentials.
|
||
|
|
|
||
|
|
**Files:**
|
||
|
|
- `test_providers.py` - Tests for base provider interface and manager
|
||
|
|
- `test_aliyun_provider.py` - Tests for Aliyun provider with mocked API calls
|
||
|
|
|
||
|
|
**Run unit tests:**
|
||
|
|
```bash
|
||
|
|
# Run all unit tests
|
||
|
|
pytest agent/sandbox/tests/test_providers.py -v
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_provider.py -v
|
||
|
|
|
||
|
|
# Run specific test
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_provider.py::TestAliyunOpenSandboxProvider::test_initialize_success -v
|
||
|
|
|
||
|
|
# Run all unit tests (skip integration)
|
||
|
|
pytest agent/sandbox/tests/ -v -m "not integration"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Integration Tests (Real Credentials Required)
|
||
|
|
|
||
|
|
Integration tests make real API calls to Aliyun OpenSandbox service.
|
||
|
|
|
||
|
|
**Files:**
|
||
|
|
- `test_aliyun_integration.py` - Tests with real Aliyun API calls
|
||
|
|
|
||
|
|
**Setup environment variables:**
|
||
|
|
```bash
|
||
|
|
export ALIYUN_ACCESS_KEY_ID="LTAI5t..."
|
||
|
|
export ALIYUN_ACCESS_KEY_SECRET="..."
|
||
|
|
export ALIYUN_REGION="cn-hangzhou" # Optional, defaults to cn-hangzhou
|
||
|
|
export ALIYUN_WORKSPACE_ID="ws-..." # Optional
|
||
|
|
```
|
||
|
|
|
||
|
|
**Run integration tests:**
|
||
|
|
```bash
|
||
|
|
# Run only integration tests
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py -v -m integration
|
||
|
|
|
||
|
|
# Run all tests including integration
|
||
|
|
pytest agent/sandbox/tests/ -v
|
||
|
|
|
||
|
|
# Run specific integration test
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py::TestAliyunOpenSandboxIntegration::test_health_check -v
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Security Tests
|
||
|
|
|
||
|
|
Security tests validate the security features of the self-managed sandbox provider.
|
||
|
|
|
||
|
|
**Files:**
|
||
|
|
- `sandbox_security_tests_full.py` - Comprehensive security tests
|
||
|
|
|
||
|
|
**Run security tests:**
|
||
|
|
```bash
|
||
|
|
# Run all security tests
|
||
|
|
pytest agent/sandbox/tests/sandbox_security_tests_full.py -v
|
||
|
|
|
||
|
|
# Run specific security test
|
||
|
|
pytest agent/sandbox/tests/sandbox_security_tests_full.py -k "test_dangerous_imports" -v
|
||
|
|
```
|
||
|
|
|
||
|
|
## Test Commands
|
||
|
|
|
||
|
|
### Quick Test Commands
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run all sandbox tests (unit only, fast)
|
||
|
|
pytest agent/sandbox/tests/ -v -m "not integration" --tb=short
|
||
|
|
|
||
|
|
# Run tests with coverage
|
||
|
|
pytest agent/sandbox/tests/ -v --cov=agent.sandbox --cov-report=term-missing -m "not integration"
|
||
|
|
|
||
|
|
# Run tests and stop on first failure
|
||
|
|
pytest agent/sandbox/tests/ -v -x -m "not integration"
|
||
|
|
|
||
|
|
# Run tests in parallel (requires pytest-xdist)
|
||
|
|
pytest agent/sandbox/tests/ -v -n auto -m "not integration"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Aliyun Provider Testing
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Run unit tests (no credentials needed)
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_provider.py -v
|
||
|
|
|
||
|
|
# 2. Set up credentials for integration tests
|
||
|
|
export ALIYUN_ACCESS_KEY_ID="your-key-id"
|
||
|
|
export ALIYUN_ACCESS_KEY_SECRET="your-secret"
|
||
|
|
export ALIYUN_REGION="cn-hangzhou"
|
||
|
|
|
||
|
|
# 3. Run integration tests (makes real API calls)
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py -v
|
||
|
|
|
||
|
|
# 4. Test specific scenarios
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py::TestAliyunOpenSandboxIntegration::test_execute_python_code -v
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py::TestAliyunRealWorldScenarios -v
|
||
|
|
```
|
||
|
|
|
||
|
|
## Understanding Test Results
|
||
|
|
|
||
|
|
### Unit Test Output
|
||
|
|
|
||
|
|
```
|
||
|
|
agent/sandbox/tests/test_aliyun_provider.py::TestAliyunOpenSandboxProvider::test_initialize_success PASSED
|
||
|
|
agent/sandbox/tests/test_aliyun_provider.py::TestAliyunOpenSandboxProvider::test_create_instance_python PASSED
|
||
|
|
...
|
||
|
|
========================== 48 passed in 2.34s ===========================
|
||
|
|
```
|
||
|
|
|
||
|
|
### Integration Test Output
|
||
|
|
|
||
|
|
```
|
||
|
|
agent/sandbox/tests/test_aliyun_integration.py::TestAliyunOpenSandboxIntegration::test_health_check PASSED
|
||
|
|
agent/sandbox/tests/test_aliyun_integration.py::TestAliyunOpenSandboxIntegration::test_create_python_instance PASSED
|
||
|
|
agent/sandbox/tests/test_aliyun_integration.py::TestAliyunOpenSandboxIntegration::test_execute_python_code PASSED
|
||
|
|
...
|
||
|
|
========================== 10 passed in 15.67s ===========================
|
||
|
|
```
|
||
|
|
|
||
|
|
**Note:** Integration tests will be skipped if credentials are not set:
|
||
|
|
```
|
||
|
|
agent/sandbox/tests/test_aliyun_integration.py::TestAliyunOpenSandboxIntegration::test_health_check SKIPPED
|
||
|
|
...
|
||
|
|
========================== 48 skipped, 10 passed in 0.12s ===========================
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Integration Tests Fail
|
||
|
|
|
||
|
|
1. **Check credentials:**
|
||
|
|
```bash
|
||
|
|
echo $ALIYUN_ACCESS_KEY_ID
|
||
|
|
echo $ALIYUN_ACCESS_KEY_SECRET
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Check network connectivity:**
|
||
|
|
```bash
|
||
|
|
curl -I https://opensandbox.cn-hangzhou.aliyuncs.com
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Verify permissions:**
|
||
|
|
- Make sure your Aliyun account has OpenSandbox service enabled
|
||
|
|
- Check that your AccessKey has the required permissions
|
||
|
|
|
||
|
|
4. **Check region:**
|
||
|
|
- Verify the region is correct for your account
|
||
|
|
- Try different regions: cn-hangzhou, cn-beijing, cn-shanghai, etc.
|
||
|
|
|
||
|
|
### Tests Timeout
|
||
|
|
|
||
|
|
If tests timeout, increase the timeout in the test configuration or run with a longer timeout:
|
||
|
|
```bash
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py -v --timeout=60
|
||
|
|
```
|
||
|
|
|
||
|
|
### Mock Tests Fail
|
||
|
|
|
||
|
|
If unit tests fail, it's likely a code issue, not a credentials issue:
|
||
|
|
1. Check the test error message
|
||
|
|
2. Review the code changes
|
||
|
|
3. Run with verbose output: `pytest -vv`
|
||
|
|
|
||
|
|
## Contributing
|
||
|
|
|
||
|
|
When adding new providers:
|
||
|
|
|
||
|
|
1. **Create unit tests** in `test_{provider}_provider.py` with mocks
|
||
|
|
2. **Create integration tests** in `test_{provider}_integration.py` with real API calls
|
||
|
|
3. **Add markers** to distinguish test types
|
||
|
|
4. **Update this README** with provider-specific testing instructions
|
||
|
|
|
||
|
|
Example:
|
||
|
|
```python
|
||
|
|
@pytest.mark.integration
|
||
|
|
def test_new_provider_real_api():
|
||
|
|
"""Test with real API calls."""
|
||
|
|
# Your test here
|
||
|
|
```
|
||
|
|
|
||
|
|
## Continuous Integration
|
||
|
|
|
||
|
|
In CI/CD pipelines:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# Run unit tests only (fast, no credentials)
|
||
|
|
pytest agent/sandbox/tests/ -v -m "not integration"
|
||
|
|
|
||
|
|
# Run integration tests if credentials available
|
||
|
|
if [ -n "$ALIYUN_ACCESS_KEY_ID" ]; then
|
||
|
|
pytest agent/sandbox/tests/test_aliyun_integration.py -v -m integration
|
||
|
|
fi
|
||
|
|
```
|