Files
zeekay a532c3cbd9
CodeQL / Analyze (go) (push) Waiting to run
build / build (push) Waiting to run
mattermost-zt-webhook / POST Webhook (push) Waiting to run
mattermost-zt-webhook / POST Webhook (push) Waiting to run
rename: ziti → zt across all paths
- Repo names: ziti-* → zt-*
- Go modules: github.com/hanzozt/ziti → github.com/hanzozt/zt
- Docker images: hanzozt/ziti-* → hanzozt/zt-*
- C/Java/JS symbols: ziti_* → zt_*
- File and directory names updated
2026-02-18 18:34:06 -08:00

191 lines
5.2 KiB
Go

package versions
import (
"testing"
"github.com/stretchr/testify/require"
)
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
func Test_Versions_EncDec(t *testing.T) {
const (
version = "v0.17.4"
revision = "0ec8cd4f0ccd"
buildDate = "2020-11-13 00:47:59"
os = "linux"
arch = "amd64"
)
info := &VersionInfo{
Version: version,
Revision: revision,
BuildDate: buildDate,
OS: os,
Arch: arch,
}
t.Run("can encode values", func(t *testing.T) {
req := require.New(t)
encodedVal, err := StdVersionEncDec.Encode(info)
req.NoError(err)
req.NotEmpty(encodedVal)
t.Run("can decode values", func(t *testing.T) {
req := require.New(t)
outVal, err := StdVersionEncDec.Decode(encodedVal)
req.NoError(err)
req.NotNil(outVal)
t.Run("version output matches input", func(t *testing.T) {
req := require.New(t)
req.Equal(version, outVal.Version)
})
t.Run("revision output matches input", func(t *testing.T) {
req := require.New(t)
req.Equal(revision, outVal.Revision)
})
t.Run("build date output matches input", func(t *testing.T) {
req := require.New(t)
req.Equal(buildDate, outVal.BuildDate)
})
t.Run("os output matches input", func(t *testing.T) {
req := require.New(t)
req.Equal(os, outVal.OS)
})
t.Run("arch output matches input", func(t *testing.T) {
req := require.New(t)
req.Equal(arch, outVal.Arch)
})
})
})
}
func Test_Compare(t *testing.T) {
req := require.New(t)
v1, err := ParseSemVer("v0.18.4")
req.NoError(err)
req.Equal("0.18.4", v1.String())
req.True(v1.Equals(MustParseSemVer("0.18.4")))
v2, err := ParseSemVer("0.18.5")
req.NoError(err)
req.Equal("0.18.5", v2.String())
req.True(v2.Equals(MustParseSemVer("0.18.5")))
v3, err := ParseSemVer("0.18.6")
req.NoError(err)
req.Equal("0.18.6", v3.String())
req.True(v3.Equals(MustParseSemVer("0.18.6")))
v4, err := ParseSemVer("0.19.6")
req.NoError(err)
req.Equal("0.19.6", v4.String())
req.True(v4.Equals(MustParseSemVer("0.19.6")))
v2p0p0, err := ParseSemVer("2.0.0")
req.NoError(err)
req.Equal("2.0.0", v2p0p0.String())
req.True(v2p0p0.Equals(MustParseSemVer("2.0.0")))
v2p0p0pre1, err := ParseSemVer("2.0.0-pre1")
req.NoError(err)
req.Equal("2.0.0-pre1", v2p0p0pre1.String())
req.True(v2p0p0pre1.Equals(MustParseSemVer("2.0.0-pre1")))
v2p0p0pre4, err := ParseSemVer("2.0.0-pre4")
req.NoError(err)
req.Equal("2.0.0-pre4", v2p0p0pre4.String())
req.True(v2p0p0pre4.Equals(MustParseSemVer("2.0.0-pre4")))
v2p0p0pre10, err := ParseSemVer("2.0.0-pre10")
req.NoError(err)
req.Equal("2.0.0-pre10", v2p0p0pre10.String())
req.True(v2p0p0pre10.Equals(MustParseSemVer("2.0.0-pre10")))
req.Equal(1, v2.CompareTo(v1))
req.Equal(0, v2.CompareTo(v2))
req.Equal(-1, v2.CompareTo(v3))
req.Equal(-1, v2.CompareTo(v4))
req.Equal(-1, v2.CompareTo(v2p0p0))
req.True(v2p0p0.CompareTo(v2p0p0pre1) > 0)
req.True(v2p0p0pre1.CompareTo(v2p0p0) < 0)
req.True(v2p0p0pre1.CompareTo(v2p0p0pre4) < 0)
req.True(v2p0p0pre4.CompareTo(v2p0p0pre1) > 0)
req.True(v2p0p0pre1.CompareTo(v2p0p0pre10) < 0)
req.True(v2p0p0pre10.CompareTo(v2p0p0pre1) > 0)
req.True(v2p0p0pre1.CompareTo(v2p0p0pre10) < 0)
req.True(v2p0p0pre10.CompareTo(v2p0p0pre1) > 0)
req.True(v2p0p0pre4.CompareTo(v2p0p0pre10) < 0)
req.True(v2p0p0pre10.CompareTo(v2p0p0pre4) > 0)
versionInfo := &VersionInfo{Version: "v0.14.7"}
req.False(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "v0.18.4"}
req.False(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "v0.18.5"}
req.True(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "v0.19.0"}
req.True(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "v1.0.0"}
req.True(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "0.20"}
req.True(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "20"}
req.True(versionInfo.HasMinimumVersion("0.18.5"))
versionInfo = &VersionInfo{Version: "v0.0.0"}
req.True(versionInfo.HasMinimumVersion("0.18.5"))
// ensure invalid versions are still invalid
_, err = ParseSemVer("2.0.0~alpha1")
req.EqualError(err, `strconv.ParseInt: parsing "0~alpha1": invalid syntax`)
rc, err := ParseSemVer("2.0.0-rc2")
req.NoError(err)
req.Equal("2.0.0-rc2", rc.String())
req.True(rc.Equals(MustParseSemVer("2.0.0-rc2")))
// version reported by zt-ci(git describe --tags) when not on a tagged commit
rc1, err := ParseSemVer("2.0.0-rc2-5-abcdef")
req.NoError(err)
req.Equal("2.0.0-rc2-5-abcdef", rc1.String())
req.True(rc1.Equals(MustParseSemVer("2.0.0-rc2-5-abcdef")))
req.True(rc1.CompareTo(rc) > 0)
}