github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/remote/version_test.go (about)

     1  package remote
     2  
     3  import (
     4  	"fmt"
     5  	"sort"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestToString(t *testing.T) {
    12  	var version defaultVersion
    13  	err := ParseVersion("1.2.3-test", &version)
    14  	if err != nil {
    15  		t.Fail()
    16  	}
    17  
    18  	if version.String() != "1.2.3-test" {
    19  		t.Fail()
    20  	}
    21  }
    22  
    23  func TestParseVersion(t *testing.T) {
    24  	var version defaultVersion
    25  	err := ParseVersion("1.2.3-test", &version)
    26  	if err != nil {
    27  		t.Fail()
    28  	}
    29  
    30  	if version.Major != 1 {
    31  		t.Errorf("Unknow major %d", version.Major)
    32  	}
    33  
    34  	if version.Minor != 2 {
    35  		t.Errorf("Unknow minor %d", version.Minor)
    36  	}
    37  
    38  	if version.Patch != 3 {
    39  		t.Errorf("Unknow patch %d", version.Patch)
    40  	}
    41  
    42  	if version.Tag != "test" {
    43  		t.Errorf("Unknow Tag %s", version.Tag)
    44  	}
    45  }
    46  
    47  func TestParseVersions(t *testing.T) {
    48  	versions := []string{
    49  		"1",
    50  		"1.2",
    51  		"1.2.3",
    52  		"1-tag",
    53  		"1.2-tag",
    54  		"1.2.3-tag",
    55  		"1.2.3_tag",
    56  	}
    57  
    58  	var version defaultVersion
    59  	for _, verAsString := range versions {
    60  		err := ParseVersion(verAsString, &version)
    61  		if err != nil {
    62  			t.Fail()
    63  		}
    64  	}
    65  }
    66  
    67  func TestSorter(t *testing.T) {
    68  	values := []string{
    69  		"2.0.2",
    70  		"2.0.1",
    71  		"2",
    72  		"1.2",
    73  		"1",
    74  		"1.2.3",
    75  		"1.0.9",
    76  	}
    77  
    78  	var versions []defaultVersion
    79  	for _, val := range values {
    80  		var version defaultVersion
    81  		_ = ParseVersion(val, &version)
    82  		versions = append(versions, version)
    83  	}
    84  
    85  	sort.Sort(defaultVersionList(versions))
    86  
    87  	expected_versions := []defaultVersion{
    88  		{1, 0, 0, ""},
    89  		{1, 0, 9, ""},
    90  		{1, 2, 0, ""},
    91  		{1, 2, 3, ""},
    92  		{2, 0, 0, ""},
    93  		{2, 0, 1, ""},
    94  		{2, 0, 2, ""},
    95  	}
    96  
    97  	for i := 0; i < len(expected_versions); i++ {
    98  		assert.Equal(t, expected_versions[i], versions[i], fmt.Sprintf("versions[%d] should be %v", i, expected_versions[i]))
    99  	}
   100  }
   101  
   102  func TestLess(t *testing.T) {
   103  	test_cases := []struct {
   104  		l, r    defaultVersion
   105  		compare int
   106  	}{
   107  		{defaultVersion{1, 0, 0, ""}, defaultVersion{1, 0, 1, ""}, -1},
   108  		{defaultVersion{1, 0, 0, ""}, defaultVersion{1, 0, 0, ""}, 0},
   109  		{defaultVersion{1, 0, 2, ""}, defaultVersion{1, 1, 0, ""}, -1},
   110  		{defaultVersion{1, 1, 0, ""}, defaultVersion{1, 0, 1, ""}, 1},
   111  		{defaultVersion{1, 0, 0, "rc1"}, defaultVersion{1, 0, 0, "rc2"}, -1},
   112  		{defaultVersion{1, 0, 0, "rc2"}, defaultVersion{1, 0, 0, "rc2"}, 0},
   113  	}
   114  	for _, tc := range test_cases {
   115  		assert.Equal(t, tc.compare < 0, Less(tc.l, tc.r), fmt.Sprintf("Less(%v, %v) should be %v", tc.l, tc.r, tc.compare < 0))
   116  		assert.Equal(t, tc.compare > 0, Less(tc.r, tc.l), fmt.Sprintf("Less(%v, %v) should be %v", tc.r, tc.l, tc.compare > 0))
   117  	}
   118  }