github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/state/migrations/remoteentities_test.go (about)

     1  // Copyright 2019 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package migrations
     5  
     6  import (
     7  	"github.com/juju/description/v5"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/names/v5"
    10  	jc "github.com/juju/testing/checkers"
    11  	"go.uber.org/mock/gomock"
    12  	gc "gopkg.in/check.v1"
    13  )
    14  
    15  type RemoteEntitiesExportSuite struct{}
    16  
    17  var _ = gc.Suite(&RemoteEntitiesExportSuite{})
    18  
    19  func (s *RemoteEntitiesExportSuite) TestExportRemoteEntities(c *gc.C) {
    20  	ctrl := gomock.NewController(c)
    21  	defer ctrl.Finish()
    22  
    23  	entities := []MigrationRemoteEntity{
    24  		s.remoteEntity(ctrl, "uuid3", "aaa-bbb", ""),
    25  		s.remoteEntity(ctrl, "uuid4", "ccc-yyy", "macaroon-5"),
    26  	}
    27  
    28  	source := NewMockRemoteEntitiesSource(ctrl)
    29  	source.EXPECT().AllRemoteEntities().Return(entities, nil)
    30  
    31  	model := NewMockRemoteEntitiesModel(ctrl)
    32  	model.EXPECT().AddRemoteEntity(description.RemoteEntityArgs{
    33  		ID:    "controller-uuid3",
    34  		Token: "aaa-bbb",
    35  	})
    36  	model.EXPECT().AddRemoteEntity(description.RemoteEntityArgs{
    37  		ID:    "controller-uuid4",
    38  		Token: "ccc-yyy",
    39  		// Note no macaroon.
    40  	})
    41  
    42  	migration := ExportRemoteEntities{}
    43  	err := migration.Execute(source, model)
    44  	c.Assert(err, jc.ErrorIsNil)
    45  }
    46  
    47  func (s *RemoteEntitiesExportSuite) TestExportRemoteEntitiesFailsGettingEntities(c *gc.C) {
    48  	ctrl := gomock.NewController(c)
    49  	defer ctrl.Finish()
    50  
    51  	source := NewMockRemoteEntitiesSource(ctrl)
    52  	source.EXPECT().AllRemoteEntities().Return(nil, errors.New("fail"))
    53  
    54  	model := NewMockRemoteEntitiesModel(ctrl)
    55  
    56  	migration := ExportRemoteEntities{}
    57  	err := migration.Execute(source, model)
    58  	c.Assert(err, gc.ErrorMatches, "fail")
    59  }
    60  
    61  func (s *RemoteEntitiesExportSuite) remoteEntity(
    62  	ctrl *gomock.Controller, id, token, macaroon string,
    63  ) *MockMigrationRemoteEntity {
    64  	entity := NewMockMigrationRemoteEntity(ctrl)
    65  	entity.EXPECT().ID().Return(names.NewControllerTag(id).String())
    66  	entity.EXPECT().Token().Return(token)
    67  	return entity
    68  }