The basic idea here is to replace the release name in the ClusterInfo object with the fine grained version information queried at runtime. This patch also removes the Name field from the cluster spec, which was also runtime determined and was redundant with ClusterInfo relase name. Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
143 lines
4.6 KiB
Go
143 lines
4.6 KiB
Go
package version
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestToString(t *testing.T) {
|
|
assert.Equal(t, "14.0.0 nautilus", fmt.Sprintf("%s", &Nautilus))
|
|
assert.Equal(t, "13.0.0 mimic", fmt.Sprintf("%s", &Mimic))
|
|
assert.Equal(t, "12.0.0 luminous", fmt.Sprintf("%s", &Luminous))
|
|
|
|
expected := fmt.Sprintf("-1.0.0 %s", unknownVersionString)
|
|
assert.Equal(t, expected, fmt.Sprintf("%s", &CephVersion{-1, 0, 0}))
|
|
}
|
|
|
|
func TestReleaseName(t *testing.T) {
|
|
assert.Equal(t, "nautilus", Nautilus.ReleaseName())
|
|
assert.Equal(t, "mimic", Mimic.ReleaseName())
|
|
assert.Equal(t, "luminous", Luminous.ReleaseName())
|
|
ver := CephVersion{-1, 0, 0}
|
|
assert.Equal(t, unknownVersionString, ver.ReleaseName())
|
|
}
|
|
|
|
func extractVersionHelper(t *testing.T, text string, major, minor, extra int) {
|
|
v, err := ExtractCephVersion(text)
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, *v, CephVersion{major, minor, extra})
|
|
}
|
|
}
|
|
|
|
func TestExtractVersion(t *testing.T) {
|
|
// release build
|
|
v0c := "ceph version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)"
|
|
v0d := `
|
|
root@7a97f5a78bc6:/# ceph --version
|
|
ceph version 12.2.8 (ae699615bac534ea496ee965ac6192cb7e0e07c0) luminous (stable)
|
|
`
|
|
extractVersionHelper(t, v0c, 12, 2, 8)
|
|
extractVersionHelper(t, v0d, 12, 2, 8)
|
|
|
|
// development build
|
|
v1c := "ceph version 14.1.33-403-g7ba6bece41"
|
|
v1d := `
|
|
bin/ceph --version
|
|
*** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
|
|
ceph version 14.1.33-403-g7ba6bece41
|
|
(7ba6bece4187eda5d05a9b84211fe6ba8dd287bd) nautilus (rc)
|
|
`
|
|
extractVersionHelper(t, v1c, 14, 1, 33)
|
|
extractVersionHelper(t, v1d, 14, 1, 33)
|
|
|
|
// build without git version info. it is possible to build the ceph tree
|
|
// without a version number, but none of the container builds do this.
|
|
// it is arguable that this should be a requirement since we are
|
|
// explicitly adding fine-grained versioning to avoid issues with
|
|
// release granularity. adding the reverse name-to-version is easy
|
|
// enough if this ever becomes a need.
|
|
v2c := "ceph version Development (no_version) nautilus (rc)"
|
|
v2d := `
|
|
bin/ceph --version
|
|
*** DEVELOPER MODE: setting PATH, PYTHONPATH and LD_LIBRARY_PATH ***
|
|
ceph version Development (no_version) nautilus (rc)
|
|
`
|
|
v, err := ExtractCephVersion(v2c)
|
|
assert.Error(t, err)
|
|
assert.Nil(t, v)
|
|
|
|
v, err = ExtractCephVersion(v2d)
|
|
assert.Error(t, err)
|
|
assert.Nil(t, v)
|
|
}
|
|
|
|
func TestSupported(t *testing.T) {
|
|
for _, v := range supportedVersions {
|
|
assert.True(t, v.Supported())
|
|
}
|
|
for _, v := range unsupportedVersions {
|
|
assert.False(t, v.Supported())
|
|
}
|
|
}
|
|
|
|
func TestIsRelease(t *testing.T) {
|
|
assert.True(t, Luminous.isRelease(Luminous))
|
|
assert.True(t, Mimic.isRelease(Mimic))
|
|
assert.True(t, Nautilus.isRelease(Nautilus))
|
|
|
|
assert.False(t, Luminous.isRelease(Mimic))
|
|
assert.False(t, Luminous.isRelease(Nautilus))
|
|
assert.False(t, Mimic.isRelease(Nautilus))
|
|
|
|
LuminousUpdate := Luminous
|
|
LuminousUpdate.Minor = 33
|
|
LuminousUpdate.Extra = 4
|
|
assert.True(t, LuminousUpdate.isRelease(Luminous))
|
|
|
|
MimicUpdate := Mimic
|
|
MimicUpdate.Minor = 33
|
|
MimicUpdate.Extra = 4
|
|
assert.True(t, MimicUpdate.isRelease(Mimic))
|
|
|
|
NautilusUpdate := Nautilus
|
|
NautilusUpdate.Minor = 33
|
|
NautilusUpdate.Extra = 4
|
|
assert.True(t, NautilusUpdate.isRelease(Nautilus))
|
|
}
|
|
|
|
func TestIsReleaseX(t *testing.T) {
|
|
assert.True(t, Luminous.IsLuminous())
|
|
assert.False(t, Mimic.IsLuminous())
|
|
assert.False(t, Nautilus.IsLuminous())
|
|
}
|
|
|
|
func TestVersionAtLeast(t *testing.T) {
|
|
assert.True(t, Luminous.IsAtLeast(Luminous))
|
|
assert.False(t, Luminous.IsAtLeast(Mimic))
|
|
assert.False(t, Luminous.IsAtLeast(Nautilus))
|
|
assert.True(t, Mimic.IsAtLeast(Luminous))
|
|
assert.True(t, Mimic.IsAtLeast(Mimic))
|
|
assert.False(t, Mimic.IsAtLeast(Nautilus))
|
|
assert.True(t, Nautilus.IsAtLeast(Luminous))
|
|
assert.True(t, Nautilus.IsAtLeast(Mimic))
|
|
assert.True(t, Nautilus.IsAtLeast(Nautilus))
|
|
|
|
assert.True(t, (&CephVersion{1, 0, 0}).IsAtLeast(CephVersion{0, 0, 0}))
|
|
assert.False(t, (&CephVersion{0, 0, 0}).IsAtLeast(CephVersion{1, 0, 0}))
|
|
assert.True(t, (&CephVersion{1, 1, 0}).IsAtLeast(CephVersion{1, 0, 0}))
|
|
assert.False(t, (&CephVersion{1, 0, 0}).IsAtLeast(CephVersion{1, 1, 0}))
|
|
assert.True(t, (&CephVersion{1, 1, 1}).IsAtLeast(CephVersion{1, 1, 0}))
|
|
assert.False(t, (&CephVersion{1, 1, 0}).IsAtLeast(CephVersion{1, 1, 1}))
|
|
assert.True(t, (&CephVersion{1, 1, 1}).IsAtLeast(CephVersion{1, 1, 1}))
|
|
}
|
|
|
|
func TestVersionAtLeastX(t *testing.T) {
|
|
assert.True(t, Nautilus.IsAtLeastNautilus())
|
|
assert.True(t, Nautilus.IsAtLeastMimic())
|
|
assert.True(t, Mimic.IsAtLeastMimic())
|
|
assert.False(t, Luminous.IsAtLeastMimic())
|
|
assert.False(t, Luminous.IsAtLeastNautilus())
|
|
assert.False(t, Mimic.IsAtLeastNautilus())
|
|
}
|