github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/uniter/storage/mockstateopssuite_test.go (about)

     1  // Copyright 2020 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package storage_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/testing/checkers"
     9  	jc "github.com/juju/testing/checkers"
    10  	"go.uber.org/mock/gomock"
    11  	"gopkg.in/check.v1"
    12  	gc "gopkg.in/check.v1"
    13  	"gopkg.in/yaml.v2"
    14  
    15  	"github.com/juju/juju/rpc/params"
    16  	"github.com/juju/juju/worker/uniter/operation/mocks"
    17  	"github.com/juju/juju/worker/uniter/storage"
    18  )
    19  
    20  type mockStateOpsSuite struct {
    21  	storSt *storage.State
    22  
    23  	mockStateOps *mocks.MockUnitStateReadWriter
    24  }
    25  
    26  func (s *mockStateOpsSuite) setupMocks(c *gc.C) *gomock.Controller {
    27  	ctlr := gomock.NewController(c)
    28  	s.mockStateOps = mocks.NewMockUnitStateReadWriter(ctlr)
    29  	return ctlr
    30  }
    31  
    32  func (s *mockStateOpsSuite) expectSetState(c *gc.C, errStr string) {
    33  	data, err := yaml.Marshal(storage.Storage(s.storSt))
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	strStorageState := string(data)
    36  	if errStr != "" {
    37  		err = errors.New(`validation of uniter state: invalid operation state: ` + errStr)
    38  	}
    39  
    40  	mExp := s.mockStateOps.EXPECT()
    41  	mExp.SetState(unitStateMatcher{c: c, expected: strStorageState}).Return(err)
    42  }
    43  
    44  func (s *mockStateOpsSuite) expectSetStateEmpty(c *gc.C) {
    45  	var strStorageState string
    46  	mExp := s.mockStateOps.EXPECT()
    47  	mExp.SetState(unitStateMatcher{c: c, expected: strStorageState}).Return(nil)
    48  }
    49  
    50  func (s *mockStateOpsSuite) expectState(c *check.C) {
    51  	data, err := yaml.Marshal(storage.Storage(s.storSt))
    52  	c.Assert(err, checkers.ErrorIsNil)
    53  	strStorageState := string(data)
    54  
    55  	mExp := s.mockStateOps.EXPECT()
    56  	mExp.State().Return(params.UnitStateResult{StorageState: strStorageState}, nil)
    57  }
    58  
    59  func (s *mockStateOpsSuite) expectStateNotFound() {
    60  	mExp := s.mockStateOps.EXPECT()
    61  	mExp.State().Return(params.UnitStateResult{StorageState: ""}, nil)
    62  }
    63  
    64  type unitStateMatcher struct {
    65  	c        *gc.C
    66  	expected string
    67  }
    68  
    69  func (m unitStateMatcher) Matches(x interface{}) bool {
    70  	obtained, ok := x.(params.SetUnitStateArg)
    71  	if !ok {
    72  		return false
    73  	}
    74  
    75  	if obtained.StorageState == nil || m.expected != *obtained.StorageState {
    76  		m.c.Fatalf("unitStateMatcher: expected (%s) obtained (%s)", m.expected, *obtained.StorageState)
    77  		return false
    78  	}
    79  
    80  	return true
    81  }
    82  
    83  func (m unitStateMatcher) String() string {
    84  	return "Match the contents of the StorageState pointer in params.SetUnitStateArg"
    85  }