mirror of https://github.com/linkerd/linkerd2.git
112 lines
4.1 KiB
Go
112 lines
4.1 KiB
Go
package version_test
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/runconduit/conduit/controller/api/public"
|
|
healthcheckPb "github.com/runconduit/conduit/controller/gen/common/healthcheck"
|
|
pb "github.com/runconduit/conduit/controller/gen/public"
|
|
"github.com/runconduit/conduit/pkg/version"
|
|
)
|
|
|
|
func TestVersionCheck(t *testing.T) {
|
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprintf(w, "{\"version\": \"v0.3.0\"}")
|
|
})
|
|
go http.ListenAndServe("localhost:8080", nil)
|
|
|
|
t.Run("Passes when versions are latest", func(t *testing.T) {
|
|
version.Version = "v0.3.0"
|
|
mockPublicApi := createMockPublicApi("v0.3.0")
|
|
|
|
versionStatusChecker := version.NewVersionStatusChecker("http://localhost:8080/", "", mockPublicApi)
|
|
checks := versionStatusChecker.SelfCheck()
|
|
|
|
expectedName := version.VersionSubsystemName
|
|
if checks[0].SubsystemName != expectedName {
|
|
t.Fatalf("Expecting check name to be [%s], got [%s]", expectedName, checks[0].SubsystemName)
|
|
}
|
|
if checks[1].SubsystemName != expectedName {
|
|
t.Fatalf("Expecting check name to be [%s], got [%s]", expectedName, checks[0].SubsystemName)
|
|
}
|
|
|
|
expectedStatus := healthcheckPb.CheckStatus_OK
|
|
if checks[0].Status != expectedStatus {
|
|
t.Fatalf("Expecting cli check status to be [%d], got [%d]", expectedStatus, checks[0].Status)
|
|
}
|
|
if checks[1].Status != expectedStatus {
|
|
t.Fatalf("Expecting control plane check status to be [%d], got [%d]", expectedStatus, checks[1].Status)
|
|
}
|
|
|
|
expectedDescription := version.CliCheckDescription
|
|
if checks[0].CheckDescription != expectedDescription {
|
|
t.Fatalf("Expecting check description to be [%s], got [%s]", expectedDescription, checks[0].CheckDescription)
|
|
}
|
|
expectedDescription = version.ControlPlaneCheckDescription
|
|
if checks[1].CheckDescription != expectedDescription {
|
|
t.Fatalf("Expecting check description to be [%s], got [%s]", expectedDescription, checks[0].CheckDescription)
|
|
}
|
|
})
|
|
|
|
t.Run("Fails when cli version is not latest", func(t *testing.T) {
|
|
version.Version = "v0.1.1"
|
|
mockPublicApi := createMockPublicApi("v0.3.0")
|
|
|
|
versionStatusChecker := version.NewVersionStatusChecker("http://localhost:8080/", "", mockPublicApi)
|
|
checks := versionStatusChecker.SelfCheck()
|
|
|
|
expectedStatus := healthcheckPb.CheckStatus_FAIL
|
|
if checks[0].Status != expectedStatus {
|
|
t.Fatalf("Expecting check status to be [%d], got [%d]", expectedStatus, checks[0].Status)
|
|
}
|
|
|
|
expectedMessage := "is running version v0.1.1 but the latest version is v0.3.0"
|
|
if checks[0].FriendlyMessageToUser != expectedMessage {
|
|
t.Fatalf("Expecting message to be [%s], got [%s]", expectedMessage, checks[0].FriendlyMessageToUser)
|
|
}
|
|
})
|
|
|
|
t.Run("Fails when control plane version is not latest", func(t *testing.T) {
|
|
version.Version = "v0.3.0"
|
|
mockPublicApi := createMockPublicApi("v0.1.1")
|
|
|
|
versionStatusChecker := version.NewVersionStatusChecker("http://localhost:8080/", "", mockPublicApi)
|
|
checks := versionStatusChecker.SelfCheck()
|
|
|
|
expectedStatus := healthcheckPb.CheckStatus_FAIL
|
|
if checks[1].Status != expectedStatus {
|
|
t.Fatalf("Expecting check status to be [%d], got [%d]", expectedStatus, checks[1].Status)
|
|
}
|
|
|
|
expectedMessage := "is running version v0.1.1 but the latest version is v0.3.0"
|
|
if checks[1].FriendlyMessageToUser != expectedMessage {
|
|
t.Fatalf("Expecting message to be [%s], got [%s]", expectedMessage, checks[1].FriendlyMessageToUser)
|
|
}
|
|
})
|
|
|
|
t.Run("Supports overriding the expected version", func(t *testing.T) {
|
|
version.Version = "customversion"
|
|
mockPublicApi := createMockPublicApi("customversion")
|
|
|
|
versionStatusChecker := version.NewVersionStatusChecker("http://localhost:8080/", "customversion", mockPublicApi)
|
|
checks := versionStatusChecker.SelfCheck()
|
|
|
|
for _, check := range checks {
|
|
if check.Status != healthcheckPb.CheckStatus_OK {
|
|
t.Errorf("Expecting check for [%s] to be [%s], got [%s]",
|
|
check.CheckDescription, healthcheckPb.CheckStatus_OK, check.Status)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func createMockPublicApi(version string) *public.MockConduitApiClient {
|
|
return &public.MockConduitApiClient{
|
|
VersionInfoToReturn: &pb.VersionInfo{
|
|
ReleaseVersion: version,
|
|
},
|
|
}
|
|
}
|