mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
203 lines
4.2 KiB
Go
203 lines
4.2 KiB
Go
package version
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
hashiVersion "github.com/anchore/go-version"
|
|
)
|
|
|
|
func TestIsUpdateAvailable(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
buildVersion string
|
|
latestVersion string
|
|
code int
|
|
isAvailable bool
|
|
newVersion string
|
|
err bool
|
|
}{
|
|
{
|
|
name: "equal",
|
|
buildVersion: "1.0.0",
|
|
latestVersion: "1.0.0",
|
|
code: 200,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: false,
|
|
},
|
|
{
|
|
name: "hasUpdate",
|
|
buildVersion: "1.0.0",
|
|
latestVersion: "1.2.0",
|
|
code: 200,
|
|
isAvailable: true,
|
|
newVersion: "1.2.0",
|
|
err: false,
|
|
},
|
|
{
|
|
name: "aheadOfLatest",
|
|
buildVersion: "1.2.0",
|
|
latestVersion: "1.0.0",
|
|
code: 200,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: false,
|
|
},
|
|
{
|
|
name: "EmptyUpdate",
|
|
buildVersion: "1.0.0",
|
|
latestVersion: "",
|
|
code: 200,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: true,
|
|
},
|
|
{
|
|
name: "GarbageUpdate",
|
|
buildVersion: "1.0.0",
|
|
latestVersion: "hdfjksdhfhkj",
|
|
code: 200,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: true,
|
|
},
|
|
{
|
|
name: "BadUpdate",
|
|
buildVersion: "1.0.0",
|
|
latestVersion: "1.0.",
|
|
code: 500,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: true,
|
|
},
|
|
{
|
|
name: "NoBuildVersion",
|
|
buildVersion: valueNotProvided,
|
|
latestVersion: "1.0.0",
|
|
code: 200,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: false,
|
|
},
|
|
{
|
|
name: "BadUpdateValidVersion",
|
|
buildVersion: "1.0.0",
|
|
latestVersion: "2.0.0",
|
|
code: 404,
|
|
isAvailable: false,
|
|
newVersion: "",
|
|
err: true,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
// setup mocks
|
|
// local...
|
|
version = test.buildVersion
|
|
// remote...
|
|
handler := http.NewServeMux()
|
|
handler.HandleFunc(latestAppVersionURL.path, func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(test.code)
|
|
_, _ = w.Write([]byte(test.latestVersion))
|
|
})
|
|
mockSrv := httptest.NewServer(handler)
|
|
latestAppVersionURL.host = mockSrv.URL
|
|
defer mockSrv.Close()
|
|
|
|
isAvailable, newVersion, err := IsUpdateAvailable()
|
|
if err != nil && !test.err {
|
|
t.Fatalf("got error but expected none: %+v", err)
|
|
} else if err == nil && test.err {
|
|
t.Fatalf("expected error but got none")
|
|
}
|
|
|
|
if newVersion != test.newVersion {
|
|
t.Errorf("unexpected NEW version: %+v", newVersion)
|
|
}
|
|
|
|
if isAvailable != test.isAvailable {
|
|
t.Errorf("unexpected result: %+v", isAvailable)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
func TestFetchLatestApplicationVersion(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
response string
|
|
code int
|
|
err bool
|
|
expected *hashiVersion.Version
|
|
}{
|
|
{
|
|
name: "gocase",
|
|
response: "1.0.0",
|
|
code: 200,
|
|
expected: hashiVersion.Must(hashiVersion.NewVersion("1.0.0")),
|
|
},
|
|
{
|
|
name: "garbage",
|
|
response: "garbage",
|
|
code: 200,
|
|
expected: nil,
|
|
err: true,
|
|
},
|
|
{
|
|
name: "http 500",
|
|
response: "1.0.0",
|
|
code: 500,
|
|
expected: nil,
|
|
err: true,
|
|
},
|
|
{
|
|
name: "http 404",
|
|
response: "1.0.0",
|
|
code: 404,
|
|
expected: nil,
|
|
err: true,
|
|
},
|
|
{
|
|
name: "empty",
|
|
response: "",
|
|
code: 200,
|
|
expected: nil,
|
|
err: true,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
// setup mock
|
|
handler := http.NewServeMux()
|
|
handler.HandleFunc(latestAppVersionURL.path, func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(test.code)
|
|
_, _ = w.Write([]byte(test.response))
|
|
})
|
|
mockSrv := httptest.NewServer(handler)
|
|
latestAppVersionURL.host = mockSrv.URL
|
|
defer mockSrv.Close()
|
|
|
|
actual, err := fetchLatestApplicationVersion()
|
|
if err != nil && !test.err {
|
|
t.Fatalf("got error but expected none: %+v", err)
|
|
} else if err == nil && test.err {
|
|
t.Fatalf("expected error but got none")
|
|
}
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if actual.String() != test.expected.String() {
|
|
t.Errorf("unexpected version: %+v", actual.String())
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|