Upgrade test target image (#17226)

* upgrade test: add targetimage name as parameter to upgrade function

- the image name of latest version and target version could be
  different. Add the parameter of targetImage to the upgrade
  function

* fix a bug of expected error
This commit is contained in:
cskh 2023-05-08 12:02:31 -04:00 committed by GitHub
parent d447b54ad3
commit b5d2fafd7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 47 additions and 31 deletions

View File

@ -304,7 +304,7 @@ func (c *Cluster) Remove(n Agent) error {
// helpers below. // helpers below.
// //
// This lets us have tests that assert that an upgrade will fail. // This lets us have tests that assert that an upgrade will fail.
func (c *Cluster) StandardUpgrade(t *testing.T, ctx context.Context, targetVersion string) error { func (c *Cluster) StandardUpgrade(t *testing.T, ctx context.Context, targetImage string, targetVersion string) error {
var err error var err error
// We take a snapshot, but note that we currently do nothing with it. // We take a snapshot, but note that we currently do nothing with it.
if c.ACLEnabled { if c.ACLEnabled {
@ -348,6 +348,7 @@ func (c *Cluster) StandardUpgrade(t *testing.T, ctx context.Context, targetVersi
upgradeFn := func(agent Agent, clientFactory func() (*api.Client, error)) error { upgradeFn := func(agent Agent, clientFactory func() (*api.Client, error)) error {
config := agent.GetConfig() config := agent.GetConfig()
config.Image = targetImage
config.Version = targetVersion config.Version = targetVersion
if agent.IsServer() { if agent.IsServer() {

View File

@ -44,6 +44,7 @@ type BuiltCluster struct {
// It returns objects of the accepting cluster, dialing cluster, staticServerSvc, and staticClientSvcSidecar // It returns objects of the accepting cluster, dialing cluster, staticServerSvc, and staticClientSvcSidecar
func BasicPeeringTwoClustersSetup( func BasicPeeringTwoClustersSetup(
t *testing.T, t *testing.T,
consulImage string,
consulVersion string, consulVersion string,
peeringThroughMeshgateway bool, peeringThroughMeshgateway bool,
) (*BuiltCluster, *BuiltCluster) { ) (*BuiltCluster, *BuiltCluster) {
@ -52,6 +53,7 @@ func BasicPeeringTwoClustersSetup(
NumClients: 1, NumClients: 1,
BuildOpts: &libcluster.BuildOptions{ BuildOpts: &libcluster.BuildOptions{
Datacenter: "dc1", Datacenter: "dc1",
ConsulImageName: consulImage,
ConsulVersion: consulVersion, ConsulVersion: consulVersion,
InjectAutoEncryption: true, InjectAutoEncryption: true,
}, },
@ -63,6 +65,7 @@ func BasicPeeringTwoClustersSetup(
NumClients: 1, NumClients: 1,
BuildOpts: &libcluster.BuildOptions{ BuildOpts: &libcluster.BuildOptions{
Datacenter: "dc2", Datacenter: "dc2",
ConsulImageName: consulImage,
ConsulVersion: consulVersion, ConsulVersion: consulVersion,
InjectAutoEncryption: true, InjectAutoEncryption: true,
}, },

View File

@ -47,6 +47,13 @@ func GetTargetImageName() string {
return targetImageName return targetImageName
} }
func GetLatestImageName() string {
if Debug {
return LatestImageName + "-dbg"
}
return LatestImageName
}
func DockerImage(image, version string) string { func DockerImage(image, version string) string {
v := image + ":" + version v := image + ":" + version
if image == DefaultImageNameENT && isSemVer(version) { if image == DefaultImageNameENT && isSemVer(version) {

View File

@ -53,7 +53,7 @@ import (
func TestPeering_RotateServerAndCAThenFail_(t *testing.T) { func TestPeering_RotateServerAndCAThenFail_(t *testing.T) {
t.Parallel() t.Parallel()
accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.TargetVersion, false) accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.GetTargetImageName(), utils.TargetVersion, false)
var ( var (
acceptingCluster = accepting.Cluster acceptingCluster = accepting.Cluster
dialingCluster = dialing.Cluster dialingCluster = dialing.Cluster

View File

@ -27,6 +27,7 @@ func TestACL_NodeToken(t *testing.T) {
NumClients: 1, NumClients: 1,
BuildOpts: &libcluster.BuildOptions{ BuildOpts: &libcluster.BuildOptions{
Datacenter: "dc1", Datacenter: "dc1",
ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: utils.LatestVersion, ConsulVersion: utils.LatestVersion,
InjectAutoEncryption: false, InjectAutoEncryption: false,
ACLEnabled: true, ACLEnabled: true,
@ -38,7 +39,7 @@ func TestACL_NodeToken(t *testing.T) {
cluster.Agents[1].GetAgentName()) cluster.Agents[1].GetAgentName())
require.NoError(t, err) require.NoError(t, err)
err = cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion) err = cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion)
require.NoError(t, err) require.NoError(t, err)
// Post upgrade validation: agent token can be used to query the node // Post upgrade validation: agent token can be used to query the node

View File

@ -22,8 +22,8 @@ func TestBasic(t *testing.T) {
t.Parallel() t.Parallel()
configCtx := libcluster.NewBuildContext(t, libcluster.BuildOptions{ configCtx := libcluster.NewBuildContext(t, libcluster.BuildOptions{
ConsulImageName: utils.GetTargetImageName(), ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: utils.TargetVersion, ConsulVersion: utils.LatestVersion,
}) })
const numServers = 1 const numServers = 1
@ -32,7 +32,7 @@ func TestBasic(t *testing.T) {
Bootstrap(numServers). Bootstrap(numServers).
ToAgentConfig(t) ToAgentConfig(t)
t.Logf("Cluster config:\n%s", serverConf.JSON) t.Logf("Cluster config:\n%s", serverConf.JSON)
require.Equal(t, utils.TargetVersion, serverConf.Version) // TODO: remove require.Equal(t, utils.LatestVersion, serverConf.Version) // TODO: remove
cluster, err := libcluster.NewN(t, *serverConf, numServers) cluster, err := libcluster.NewN(t, *serverConf, numServers)
require.NoError(t, err) require.NoError(t, err)
@ -53,7 +53,7 @@ func TestBasic(t *testing.T) {
// upgrade the cluster to the Target version // upgrade the cluster to the Target version
t.Logf("initiating standard upgrade to version=%q", utils.TargetVersion) t.Logf("initiating standard upgrade to version=%q", utils.TargetVersion)
err = cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion) err = cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion)
require.NoError(t, err) require.NoError(t, err)
libcluster.WaitForLeader(t, cluster, client) libcluster.WaitForLeader(t, cluster, client)

View File

@ -51,7 +51,7 @@ func TestStandardUpgradeToTarget_fromLatest(t *testing.T) {
run := func(t *testing.T, tc testcase) { run := func(t *testing.T, tc testcase) {
configCtx := libcluster.NewBuildContext(t, libcluster.BuildOptions{ configCtx := libcluster.NewBuildContext(t, libcluster.BuildOptions{
ConsulImageName: utils.GetTargetImageName(), ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: tc.oldVersion, ConsulVersion: tc.oldVersion,
}) })
@ -107,7 +107,7 @@ func TestStandardUpgradeToTarget_fromLatest(t *testing.T) {
// upgrade the cluster to the Target version // upgrade the cluster to the Target version
t.Logf("initiating standard upgrade to version=%q", tc.targetVersion) t.Logf("initiating standard upgrade to version=%q", tc.targetVersion)
err = cluster.StandardUpgrade(t, context.Background(), tc.targetVersion) err = cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), tc.targetVersion)
if !tc.expectErr { if !tc.expectErr {
require.NoError(t, err) require.NoError(t, err)
@ -122,7 +122,7 @@ func TestStandardUpgradeToTarget_fromLatest(t *testing.T) {
require.Equal(r, serviceName, service[0].ServiceName) require.Equal(r, serviceName, service[0].ServiceName)
}) })
} else { } else {
require.Error(t, fmt.Errorf("context deadline exceeded")) require.ErrorContains(t, err, "context deadline exceeded")
} }
} }

View File

@ -26,6 +26,7 @@ func TestIngressGateway_GRPC_UpgradeToTarget_fromLatest(t *testing.T) {
NumClients: 1, NumClients: 1,
BuildOpts: &libcluster.BuildOptions{ BuildOpts: &libcluster.BuildOptions{
Datacenter: "dc1", Datacenter: "dc1",
ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: utils.LatestVersion, ConsulVersion: utils.LatestVersion,
}, },
ApplyDefaultProxySettings: true, ApplyDefaultProxySettings: true,
@ -117,7 +118,7 @@ func TestIngressGateway_GRPC_UpgradeToTarget_fromLatest(t *testing.T) {
} }
t.Logf("Upgrade to version %s", utils.TargetVersion) t.Logf("Upgrade to version %s", utils.TargetVersion)
err = cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion) err = cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion)
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, igw.Restart()) require.NoError(t, igw.Restart())

View File

@ -42,6 +42,7 @@ func TestIngressGateway_SDS_UpgradeToTarget_fromLatest(t *testing.T) {
NumClients: 2, NumClients: 2,
BuildOpts: &libcluster.BuildOptions{ BuildOpts: &libcluster.BuildOptions{
Datacenter: "dc1", Datacenter: "dc1",
ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: utils.LatestVersion, ConsulVersion: utils.LatestVersion,
}, },
ApplyDefaultProxySettings: true, ApplyDefaultProxySettings: true,
@ -274,7 +275,7 @@ func TestIngressGateway_SDS_UpgradeToTarget_fromLatest(t *testing.T) {
// Upgrade the cluster to utils.TargetVersion // Upgrade the cluster to utils.TargetVersion
t.Logf("Upgrade to version %s", utils.TargetVersion) t.Logf("Upgrade to version %s", utils.TargetVersion)
err = cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion) err = cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion)
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, igw.Restart()) require.NoError(t, igw.Restart())

View File

@ -50,6 +50,7 @@ func TestIngressGateway_UpgradeToTarget_fromLatest(t *testing.T) {
NumClients: 2, NumClients: 2,
BuildOpts: &libcluster.BuildOptions{ BuildOpts: &libcluster.BuildOptions{
Datacenter: "dc1", Datacenter: "dc1",
ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: utils.LatestVersion, ConsulVersion: utils.LatestVersion,
}, },
ApplyDefaultProxySettings: true, ApplyDefaultProxySettings: true,
@ -481,7 +482,7 @@ func TestIngressGateway_UpgradeToTarget_fromLatest(t *testing.T) {
// Upgrade the cluster to utils.utils.TargetVersion // Upgrade the cluster to utils.utils.TargetVersion
t.Logf("Upgrade to version %s", utils.TargetVersion) t.Logf("Upgrade to version %s", utils.TargetVersion)
err = cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion) err = cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion)
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, igw.Restart()) require.NoError(t, igw.Restart())

View File

@ -99,7 +99,7 @@ func TestTrafficManagement_ResolveDefaultSubset(t *testing.T) {
assertionFn() assertionFn()
// Upgrade cluster, restart sidecars then begin service traffic validation // Upgrade cluster, restart sidecars then begin service traffic validation
require.NoError(t, cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion)) require.NoError(t, cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion))
require.NoError(t, staticClientProxy.Restart()) require.NoError(t, staticClientProxy.Restart())
require.NoError(t, staticServerProxy.Restart()) require.NoError(t, staticServerProxy.Restart())
require.NoError(t, serverConnectProxyV1.Restart()) require.NoError(t, serverConnectProxyV1.Restart())
@ -198,7 +198,7 @@ func TestTrafficManagement_ResolverDefaultOnlyPassing(t *testing.T) {
assertionFn() assertionFn()
// Upgrade cluster, restart sidecars then begin service traffic validation // Upgrade cluster, restart sidecars then begin service traffic validation
require.NoError(t, cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion)) require.NoError(t, cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion))
require.NoError(t, staticClientProxy.Restart()) require.NoError(t, staticClientProxy.Restart())
require.NoError(t, staticServerProxy.Restart()) require.NoError(t, staticServerProxy.Restart())
require.NoError(t, serverConnectProxyV1.Restart()) require.NoError(t, serverConnectProxyV1.Restart())
@ -307,7 +307,7 @@ func TestTrafficManagement_ResolverSubsetRedirect(t *testing.T) {
assertionFn() assertionFn()
// Upgrade cluster, restart sidecars then begin service traffic validation // Upgrade cluster, restart sidecars then begin service traffic validation
require.NoError(t, cluster.StandardUpgrade(t, context.Background(), utils.TargetVersion)) require.NoError(t, cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion))
require.NoError(t, staticClientProxy.Restart()) require.NoError(t, staticClientProxy.Restart())
require.NoError(t, staticServerProxy.Restart()) require.NoError(t, staticServerProxy.Restart())
require.NoErrorf(t, server2ConnectProxy.Restart(), "%s", server2ConnectProxy.GetName()) require.NoErrorf(t, server2ConnectProxy.Restart(), "%s", server2ConnectProxy.GetName())
@ -320,6 +320,7 @@ func TestTrafficManagement_ResolverSubsetRedirect(t *testing.T) {
func setup(t *testing.T) (*libcluster.Cluster, libservice.Service, libservice.Service) { func setup(t *testing.T) (*libcluster.Cluster, libservice.Service, libservice.Service) {
buildOpts := &libcluster.BuildOptions{ buildOpts := &libcluster.BuildOptions{
ConsulImageName: utils.GetLatestImageName(),
ConsulVersion: utils.LatestVersion, ConsulVersion: utils.LatestVersion,
Datacenter: "dc1", Datacenter: "dc1",
InjectAutoEncryption: true, InjectAutoEncryption: true,

View File

@ -27,7 +27,7 @@ import (
func TestPeering_ControlPlaneMGW(t *testing.T) { func TestPeering_ControlPlaneMGW(t *testing.T) {
t.Parallel() t.Parallel()
accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.LatestVersion, true) accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.GetLatestImageName(), utils.LatestVersion, true)
var ( var (
acceptingCluster = accepting.Cluster acceptingCluster = accepting.Cluster
dialingCluster = dialing.Cluster dialingCluster = dialing.Cluster
@ -51,11 +51,11 @@ func TestPeering_ControlPlaneMGW(t *testing.T) {
"upstream_cx_total", 1) "upstream_cx_total", 1)
// Upgrade the accepting cluster and assert peering is still ACTIVE // Upgrade the accepting cluster and assert peering is still ACTIVE
require.NoError(t, acceptingCluster.StandardUpgrade(t, context.Background(), utils.TargetVersion)) require.NoError(t, acceptingCluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion))
libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive)
libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive)
require.NoError(t, dialingCluster.StandardUpgrade(t, context.Background(), utils.TargetVersion)) require.NoError(t, dialingCluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), utils.TargetVersion))
libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive)
libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive)

View File

@ -20,14 +20,14 @@ import (
func TestPeering_Basic(t *testing.T) { func TestPeering_Basic(t *testing.T) {
t.Parallel() t.Parallel()
accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.LatestVersion, false) accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.GetLatestImageName(), utils.LatestVersion, false)
peeringUpgrade(t, accepting, dialing, utils.TargetVersion) peeringUpgrade(t, accepting, dialing, utils.TargetVersion)
peeringPostUpgradeValidation(t, dialing) peeringPostUpgradeValidation(t, dialing)
} }
func TestPeering_HTTPRouter(t *testing.T) { func TestPeering_HTTPRouter(t *testing.T) {
t.Parallel() t.Parallel()
accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.LatestVersion, false) accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.GetLatestImageName(), utils.LatestVersion, false)
acceptingCluster := accepting.Cluster acceptingCluster := accepting.Cluster
// Create a second static-server at the client agent of accepting cluster and // Create a second static-server at the client agent of accepting cluster and
@ -90,7 +90,7 @@ func TestPeering_HTTPRouter(t *testing.T) {
func TestPeering_HTTPResolverAndFailover(t *testing.T) { func TestPeering_HTTPResolverAndFailover(t *testing.T) {
t.Parallel() t.Parallel()
accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.LatestVersion, false) accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.GetLatestImageName(), utils.LatestVersion, false)
dialingCluster := dialing.Cluster dialingCluster := dialing.Cluster
require.NoError(t, dialingCluster.ConfigEntryWrite(&api.ProxyConfigEntry{ require.NoError(t, dialingCluster.ConfigEntryWrite(&api.ProxyConfigEntry{
@ -183,7 +183,7 @@ func TestPeering_HTTPResolverAndFailover(t *testing.T) {
func TestPeering_HTTPResolverAndSplitter(t *testing.T) { func TestPeering_HTTPResolverAndSplitter(t *testing.T) {
t.Parallel() t.Parallel()
accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.LatestVersion, false) accepting, dialing := libtopology.BasicPeeringTwoClustersSetup(t, utils.GetLatestImageName(), utils.LatestVersion, false)
dialingCluster := dialing.Cluster dialingCluster := dialing.Cluster
require.NoError(t, dialingCluster.ConfigEntryWrite(&api.ProxyConfigEntry{ require.NoError(t, dialingCluster.ConfigEntryWrite(&api.ProxyConfigEntry{
@ -295,11 +295,11 @@ func peeringUpgrade(t *testing.T, accepting, dialing *libtopology.BuiltCluster,
_, staticClientPort := dialing.Container.GetAddr() _, staticClientPort := dialing.Container.GetAddr()
// Upgrade the accepting cluster and assert peering is still ACTIVE // Upgrade the accepting cluster and assert peering is still ACTIVE
require.NoError(t, accepting.Cluster.StandardUpgrade(t, context.Background(), targetVersion)) require.NoError(t, accepting.Cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), targetVersion))
libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive)
libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive)
require.NoError(t, dialing.Cluster.StandardUpgrade(t, context.Background(), targetVersion)) require.NoError(t, dialing.Cluster.StandardUpgrade(t, context.Background(), utils.GetTargetImageName(), targetVersion))
libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, acceptingClient, libtopology.AcceptingPeerName, api.PeeringStateActive)
libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive) libassert.PeeringStatus(t, dialingClient, libtopology.DialingPeerName, api.PeeringStateActive)