github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/upgrades/upgradevalidation/version_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package upgradevalidation_test 5 6 import ( 7 jujutesting "github.com/juju/testing" 8 jc "github.com/juju/testing/checkers" 9 "github.com/juju/version/v2" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/upgrades/upgradevalidation" 13 ) 14 15 type versionSuite struct { 16 jujutesting.IsolationSuite 17 } 18 19 var _ = gc.Suite(&versionSuite{}) 20 21 type versionCheckTC struct { 22 from string 23 to string 24 allowed bool 25 minVers string 26 err string 27 } 28 29 func (s *versionSuite) TestUpgradeControllerAllowed(c *gc.C) { 30 for i, t := range []versionCheckTC{ 31 { 32 from: "2.8.0", 33 to: "3.0.0", 34 allowed: false, 35 minVers: "2.9.36", 36 }, { 37 from: "2.9.65", 38 to: "3.0.0", 39 allowed: true, 40 minVers: "2.9.36", 41 }, { 42 from: "2.9.37", 43 to: "3.0.0", 44 allowed: true, 45 minVers: "2.9.36", 46 }, { 47 from: "2.9.0", 48 to: "4.0.0", 49 allowed: false, 50 minVers: "0.0.0", 51 err: `upgrading controller to "4.0.0" is not supported from "2.9.0"`, 52 }, { 53 from: "3.0.0", 54 to: "2.0.0", 55 allowed: false, 56 minVers: "0.0.0", 57 err: `downgrade is not allowed`, 58 }, 59 } { 60 s.assertUpgradeControllerAllowed(c, i, t) 61 } 62 } 63 64 func (s *versionSuite) assertUpgradeControllerAllowed(c *gc.C, i int, t versionCheckTC) { 65 c.Logf("testing %d", i) 66 67 restore := jujutesting.PatchValue(&upgradevalidation.MinAgentVersions, map[int]version.Number{ 68 3: version.MustParse("2.9.36"), 69 }) 70 defer restore() 71 72 from := version.MustParse(t.from) 73 to := version.MustParse(t.to) 74 minVers := version.MustParse(t.minVers) 75 allowed, vers, err := upgradevalidation.UpgradeControllerAllowed(from, to) 76 c.Check(allowed, gc.Equals, t.allowed) 77 c.Check(vers, gc.DeepEquals, minVers) 78 if t.err == "" { 79 c.Check(err, jc.ErrorIsNil) 80 } else { 81 c.Check(err, gc.ErrorMatches, t.err) 82 } 83 } 84 85 func (s *versionSuite) TestMigrateToAllowed(c *gc.C) { 86 for i, t := range []versionCheckTC{ 87 { 88 from: "2.8.0", 89 to: "3.0.0", 90 allowed: false, 91 minVers: "2.9.43", 92 }, { 93 from: "2.9.43", 94 to: "3.0.0", 95 allowed: true, 96 minVers: "2.9.43", 97 }, { 98 from: "2.9.44", 99 to: "3.0.0", 100 allowed: true, 101 minVers: "2.9.43", 102 }, 103 { 104 from: "2.9.0", 105 to: "4.0.0", 106 allowed: false, 107 minVers: "0.0.0", 108 err: `migrate to "4.0.0" is not supported from "2.9.0"`, 109 }, 110 { 111 from: "3.0.0", 112 to: "2.0.0", 113 allowed: false, 114 minVers: "0.0.0", 115 err: `downgrade is not allowed`, 116 }, 117 } { 118 s.assertMigrateToAllowed(c, i, t) 119 } 120 } 121 122 func (s *versionSuite) assertMigrateToAllowed(c *gc.C, i int, t versionCheckTC) { 123 c.Logf("testing %d", i) 124 from := version.MustParse(t.from) 125 to := version.MustParse(t.to) 126 minVers := version.MustParse(t.minVers) 127 allowed, vers, err := upgradevalidation.MigrateToAllowed(from, to) 128 c.Check(allowed, gc.Equals, t.allowed) 129 c.Check(vers, gc.DeepEquals, minVers) 130 if t.err == "" { 131 c.Check(err, jc.ErrorIsNil) 132 } else { 133 c.Check(err, gc.ErrorMatches, t.err) 134 } 135 }