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  }