From 909bc25e123f5aa639ec40b61c4f659e216239f3 Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Wed, 20 May 2020 13:33:37 -0700 Subject: [PATCH] Add tests for modulemeta and moduleversion --- releasing/releasing/gitrunner.go | 2 +- releasing/releasing/modulemeta_test.go | 68 ++++++++++ releasing/releasing/moduleversion.go | 22 ++-- releasing/releasing/moduleversion_test.go | 144 ++++++++++++++++++++++ 4 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 releasing/releasing/modulemeta_test.go create mode 100644 releasing/releasing/moduleversion_test.go diff --git a/releasing/releasing/gitrunner.go b/releasing/releasing/gitrunner.go index 5dbf0e03b..d1219b1f7 100644 --- a/releasing/releasing/gitrunner.go +++ b/releasing/releasing/gitrunner.go @@ -104,7 +104,7 @@ func (gr *gitRunner) CheckRemoteExistence(remote string) error { } logDebug("Remotes:\n%s", string(stdoutStderr)) - regString := fmt.Sprintf("(?m)^%s$", remote) + regString := fmt.Sprintf("(?m)^\\s*%s\\s*$", remote) reg := regexp.MustCompile(regString) if !reg.MatchString(string(stdoutStderr)) { return fmt.Errorf("Cannot find remote named %s", remote) diff --git a/releasing/releasing/modulemeta_test.go b/releasing/releasing/modulemeta_test.go new file mode 100644 index 000000000..c8764ac4e --- /dev/null +++ b/releasing/releasing/modulemeta_test.go @@ -0,0 +1,68 @@ +package main + +import ( + "testing" +) + +func TestModuleTags(t *testing.T) { + tags := `api/v0.1.1 + api/v0.2.0 + api/v0.3.0 + api/v0.3.1 + api/v0.3.2 + api/v0.3.3 + cmd/config/v0.0.1 + cmd/config/v0.0.10 + cmd/config/v0.0.11 + cmd/config/v0.0.12 + cmd/config/v0.0.13 + cmd/config/v0.0.2 + cmd/config/v0.0.3 + cmd/config/v0.0.4 + cmd/config/v0.0.5 + cmd/config/v0.0.6 + cmd/config/v0.0.7 + cmd/config/v0.0.8 + cmd/config/v0.0.9 + cmd/config/v0.1.0 + cmd/config/v0.1.1 + cmd/config/v0.1.10 + cmd/config/v0.1.11 + cmd/config/v0.1.2 + cmd/config/v0.1.3 + cmd/config/v0.1.4 + cmd/config/v0.1.5 + cmd/config/v0.1.6 + cmd/config/v0.1.7 + cmd/config/v0.1.8 + cmd/kubectl/v0.0.1 + cmd/kubectl/v0.0.2 + cmd/kubectl/v0.0.3 + cmd/resource/v0.0.1 + cmd/resource/v0.0.2 + kstatus/v0.0.1 + kustomize/v3.2.1 + kustomize/v3.2.2 + kustomize/v3.2.3 + kustomize/v3.3.0 + kustomize/v3.4.0 + kustomize/v3.5.1 + kustomize/v3.5.2 + kustomize/v3.5.3 + kustomize/v3.5.4 + kustomize/v3.5.5` + expect := "cmd/config/v0.1.11" + + m := module{ + name: "cmd/config", + } + + err := m.UpdateVersion(tags) + if err != nil { + t.Error(err) + } + + if m.Tag() != expect { + t.Errorf("Tag %s doesn't match expected %s", m.Tag(), expect) + } +} diff --git a/releasing/releasing/moduleversion.go b/releasing/releasing/moduleversion.go index c2e087190..5370262ad 100644 --- a/releasing/releasing/moduleversion.go +++ b/releasing/releasing/moduleversion.go @@ -34,38 +34,42 @@ func (v *moduleVersion) Bump(t string) error { return nil } -func newModuleVersionFromString(vs string) (*moduleVersion, error) { +func newModuleVersionFromString(vs string) (moduleVersion, error) { + v := moduleVersion{} if len(vs) < 1 { - return nil, fmt.Errorf("Invalid version string %s", vs) + return v, fmt.Errorf("Invalid version string %s", vs) } if vs[0] == 'v' { vs = vs[1:] } versions := strings.Split(vs, ".") + if len(versions) != 3 { + return v, fmt.Errorf("Invalid version string %s", vs) + } major, err := strconv.Atoi(versions[0]) if err != nil { - return nil, err + return v, err } minor, err := strconv.Atoi(versions[1]) if err != nil { - return nil, err + return v, err } patch, err := strconv.Atoi(versions[2]) if err != nil { - return nil, err + return v, err } - v := moduleVersion{ + v = moduleVersion{ major: major, minor: minor, patch: patch, } - return &v, nil + return v, nil } func newModuleVersionFromGitTags(tags, modName string) (moduleVersion, error) { // Search for module tag - regString := fmt.Sprintf("(?m)^%s/v(\\d+\\.){2}\\d+$", modName) + regString := fmt.Sprintf("(?m)^\\s*%s/v(\\d+\\.){2}\\d+\\s*$", modName) reg := regexp.MustCompile(regString) modTagsString := reg.FindAllString(tags, -1) logDebug("Tags for module %s:\n%s", modName, modTagsString) @@ -77,7 +81,7 @@ func newModuleVersionFromGitTags(tags, modName string) (moduleVersion, error) { return moduleVersion{}, err } - versions = append(versions, *v) + versions = append(versions, v) } // Sort to find latest tag sort.Slice(versions, func(i, j int) bool { diff --git a/releasing/releasing/moduleversion_test.go b/releasing/releasing/moduleversion_test.go new file mode 100644 index 000000000..251af609e --- /dev/null +++ b/releasing/releasing/moduleversion_test.go @@ -0,0 +1,144 @@ +package main + +import ( + "testing" +) + +func TestVersionFromAndToString(t *testing.T) { + vs := "1.1.1" + expect := "v1.1.1" + v, err := newModuleVersionFromString(vs) + if err != nil { + t.Error(err) + } + if v.String() != expect { + t.Errorf("%s doesn't match expected %s", v.String(), expect) + } + + vs = "v0.0.0" + expect = "v0.0.0" + v, err = newModuleVersionFromString(vs) + if err != nil { + t.Error(err) + } + if v.String() != expect { + t.Errorf("%s doesn't match expected %s", v.String(), expect) + } + + vs = "v0.0" + v, err = newModuleVersionFromString(vs) + if err == nil { + t.Errorf("%s should be invalid", vs) + } + + vs = "" + v, err = newModuleVersionFromString(vs) + if err == nil { + t.Errorf("%s should be invalid", vs) + } +} + +func TestVersionFromGitTags(t *testing.T) { + tags := `api/v0.1.1 + api/v0.2.0 + api/v0.3.0 + api/v0.3.1 + api/v0.3.2 + api/v0.3.3 + cmd/config/v0.0.1 + cmd/config/v0.0.10 + cmd/config/v0.0.11 + cmd/config/v0.0.12 + cmd/config/v0.0.13 + cmd/config/v0.0.2 + cmd/config/v0.0.3 + cmd/config/v0.0.4 + cmd/config/v0.0.5 + cmd/config/v0.0.6 + cmd/config/v0.0.7 + cmd/config/v0.0.8 + cmd/config/v0.0.9 + cmd/config/v0.1.0 + cmd/config/v0.1.1 + cmd/config/v0.1.10 + cmd/config/v0.1.11 + cmd/config/v0.1.2 + cmd/config/v0.1.3 + cmd/config/v0.1.4 + cmd/config/v0.1.5 + cmd/config/v0.1.6 + cmd/config/v0.1.7 + cmd/config/v0.1.8 + cmd/kubectl/v0.0.1 + cmd/kubectl/v0.0.2 + cmd/kubectl/v0.0.3 + cmd/resource/v0.0.1 + cmd/resource/v0.0.2 + kstatus/v0.0.1 + kustomize/v3.2.1 + kustomize/v3.2.2 + kustomize/v3.2.3 + kustomize/v3.3.0 + kustomize/v3.4.0 + kustomize/v3.5.1 + kustomize/v3.5.2 + kustomize/v3.5.3 + kustomize/v3.5.4 + kustomize/v3.5.5` + expect := "v0.1.11" + + v, err := newModuleVersionFromGitTags(tags, "cmd/config") + if err != nil { + t.Error(err) + } + if v.String() != expect { + t.Errorf("%s doesn't match expected %s", v.String(), expect) + } +} + +func TestVersionBumpPatch(t *testing.T) { + v := moduleVersion{0, 1, 1} + expect := "v0.1.2" + err := v.Bump("patch") + if err != nil { + t.Error(err) + } + + if v.String() != expect { + t.Errorf("%s doesn't match expected %s", v.String(), expect) + } +} + +func TestVersionBumpMinor(t *testing.T) { + v := moduleVersion{0, 1, 1} + expect := "v0.2.0" + err := v.Bump("minor") + if err != nil { + t.Error(err) + } + + if v.String() != expect { + t.Errorf("%s doesn't match expected %s", v.String(), expect) + } +} + +func TestVersionBumpMajor(t *testing.T) { + v := moduleVersion{0, 1, 1} + expect := "v1.0.0" + err := v.Bump("major") + if err != nil { + t.Error(err) + } + + if v.String() != expect { + t.Errorf("%s doesn't match expected %s", v.String(), expect) + } +} + +func TestVersionBumpError(t *testing.T) { + v := moduleVersion{} + err := v.Bump("unknown") + if err == nil { + t.Errorf("Invalid bumping type should have error") + } +}