github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/modeloperator_upgrade_test.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 "context" 8 "fmt" 9 10 jc "github.com/juju/testing/checkers" 11 "github.com/juju/version/v2" 12 gc "gopkg.in/check.v1" 13 apps "k8s.io/api/apps/v1" 14 core "k8s.io/api/core/v1" 15 meta "k8s.io/apimachinery/pkg/apis/meta/v1" 16 v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 17 "k8s.io/client-go/kubernetes" 18 "k8s.io/client-go/kubernetes/fake" 19 20 "github.com/juju/juju/caas/kubernetes/provider/utils" 21 "github.com/juju/juju/cloudconfig/podcfg" 22 ) 23 24 type dummyUpgradeCAASModel struct { 25 client *fake.Clientset 26 } 27 28 type modelUpgraderSuite struct { 29 broker *dummyUpgradeCAASModel 30 } 31 32 var _ = gc.Suite(&modelUpgraderSuite{}) 33 34 func (d *dummyUpgradeCAASModel) Client() kubernetes.Interface { 35 return d.client 36 } 37 38 func (d *dummyUpgradeCAASModel) IsLegacyLabels() bool { 39 return false 40 } 41 42 func (d *dummyUpgradeCAASModel) Namespace() string { 43 return "test" 44 } 45 46 func (s *modelUpgraderSuite) SetUpTest(c *gc.C) { 47 s.broker = &dummyUpgradeCAASModel{ 48 client: fake.NewSimpleClientset(), 49 } 50 } 51 52 func (s *modelUpgraderSuite) TestModelOperatorUpgrade(c *gc.C) { 53 var ( 54 operatorName = modelOperatorName 55 oldImagePath = fmt.Sprintf("%s/%s:9.9.8", podcfg.JujudOCINamespace, podcfg.JujudOCIName) 56 newImagePath = fmt.Sprintf("%s/%s:9.9.9", podcfg.JujudOCINamespace, podcfg.JujudOCIName) 57 ) 58 59 _, err := s.broker.Client().AppsV1().Deployments(s.broker.Namespace()).Create(context.TODO(), 60 &apps.Deployment{ 61 ObjectMeta: meta.ObjectMeta{ 62 Name: operatorName, 63 }, 64 Spec: apps.DeploymentSpec{ 65 Selector: &meta.LabelSelector{ 66 MatchLabels: map[string]string{ 67 "match-label": "true", 68 }, 69 }, 70 Template: core.PodTemplateSpec{ 71 Spec: core.PodSpec{ 72 Containers: []core.Container{ 73 { 74 Name: "jujud", 75 Image: oldImagePath, 76 }, 77 }, 78 }, 79 }, 80 }, 81 }, v1.CreateOptions{}) 82 c.Assert(err, jc.ErrorIsNil) 83 84 c.Assert(modelOperatorUpgrade(operatorName, version.MustParse("9.9.9"), s.broker), jc.ErrorIsNil) 85 de, err := s.broker.Client().AppsV1().Deployments(s.broker.Namespace()). 86 Get(context.TODO(), operatorName, meta.GetOptions{}) 87 c.Assert(err, jc.ErrorIsNil) 88 c.Assert(de.Spec.Template.Spec.Containers[0].Image, gc.Equals, newImagePath) 89 90 c.Assert(de.Annotations[utils.AnnotationVersionKey(false)], gc.Equals, version.MustParse("9.9.9").String()) 91 c.Assert(de.Spec.Template.Annotations[utils.AnnotationVersionKey(false)], gc.Equals, version.MustParse("9.9.9").String()) 92 }