Problem
Upgrade tests are located in Serving, Eventing, and also a merger of those in Operator. All those utilize Bash scripts that perform upgrade & downgrade, invoke smoke tests, and orchestrate continues assertion on requests or events in background. This follow up on knative/serving#9137.
Possible solution
I propose to create a pluggable test suite for upgrade tests. That upgrade suite might be located in knative.dev/pkg/test/upgrade package. That test suite should be configurable, so that can be used for upgrade testing in Knative Serving, and Eventing, and Operator. Different configuration can be used by vendors that needs this to be slightly different.
Consider the example of pseudo code below for Serving upgrades:
// +build e2e
// Serving upgrade test
package e2e
import (
"knative.dev/pkg/test/upgrade"
serving "knative.dev/serving/test/upgrade"
)
func TestServingUpgrades(t *testing.T) {
suite := upgrade.NewBuilder(t).
PreUpgradeTest(serving.PreUpgradeTest).
PostUpgradeTest(serving.PostUpgradeTest).
PostDowngradeTest(serving.PostDowngradeTest).
ProbeTest(serving.ProbeTest).
BaseInstall(serving.LatestReleaseInstall).
UpgradeWith(serving.HeadInstall).
DowngradeWith(serving.LatestReleaseInstall).
Build()
suite.Execute()
}
And Eventing upgrades:
// +build e2e
// Eventing upgrade test
package e2e
import (
"knative.dev/pkg/test/upgrade"
eventing "knative.dev/eventing/test/upgrade"
)
func TestEventingUpgrades(t *testing.T) {
suite := upgrade.NewBuilder(t).
PreUpgradeTest(eventing.PreUpgradeTest).
PostUpgradeTest(eventing.PostUpgradeTest).
PostDowngradeTest(eventing.PostDowngradeTest).
ProbeTest(eventing.ProbeTest).
BaseInstall(eventing.LatestReleaseInstall).
UpgradeWith(eventing.HeadInstall).
DowngradeWith(eventing.LatestReleaseInstall).
Build()
suite.Execute()
}
And Knative Operator upgrades test might then look like:
// +build e2e
// Operator upgrade test
package e2e
import (
"knative.dev/pkg/test/upgrade"
serving "knative.dev/serving/test/upgrade"
eventing "knative.dev/eventing/test/upgrade"
)
func TestOperatorUpgrades(t *testing.T) {
suite := upgrade.NewBuilder(t).
PreUpgradeTest(serving.PreUpgradeTest).
PreUpgradeTest(eventing.PreUpgradeTest).
PostUpgradeTest(serving.PostUpgradeTest).
PostUpgradeTest(eventing.PostUpgradeTest).
PostDowngradeTest(serving.PostDowngradeTest).
PostDowngradeTest(eventing.PostDowngradeTest).
ProbeTest(serving.ProbeTest).
ProbeTest(eventing.ProbeTest).
BaseInstall(serving.LatestReleaseInstall).
BaseInstall(eventing.LatestReleaseInstall).
UpgradeWith(serving.HeadInstall).
UpgradeWith(eventing.HeadInstall).
DowngradeWith(serving.LatestReleaseInstall).
DowngradeWith(eventing.LatestReleaseInstall).
Build()
suite.Execute()
}
As a final example Openshift Serverless example:
// +build e2e
// Serverless upgrade test
package e2e
import (
"knative.dev/pkg/test/upgrade"
serving "knative.dev/serving/test/upgrade"
eventing "knative.dev/eventing/test/upgrade"
serverless "github.com/openshift-knative/serverless-operator/test/upgrade"
"github.com/openshift-knative/serverless-operator/test/upgrade/ocp"
)
func TestServerlessOperatorUpgrades(t *testing.T) {
suite := upgrade.NewBuilder(t).
PreUpgradeTest(serving.PreUpgradeTest).
PreUpgradeTest(eventing.PreUpgradeTest).
PostUpgradeTest(serving.PostUpgradeTest).
PostUpgradeTest(eventing.PostUpgradeTest).
PostDowngradeTest(serving.PostDowngradeTest).
PostDowngradeTest(eventing.PostDowngradeTest).
ProbeTest(serving.ProbeTest).
ProbeTest(eventing.ProbeTest).
BaseInstall(serverless.LatestReleaseInstall).
UpgradeWith(ocp.Latest).
UpgradeWith(serverless.HeadInstall).
// No downgrade in this test...
Build()
suite.Execute()
}
Problem
Upgrade tests are located in Serving, Eventing, and also a merger of those in Operator. All those utilize Bash scripts that perform upgrade & downgrade, invoke smoke tests, and orchestrate continues assertion on requests or events in background. This follow up on knative/serving#9137.
Possible solution
I propose to create a pluggable test suite for upgrade tests. That upgrade suite might be located in
knative.dev/pkg/test/upgradepackage. That test suite should be configurable, so that can be used for upgrade testing in Knative Serving, and Eventing, and Operator. Different configuration can be used by vendors that needs this to be slightly different.Consider the example of pseudo code below for Serving upgrades:
And Eventing upgrades:
And Knative Operator upgrades test might then look like:
As a final example Openshift Serverless example: