Files
Sankofa/crossplane-provider-proxmox/docs/TESTING.md
defiQUG 7cd7022f6e Update .gitignore, remove package-lock.json, and enhance Cloudflare and Proxmox adapters
- Added lock file exclusions for pnpm in .gitignore.
- Removed obsolete package-lock.json from the api and portal directories.
- Enhanced Cloudflare adapter with additional interfaces for zones and tunnels.
- Improved Proxmox adapter error handling and logging for API requests.
- Updated Proxmox VM parameters with validation rules in the API schema.
- Enhanced documentation for Proxmox VM specifications and examples.
2025-12-12 19:29:01 -08:00

228 lines
4.9 KiB
Markdown

# Testing Guide - Proxmox Provider
This document provides guidance for testing the Crossplane Proxmox provider.
## Unit Tests
### Running Unit Tests
```bash
# Run all unit tests
go test ./pkg/...
# Run tests for specific package
go test ./pkg/utils/...
go test ./pkg/proxmox/...
go test ./pkg/controller/virtualmachine/...
# Run with coverage
go test -cover ./pkg/...
# Generate coverage report
go test -coverprofile=coverage.out ./pkg/...
go tool cover -html=coverage.out
```
### Test Files
- `pkg/utils/parsing_test.go` - Parsing utility tests
- `pkg/utils/validation_test.go` - Validation function tests
- `pkg/proxmox/networks_test.go` - Network API tests
- `pkg/proxmox/client_tenant_test.go` - Tenant tag format tests
- `pkg/controller/virtualmachine/errors_test.go` - Error categorization tests
## Integration Tests
Integration tests require a Proxmox test environment.
### Prerequisites
1. Proxmox VE cluster with API access
2. Valid API credentials
3. Test node with available resources
4. Test storage pools
5. Network bridges configured
### Running Integration Tests
```bash
# Run integration tests
go test -tags=integration ./pkg/controller/virtualmachine/...
# Skip integration tests (run unit tests only)
go test -short ./pkg/...
```
### Integration Test Scenarios
1. **VM Creation with Template Cloning**
- Requires: Template VM (VMID 100-999999999)
- Tests: Template clone functionality
2. **VM Creation with Cloud Image Import**
- Requires: Cloud image in storage, importdisk API support
- Tests: Image import functionality
3. **VM Creation with Pre-imported Images**
- Requires: Pre-imported image in storage
- Tests: Image reference functionality
4. **Multi-Site Deployment**
- Requires: Multiple Proxmox sites configured
- Tests: Site selection and validation
5. **Network Bridge Validation**
- Requires: Network bridges on test nodes
- Tests: Network existence validation
6. **Error Recovery**
- Tests: Retry logic and error handling
7. **Cloud-init Configuration**
- Requires: Cloud-init support
- Tests: UserData writing and configuration
## Manual Testing
### Prerequisites
- Kubernetes cluster with Crossplane installed
- Proxmox provider deployed
- ProviderConfig configured
- Valid credentials
### Test Scenarios
#### 1. Tenant Tags
```bash
# Create VM with tenant ID
kubectl apply -f - <<EOF
apiVersion: proxmox.sankofa.nexus/v1alpha1
kind: ProxmoxVM
metadata:
name: test-vm-tenant
labels:
tenant-id: "test-tenant-123"
spec:
forProvider:
node: "test-node"
name: "test-vm"
cpu: 2
memory: "4Gi"
disk: "50Gi"
storage: "local-lvm"
network: "vmbr0"
image: "100"
site: "test-site"
providerConfigRef:
name: proxmox-provider-config
EOF
# Verify tenant tag in Proxmox
# Should see tag: tenant_test-tenant-123
```
#### 2. API Adapter Authentication
Test the TypeScript API adapter authentication:
```bash
# Verify authentication header format
# Should use: Authorization: PVEAPIToken ${token}
# NOT: Authorization: PVEAPIToken=${token}
```
#### 3. Proxmox Version Testing
Test on different Proxmox versions:
- PVE 6.x
- PVE 7.x
- PVE 8.x
Verify importdisk API detection works correctly.
#### 4. Node Configuration Testing
- Test with multiple nodes
- Test node health checks
- Test node parameterization in compositions
#### 5. Error Scenarios
Test various error conditions:
- Node unavailable
- Storage full
- Network bridge missing
- Invalid credentials
- Quota exceeded
## Test Data Setup
### Creating Test Templates
1. Create a VM in Proxmox
2. Install OS and configure
3. Convert to template
4. Note the VMID
### Creating Test Images
1. Download cloud image (e.g., Ubuntu cloud image)
2. Upload to Proxmox storage
3. Note the storage and path
### Network Bridges
Ensure test nodes have:
- `vmbr0` (default bridge)
- Additional bridges for testing
## Troubleshooting Tests
### Common Issues
1. **Authentication Failures**
- Verify credentials in ProviderConfig
- Check API token format
- Verify Proxmox API access
2. **Network Connectivity**
- Verify network bridges exist
- Check node connectivity
- Verify firewall rules
3. **Storage Issues**
- Verify storage pools exist
- Check available space
- Verify storage permissions
4. **Test Environment**
- Verify test namespace exists
- Check RBAC permissions
- Verify CRDs are installed
## Continuous Integration
Tests should be run in CI/CD pipeline:
```yaml
# Example CI configuration
test:
unit:
- go test -v -short ./pkg/...
integration:
- go test -v -tags=integration ./pkg/controller/virtualmachine/...
coverage:
- go test -coverprofile=coverage.out ./pkg/...
```
## Best Practices
1. **Isolation**: Use separate test namespaces
2. **Cleanup**: Always clean up test resources
3. **Idempotency**: Tests should be repeatable
4. **Mocking**: Use mocks for external dependencies
5. **Coverage**: Aim for >80% code coverage