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  }