92 lines
2.2 KiB
Markdown
92 lines
2.2 KiB
Markdown
# Helmfile Test Utilities
|
|
|
|
This package provides testing utilities for the Helmfile project, making it easier to write unit tests for Helm-related functionality.
|
|
|
|
## Overview
|
|
|
|
The `testutil` package contains:
|
|
|
|
1. Mock implementations for Helm execution
|
|
2. Utility functions for testing
|
|
|
|
## Components
|
|
|
|
### Mock Helm Executors
|
|
|
|
The package provides mock implementations of Helm executors that can be used in tests:
|
|
|
|
- `V3HelmExec`: A mock that can be configured to simulate Helm 3 behavior
|
|
- `VersionHelmExec`: A mock that can be configured with a specific Helm version
|
|
|
|
```go
|
|
// Create a mock for Helm 3
|
|
helmExec := testutil.NewV3HelmExec(true)
|
|
|
|
// Create a mock for a specific Helm version
|
|
versionExec := testutil.NewVersionHelmExec("3.8.0")
|
|
```
|
|
|
|
These mocks implement the Helm executor interface but will panic if any unexpected methods are called, making them useful for strict testing scenarios.
|
|
|
|
### Utility Functions
|
|
|
|
#### CaptureStdout
|
|
|
|
Captures stdout output during the execution of a function:
|
|
|
|
```go
|
|
output, err := testutil.CaptureStdout(func() {
|
|
fmt.Println("Hello, world!")
|
|
})
|
|
// output will contain "Hello, world!\n"
|
|
```
|
|
|
|
This is useful for testing functions that write to stdout.
|
|
|
|
## Usage Examples
|
|
|
|
### Testing with V3HelmExec
|
|
|
|
```go
|
|
func TestMyFunction(t *testing.T) {
|
|
// Create a mock Helm executor configured as Helm 3
|
|
helmExec := testutil.NewV3HelmExec(true)
|
|
|
|
// Use in your test
|
|
result := myFunctionThatChecksHelmVersion(helmExec)
|
|
|
|
// Assert that the result is as expected for Helm 3
|
|
assert.True(t, result)
|
|
}
|
|
```
|
|
|
|
### Testing with VersionHelmExec
|
|
|
|
```go
|
|
func TestVersionCompatibility(t *testing.T) {
|
|
// Create a mock with specific version
|
|
helmExec := testutil.NewVersionHelmExec("3.7.1")
|
|
|
|
// Test version comparison
|
|
assert.True(t, helmExec.IsVersionAtLeast("3.7.0"))
|
|
assert.False(t, helmExec.IsVersionAtLeast("3.8.0"))
|
|
}
|
|
```
|
|
|
|
### Capturing Output
|
|
|
|
```go
|
|
func TestOutputFunction(t *testing.T) {
|
|
output, err := testutil.CaptureStdout(func() {
|
|
MyFunctionThatPrintsOutput()
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, output, "Expected output")
|
|
}
|
|
```
|
|
|
|
## Contributing
|
|
|
|
When adding new test utilities, please ensure they are well-documented and include appropriate tests.
|