github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/internal/versions/versions_test.go (about) 1 package versions 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 9 clitypes "github.com/docker/cli/types" 10 "gotest.tools/assert" 11 ) 12 13 func TestParseTagsSimple(t *testing.T) { 14 tags := []string{"1.0.0", "1.1.2", "1.1.1", "1.2.2"} 15 currentVersion := "1.1.0" 16 res, err := parseTags(tags, currentVersion) 17 assert.NilError(t, err) 18 19 assert.Assert(t, err, "already present") 20 assert.Assert(t, len(res.Downgrades) == 1 && res.Downgrades[0].Tag == "1.0.0") 21 assert.Assert(t, len(res.Patches) == 2 && res.Patches[0].Tag == "1.1.1" && res.Patches[1].Tag == "1.1.2") 22 assert.Assert(t, len(res.Upgrades) == 1 && res.Upgrades[0].Tag == "1.2.2") 23 } 24 25 func TestParseConfirmMinSegments(t *testing.T) { 26 tags := []string{"1", "1.1.1", "2"} 27 currentVersion := "1.1" 28 res, err := parseTags(tags, currentVersion) 29 assert.NilError(t, err) 30 31 assert.Assert(t, err, "already present") 32 assert.Assert(t, len(res.Downgrades) == 1 && res.Downgrades[0].Tag == "1") 33 assert.Assert(t, len(res.Patches) == 1 && res.Patches[0].Tag == "1.1.1") 34 assert.Assert(t, len(res.Upgrades) == 1 && res.Upgrades[0].Tag == "2") 35 } 36 37 func TestParseTagsFilterPrerelease(t *testing.T) { 38 tags := []string{"1.0.0", "1.1.1", "1.2.2", "1.1.0-beta1"} 39 currentVersion := "1.1.0" 40 res, err := parseTags(tags, currentVersion) 41 assert.NilError(t, err) 42 43 assert.Assert(t, err, "already present") 44 assert.Assert(t, len(res.Downgrades) == 2 && res.Downgrades[0].Tag == "1.0.0") 45 assert.Assert(t, len(res.Patches) == 1 && res.Patches[0].Tag == "1.1.1") 46 assert.Assert(t, len(res.Upgrades) == 1 && res.Upgrades[0].Tag == "1.2.2") 47 } 48 49 func TestParseTagsBadTag(t *testing.T) { 50 tags := []string{"1.0.0", "1.1.1", "1.2.2", "notasemanticversion"} 51 currentVersion := "1.1.0" 52 res, err := parseTags(tags, currentVersion) 53 assert.NilError(t, err) 54 55 assert.Assert(t, err, "already present") 56 assert.Assert(t, len(res.Downgrades) == 1 && res.Downgrades[0].Tag == "1.0.0") 57 assert.Assert(t, len(res.Patches) == 1 && res.Patches[0].Tag == "1.1.1") 58 assert.Assert(t, len(res.Upgrades) == 1 && res.Upgrades[0].Tag == "1.2.2") 59 } 60 61 func TestParseBadCurrent(t *testing.T) { 62 tags := []string{"1.0.0", "1.1.2", "1.1.1", "1.2.2"} 63 currentVersion := "notasemanticversion" 64 _, err := parseTags(tags, currentVersion) 65 assert.ErrorContains(t, err, "failed to parse existing") 66 } 67 68 func TestParseBadCurrent2(t *testing.T) { 69 tags := []string{"1.0.0", "1.1.2", "1.1.1", "1.2.2"} 70 currentVersion := "" 71 _, err := parseTags(tags, currentVersion) 72 assert.ErrorContains(t, err, "failed to parse existing") 73 } 74 75 func TestGetCurrentRuntimeMetadataNotPresent(t *testing.T) { 76 tmpdir, err := ioutil.TempDir("", "docker-root") 77 assert.NilError(t, err) 78 defer os.RemoveAll(tmpdir) 79 _, err = GetCurrentRuntimeMetadata(tmpdir) 80 assert.ErrorType(t, err, os.IsNotExist) 81 } 82 83 func TestGetCurrentRuntimeMetadataBadJson(t *testing.T) { 84 tmpdir, err := ioutil.TempDir("", "docker-root") 85 assert.NilError(t, err) 86 defer os.RemoveAll(tmpdir) 87 filename := filepath.Join(tmpdir, clitypes.RuntimeMetadataName+".json") 88 err = ioutil.WriteFile(filename, []byte("not json"), 0644) 89 assert.NilError(t, err) 90 _, err = GetCurrentRuntimeMetadata(tmpdir) 91 assert.ErrorContains(t, err, "malformed runtime metadata file") 92 } 93 94 func TestGetCurrentRuntimeMetadataHappyPath(t *testing.T) { 95 tmpdir, err := ioutil.TempDir("", "docker-root") 96 assert.NilError(t, err) 97 defer os.RemoveAll(tmpdir) 98 metadata := clitypes.RuntimeMetadata{Platform: "platformgoeshere"} 99 err = WriteRuntimeMetadata(tmpdir, &metadata) 100 assert.NilError(t, err) 101 102 res, err := GetCurrentRuntimeMetadata(tmpdir) 103 assert.NilError(t, err) 104 assert.Equal(t, res.Platform, "platformgoeshere") 105 }