talos/pkg/machinery/compatibility/talos_version_test.go
Andrey Smirnov d9bdea2b54
chore: fork docs and compatibility modules for Talos 1.5
Getting ready for the next Talos 1.5.0-alpha.0 release.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2023-04-27 15:36:31 +04:00

182 lines
3.6 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package compatibility_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/siderolabs/talos/pkg/machinery/api/machine"
"github.com/siderolabs/talos/pkg/machinery/compatibility"
)
type talosVersionTest struct {
host string
target string
expectedError string
}
func runTalosVersionTest(t *testing.T, tt talosVersionTest) {
t.Run(tt.host+" -> "+tt.target, func(t *testing.T) {
host, err := compatibility.ParseTalosVersion(&machine.VersionInfo{
Tag: tt.host,
})
require.NoError(t, err)
target, err := compatibility.ParseTalosVersion(&machine.VersionInfo{
Tag: tt.target,
})
require.NoError(t, err)
err = target.UpgradeableFrom(host)
if tt.expectedError != "" {
require.EqualError(t, err, tt.expectedError)
} else {
require.NoError(t, err)
}
})
}
func TestTalosUpgradeCompatibility13(t *testing.T) {
for _, tt := range []talosVersionTest{
{
host: "1.2.0",
target: "1.3.0",
},
{
host: "1.0.0-alpha.0",
target: "1.3.0",
},
{
host: "1.2.0-alpha.0",
target: "1.3.0-alpha.0",
},
{
host: "1.3.0",
target: "1.3.1",
},
{
host: "1.3.0-beta.0",
target: "1.3.0",
},
{
host: "1.4.5",
target: "1.3.3",
},
{
host: "0.14.3",
target: "1.3.0",
expectedError: `host version 0.14.3 is too old to upgrade to Talos 1.3.0`,
},
{
host: "1.5.0-alpha.0",
target: "1.3.0",
expectedError: `host version 1.5.0-alpha.0 is too new to downgrade to Talos 1.3.0`,
},
} {
runTalosVersionTest(t, tt)
}
}
func TestTalosUpgradeCompatibility14(t *testing.T) {
for _, tt := range []talosVersionTest{
{
host: "1.3.0",
target: "1.4.0",
},
{
host: "1.0.0-alpha.0",
target: "1.4.0",
},
{
host: "1.2.0-alpha.0",
target: "1.4.0-alpha.0",
},
{
host: "1.4.0",
target: "1.4.1",
},
{
host: "1.4.0-beta.0",
target: "1.4.0",
},
{
host: "1.5.5",
target: "1.4.3",
},
{
host: "0.14.3",
target: "1.4.0",
expectedError: `host version 0.14.3 is too old to upgrade to Talos 1.4.0`,
},
{
host: "1.6.0-alpha.0",
target: "1.4.0",
expectedError: `host version 1.6.0-alpha.0 is too new to downgrade to Talos 1.4.0`,
},
} {
runTalosVersionTest(t, tt)
}
}
func TestTalosUpgradeCompatibility15(t *testing.T) {
for _, tt := range []talosVersionTest{
{
host: "1.3.0",
target: "1.5.0",
},
{
host: "1.2.0-alpha.0",
target: "1.5.0",
},
{
host: "1.2.0",
target: "1.5.0-alpha.0",
},
{
host: "1.5.0",
target: "1.5.1",
},
{
host: "1.5.0-beta.0",
target: "1.5.0",
},
{
host: "1.6.5",
target: "1.5.3",
},
{
host: "1.1.0",
target: "1.5.0",
expectedError: `host version 1.1.0 is too old to upgrade to Talos 1.5.0`,
},
{
host: "1.7.0-alpha.0",
target: "1.5.0",
expectedError: `host version 1.7.0-alpha.0 is too new to downgrade to Talos 1.5.0`,
},
} {
runTalosVersionTest(t, tt)
}
}
func TestTalosUpgradeCompatibilityUnsupported(t *testing.T) {
for _, tt := range []talosVersionTest{
{
host: "1.3.0",
target: "1.7.0-alpha.0",
expectedError: `upgrades to version 1.7.0-alpha.0 are not supported`,
},
{
host: "1.4.0",
target: "1.6.0-alpha.0",
expectedError: `upgrades to version 1.6.0-alpha.0 are not supported`,
},
} {
runTalosVersionTest(t, tt)
}
}