mirror of
https://github.com/juanfont/headscale.git
synced 2025-07-29 12:33:44 +00:00
144 lines
3.5 KiB
Go
144 lines
3.5 KiB
Go
package integration
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/juanfont/headscale/integration/hsic"
|
|
"github.com/juanfont/headscale/integration/tsic"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestVersionCommand(t *testing.T) {
|
|
IntegrationSkip(t)
|
|
|
|
spec := ScenarioSpec{
|
|
Users: []string{"version-user"},
|
|
}
|
|
|
|
scenario, err := NewScenario(spec)
|
|
assertNoErr(t, err)
|
|
defer scenario.ShutdownAssertNoPanics(t)
|
|
|
|
err = scenario.CreateHeadscaleEnv([]tsic.Option{}, hsic.WithTestName("cliversion"))
|
|
assertNoErr(t, err)
|
|
|
|
headscale, err := scenario.Headscale()
|
|
assertNoErr(t, err)
|
|
|
|
t.Run("test_version_basic", func(t *testing.T) {
|
|
// Test basic version output
|
|
result, err := headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
},
|
|
)
|
|
assertNoErr(t, err)
|
|
|
|
// Version output should contain version information
|
|
assert.NotEmpty(t, result, "version output should not be empty")
|
|
// In development, version is "dev", in releases it would be semver like "1.0.0"
|
|
trimmed := strings.TrimSpace(result)
|
|
assert.True(t, trimmed == "dev" || len(trimmed) > 2, "version should be 'dev' or valid version string")
|
|
})
|
|
|
|
t.Run("test_version_help", func(t *testing.T) {
|
|
// Test version command help
|
|
result, err := headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
"--help",
|
|
},
|
|
)
|
|
assertNoErr(t, err)
|
|
|
|
// Help text should contain expected information
|
|
assert.Contains(t, result, "version", "help should mention version command")
|
|
assert.Contains(t, result, "version of headscale", "help should contain command description")
|
|
})
|
|
|
|
t.Run("test_version_with_extra_args", func(t *testing.T) {
|
|
// Test version command with unexpected extra arguments
|
|
result, err := headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
"extra",
|
|
"args",
|
|
},
|
|
)
|
|
// Should either ignore extra args or handle gracefully
|
|
// The exact behavior depends on implementation, but shouldn't crash
|
|
assert.NotPanics(t, func() {
|
|
headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
"extra",
|
|
"args",
|
|
},
|
|
)
|
|
}, "version command should handle extra arguments gracefully")
|
|
|
|
// If it succeeds, should still contain version info
|
|
if err == nil {
|
|
assert.NotEmpty(t, result, "version output should not be empty")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestVersionCommandEdgeCases(t *testing.T) {
|
|
IntegrationSkip(t)
|
|
|
|
spec := ScenarioSpec{
|
|
Users: []string{"version-edge-user"},
|
|
}
|
|
|
|
scenario, err := NewScenario(spec)
|
|
assertNoErr(t, err)
|
|
defer scenario.ShutdownAssertNoPanics(t)
|
|
|
|
err = scenario.CreateHeadscaleEnv([]tsic.Option{}, hsic.WithTestName("cliversionedge"))
|
|
assertNoErr(t, err)
|
|
|
|
headscale, err := scenario.Headscale()
|
|
assertNoErr(t, err)
|
|
|
|
t.Run("test_version_multiple_calls", func(t *testing.T) {
|
|
// Test that version command can be called multiple times
|
|
for i := 0; i < 3; i++ {
|
|
result, err := headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
},
|
|
)
|
|
assertNoErr(t, err)
|
|
assert.NotEmpty(t, result, "version output should not be empty")
|
|
}
|
|
})
|
|
|
|
t.Run("test_version_with_invalid_flag", func(t *testing.T) {
|
|
// Test version command with invalid flag
|
|
_, _ = headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
"--invalid-flag",
|
|
},
|
|
)
|
|
// Should handle invalid flag gracefully (either succeed ignoring flag or fail with error)
|
|
assert.NotPanics(t, func() {
|
|
headscale.Execute(
|
|
[]string{
|
|
"headscale",
|
|
"version",
|
|
"--invalid-flag",
|
|
},
|
|
)
|
|
}, "version command should handle invalid flags gracefully")
|
|
})
|
|
}
|