go-firewalld/caps_test.go
2026-07-02 14:08:37 -05:00

61 lines
1.8 KiB
Go

package firewalld
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseVersion(t *testing.T) {
cases := []struct {
raw string
maj, min, patch int
}{
{"0.6.3", 0, 6, 3},
{"1.3.4", 1, 3, 4},
{"2.4.3", 2, 4, 3},
{"1", 1, 0, 0},
{"0.9", 0, 9, 0},
{"1.2.3-4.el9", 1, 2, 3},
{"", 0, 0, 0},
{"garbage", 0, 0, 0},
}
for _, tc := range cases {
v := parseVersion(tc.raw)
assert.Equal(t, tc.maj, v.Major, "major of %q", tc.raw)
assert.Equal(t, tc.min, v.Minor, "minor of %q", tc.raw)
assert.Equal(t, tc.patch, v.Patch, "patch of %q", tc.raw)
}
}
func TestVersionAtLeast(t *testing.T) {
assert.True(t, parseVersion("1.3.4").atLeast(0, 9))
assert.True(t, parseVersion("0.9.0").atLeast(0, 9))
assert.False(t, parseVersion("0.6.3").atLeast(0, 9))
assert.True(t, parseVersion("1.0.0").atLeast(1, 0))
assert.False(t, parseVersion("0.9.9").atLeast(1, 0))
assert.True(t, parseVersion("2.0.0").atLeast(1, 5))
}
// TestCapsByVersion locks the capability gates to the three real server versions:
// EL7 0.6.3 (no dict, no policies), EL9 1.3.4 and local 2.4.3 (full).
func TestCapsByVersion(t *testing.T) {
el7 := capsFor(parseVersion("0.6.3"))
assert.False(t, el7[DictZoneSettings])
assert.False(t, el7[Policies])
assert.False(t, el7[ServiceSettings2])
assert.False(t, el7[ResetToDefaults])
el9 := capsFor(parseVersion("1.3.4"))
assert.True(t, el9[DictZoneSettings])
assert.True(t, el9[Policies])
assert.True(t, el9[ServiceSettings2])
assert.True(t, el9[ResetToDefaults])
assert.True(t, el9[AddZone2])
// The 0.9 boundary: dict + policies land, the 1.x-only flags do not.
el09 := capsFor(parseVersion("0.9.0"))
assert.True(t, el09[DictZoneSettings])
assert.True(t, el09[Policies])
assert.False(t, el09[ServiceSettings2])
}