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 }