From 4cb7c9b941356e14ea32b48ffff9bf4d99046361 Mon Sep 17 00:00:00 2001 From: Michael Valdron Date: Tue, 14 Jun 2022 19:31:24 -0400 Subject: [PATCH] MakeVersionMap function moved to util package & unit test added for MakeVersionMap function. Signed-off-by: Michael Valdron --- index/server/pkg/server/endpoint.go | 34 ++-------------------- index/server/pkg/util/util.go | 31 ++++++++++++++++++++ index/server/pkg/util/util_test.go | 45 +++++++++++++++++++++++++++-- 3 files changed, 75 insertions(+), 35 deletions(-) diff --git a/index/server/pkg/server/endpoint.go b/index/server/pkg/server/endpoint.go index b56754e9d..c30b47137 100644 --- a/index/server/pkg/server/endpoint.go +++ b/index/server/pkg/server/endpoint.go @@ -19,7 +19,6 @@ import ( indexSchema "github.com/devfile/registry-support/index/generator/schema" "github.com/devfile/registry-support/index/server/pkg/util" "github.com/gin-gonic/gin" - versionpkg "github.com/hashicorp/go-version" "github.com/prometheus/client_golang/prometheus" "gopkg.in/segmentio/analytics-go.v3" ) @@ -134,7 +133,7 @@ func serveDevfileStarterProjectWithVersion(c *gin.Context) { devfileBytes, devfileIndex := fetchDevfile(c, devfileName, version) if len(devfileIndex.Versions) > 1 { - versionMap, err := makeVersionMap(devfileIndex) + versionMap, err := util.MakeVersionMap(devfileIndex) if err != nil { log.Print(err.Error()) c.JSON(http.StatusInternalServerError, gin.H{ @@ -393,35 +392,6 @@ func buildIndexAPIResponse(c *gin.Context, wantV1Index bool) { } } -// makeVersionMap creates a map of versions for a given devfile index schema. -func makeVersionMap(devfileIndex indexSchema.Schema) (map[string]indexSchema.Version, error) { - versionMap := make(map[string]indexSchema.Version) - var latestVersion string - for _, versionElement := range devfileIndex.Versions { - versionMap[versionElement.Version] = versionElement - if versionElement.Default { - versionMap["default"] = versionElement - } - if latestVersion != "" { - latest, err := versionpkg.NewVersion(latestVersion) - if err != nil { - return map[string]indexSchema.Version{}, err - } - current, err := versionpkg.NewVersion(versionElement.Version) - if err != nil { - return map[string]indexSchema.Version{}, err - } - if current.GreaterThan(latest) { - latestVersion = versionElement.Version - } - } else { - latestVersion = versionElement.Version - } - } - versionMap["latest"] = versionMap[latestVersion] - return versionMap, nil -} - // fetchDevfile retrieves a specified devfile by fetching stacks from the OCI // registry and samples from the `samplesPath` given by server. Also retrieves index // schema from `indexPath` given by server. @@ -489,7 +459,7 @@ func fetchDevfile(c *gin.Context, name string, version string) ([]byte, indexSch sampleDevfilePath = path.Join(samplesPath, devfileIndex.Name, devfileName) } } else { - versionMap, err := makeVersionMap(devfileIndex) + versionMap, err := util.MakeVersionMap(devfileIndex) if err != nil { log.Print(err.Error()) c.JSON(http.StatusInternalServerError, gin.H{ diff --git a/index/server/pkg/util/util.go b/index/server/pkg/util/util.go index 618b43da1..5048d12ed 100644 --- a/index/server/pkg/util/util.go +++ b/index/server/pkg/util/util.go @@ -11,6 +11,8 @@ import ( "strconv" "strings" + versionpkg "github.com/hashicorp/go-version" + indexLibrary "github.com/devfile/registry-support/index/generator/library" indexSchema "github.com/devfile/registry-support/index/generator/schema" ) @@ -182,3 +184,32 @@ func IsTelemetryEnabled() bool { } return false } + +// MakeVersionMap creates a map of versions for a given devfile index schema. +func MakeVersionMap(devfileIndex indexSchema.Schema) (map[string]indexSchema.Version, error) { + versionMap := make(map[string]indexSchema.Version) + var latestVersion string + for _, versionElement := range devfileIndex.Versions { + versionMap[versionElement.Version] = versionElement + if versionElement.Default { + versionMap["default"] = versionElement + } + if latestVersion != "" { + latest, err := versionpkg.NewVersion(latestVersion) + if err != nil { + return map[string]indexSchema.Version{}, err + } + current, err := versionpkg.NewVersion(versionElement.Version) + if err != nil { + return map[string]indexSchema.Version{}, err + } + if current.GreaterThan(latest) { + latestVersion = versionElement.Version + } + } else { + latestVersion = versionElement.Version + } + } + versionMap["latest"] = versionMap[latestVersion] + return versionMap, nil +} diff --git a/index/server/pkg/util/util_test.go b/index/server/pkg/util/util_test.go index 158ba07fe..ec7df8ad5 100644 --- a/index/server/pkg/util/util_test.go +++ b/index/server/pkg/util/util_test.go @@ -2,11 +2,12 @@ package util import ( "encoding/json" - "github.com/devfile/registry-support/index/generator/schema" "io/ioutil" "os" "reflect" "testing" + + indexSchema "github.com/devfile/registry-support/index/generator/schema" ) func TestIsHtmlRequested(t *testing.T) { @@ -206,12 +207,12 @@ func TestConvertToOldIndexFormat(t *testing.T) { if err != nil { t.Errorf("Failed to oldIndexStruct.json: %v", err) } - var inputIndex []schema.Schema + var inputIndex []indexSchema.Schema err = json.Unmarshal(bytes, &inputIndex) if err != nil { t.Errorf("Failed to unmarshal inputIndex json") } - var wantIndex []schema.Schema + var wantIndex []indexSchema.Schema err = json.Unmarshal(expected, &wantIndex) if err != nil { t.Errorf("Failed to unmarshal wantIndex json") @@ -225,3 +226,41 @@ func TestConvertToOldIndexFormat(t *testing.T) { } }) } + +func TestMakeVersionMap(t *testing.T) { + devfileIndex := indexSchema.Schema{ + Name: "Test", + Version: "", + Attributes: nil, + DisplayName: "", + Description: "", + Type: "", + Tags: []string{}, + Architectures: []string{}, + Icon: "", + GlobalMemoryLimit: "", + ProjectType: "", + Language: "", + Links: map[string]string{}, + Resources: []string{}, + StarterProjects: []string{}, + Git: &indexSchema.Git{}, + Provider: "", + SupportUrl: "", + Versions: []indexSchema.Version{ + {Version: "1.1.0"}, + {Version: "1.2.0"}, + }, + } + + t.Run("Test generate version map", func(t *testing.T) { + versionMap, err := MakeVersionMap(devfileIndex) + if err != nil { + t.Errorf("Was not expecting error with MakeVersionMap: %v", err) + } + + if !reflect.DeepEqual("1.1.0", versionMap["default"].Version) { + t.Errorf("Was expecting 'default' to map to '1.1.0' not '%s'", versionMap["default"].Version) + } + }) +}