github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/version/version_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package version
     5  
     6  import (
     7  	"fmt"
     8  	"runtime"
     9  
    10  	jc "github.com/juju/testing/checkers"
    11  	semversion "github.com/juju/version/v2"
    12  	gc "gopkg.in/check.v1"
    13  )
    14  
    15  type suite struct{}
    16  
    17  var _ = gc.Suite(&suite{})
    18  
    19  var isDevTests = []struct {
    20  	num semversion.Number
    21  	dev bool
    22  }{{
    23  	num: semversion.Number{},
    24  }, {
    25  	num: semversion.Number{Major: 0, Minor: 0, Patch: 1},
    26  }, {
    27  	num: semversion.Number{Major: 0, Minor: 0, Patch: 2},
    28  }, {
    29  	num: semversion.Number{Major: 0, Minor: 1, Patch: 0},
    30  	dev: true,
    31  }, {
    32  	num: semversion.Number{Major: 0, Minor: 2, Patch: 3},
    33  }, {
    34  	num: semversion.Number{Major: 1, Minor: 0, Patch: 0},
    35  }, {
    36  	num: semversion.Number{Major: 10, Minor: 234, Patch: 3456},
    37  }, {
    38  	num: semversion.Number{Major: 10, Minor: 234, Patch: 3456, Build: 1},
    39  	dev: true,
    40  }, {
    41  	num: semversion.Number{Major: 10, Minor: 234, Patch: 3456, Build: 64},
    42  	dev: true,
    43  }, {
    44  	num: semversion.Number{Major: 10, Minor: 235, Patch: 3456},
    45  }, {
    46  	num: semversion.Number{Major: 1, Minor: 21, Patch: 1, Tag: "alpha"},
    47  	dev: true,
    48  }, {
    49  	num: semversion.Number{Major: 1, Minor: 21, Patch: 1, Tag: "alpha", Build: 1},
    50  	dev: true,
    51  }, {
    52  	num: semversion.Number{Major: 1, Minor: 21},
    53  }}
    54  
    55  func (*suite) TestIsDev(c *gc.C) {
    56  	for i, test := range isDevTests {
    57  		c.Logf("test %d", i)
    58  		c.Check(IsDev(test.num), gc.Equals, test.dev)
    59  	}
    60  }
    61  
    62  func (s *suite) TestCompiler(c *gc.C) {
    63  	c.Assert(Compiler, gc.Equals, runtime.Compiler)
    64  }
    65  
    66  func (s *suite) TestCheckJujuMinVersion(c *gc.C) {
    67  	for _, test := range []struct {
    68  		toCheck     semversion.Number
    69  		jujuVersion semversion.Number
    70  		error       bool
    71  	}{
    72  		{
    73  			toCheck:     semversion.Zero,
    74  			jujuVersion: semversion.MustParse("2.8.0"),
    75  			error:       false,
    76  		}, {
    77  			toCheck:     semversion.MustParse("2.8.0"),
    78  			jujuVersion: semversion.MustParse("2.8.0"),
    79  			error:       false,
    80  		}, {
    81  			toCheck:     semversion.MustParse("2.8.0"),
    82  			jujuVersion: semversion.MustParse("2.8.1"),
    83  			error:       false,
    84  		}, {
    85  			toCheck:     semversion.MustParse("2.8.0"),
    86  			jujuVersion: semversion.MustParse("2.9.0"),
    87  			error:       false,
    88  		}, {
    89  			toCheck:     semversion.MustParse("2.8.0"),
    90  			jujuVersion: semversion.MustParse("3.0.0"),
    91  			error:       false,
    92  		}, {
    93  			toCheck:     semversion.MustParse("2.8.0"),
    94  			jujuVersion: semversion.MustParse("2.8-beta1"),
    95  			error:       false,
    96  		}, {
    97  			toCheck:     semversion.MustParse("2.8.0"),
    98  			jujuVersion: semversion.MustParse("2.7.0"),
    99  			error:       true,
   100  		},
   101  	} {
   102  		err := CheckJujuMinVersion(test.toCheck, test.jujuVersion)
   103  		if test.error {
   104  			c.Assert(err, jc.Satisfies, IsMinVersionError)
   105  			c.Assert(err.Error(), gc.Equals,
   106  				fmt.Sprintf("charm's min version (%s) is higher than this juju model's version (%s)",
   107  					test.toCheck, test.jujuVersion))
   108  		} else {
   109  			c.Assert(err, jc.ErrorIsNil)
   110  		}
   111  	}
   112  }