github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/state/bakerystorage/config_test.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package bakerystorage 5 6 import ( 7 "encoding/json" 8 9 "github.com/go-macaroon-bakery/macaroon-bakery/v3/bakery" 10 "github.com/juju/mgo/v3" 11 "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/mongo" 16 jujutesting "github.com/juju/juju/testing" 17 ) 18 19 type ConfigSuite struct { 20 jujutesting.BaseSuite 21 testing.Stub 22 23 collectionGetter func(name string) (mongo.Collection, func()) 24 collection mockCollection 25 closeCollection func() 26 27 bakeryDocResult bakeryConfigDoc 28 } 29 30 var _ = gc.Suite(&ConfigSuite{}) 31 32 func (s *ConfigSuite) SetUpTest(c *gc.C) { 33 s.BaseSuite.SetUpTest(c) 34 s.Stub.ResetCalls() 35 s.collection = mockCollection{ 36 Stub: &s.Stub, 37 one: func(q *mockQuery, result *interface{}) error { 38 id := q.id.(string) 39 if id != "bakeryConfig" { 40 return mgo.ErrNotFound 41 } 42 *(*result).(*bakeryConfigDoc) = s.bakeryDocResult 43 return nil 44 }, 45 } 46 s.closeCollection = func() { 47 s.AddCall("Close") 48 s.PopNoErr() 49 } 50 s.collectionGetter = func(collection string) (mongo.Collection, func()) { 51 s.AddCall("GetCollection", collection) 52 s.PopNoErr() 53 return &s.collection, s.closeCollection 54 } 55 } 56 57 func (s *ConfigSuite) TestInitialiseBakeryConfigOp(c *gc.C) { 58 bakeryConfig := NewBakeryConfig("test", s.collectionGetter) 59 op, err := bakeryConfig.InitialiseBakeryConfigOp() 60 c.Assert(err, jc.ErrorIsNil) 61 c.Assert(op.C, gc.Equals, "test") 62 63 doc, ok := op.Insert.(*bakeryConfigDoc) 64 c.Assert(ok, jc.IsTrue) 65 var key bakery.KeyPair 66 err = json.Unmarshal([]byte(doc.LocalUsersKey), &key) 67 c.Assert(err, jc.ErrorIsNil) 68 err = json.Unmarshal([]byte(doc.OffersThirdPartyKey), &key) 69 c.Assert(err, jc.ErrorIsNil) 70 } 71 72 func (s *ConfigSuite) TestLocalUsersKey(c *gc.C) { 73 s.bakeryDocResult = bakeryConfigDoc{ 74 LocalUsersKey: `{"public":"XXy70HKjZ6SbrW0h6zb5xkQYzUAvarTDFrl4//7wgUo=","private":"AwHI3v9AQjbAzhZx0JBjqaPYhVJ5Ksi+PWog4rNwS9Y="}`, 75 LocalUsersThirdPartyKey: "x", 76 ExternalUsersThirdPartyKey: "x", 77 OffersThirdPartyKey: "x", 78 } 79 bakeryConfig := NewBakeryConfig("test", s.collectionGetter) 80 key, err := bakeryConfig.GetLocalUsersKey() 81 c.Assert(err, jc.ErrorIsNil) 82 keyBytes, err := json.Marshal(key) 83 c.Assert(err, jc.ErrorIsNil) 84 85 s.CheckCalls(c, []testing.StubCall{ 86 {"GetCollection", []interface{}{"test"}}, 87 {"FindId", []interface{}{"bakeryConfig"}}, 88 {"One", []interface{}{&bakeryConfigDoc{ 89 LocalUsersKey: string(keyBytes), 90 LocalUsersThirdPartyKey: "x", 91 ExternalUsersThirdPartyKey: "x", 92 OffersThirdPartyKey: "x", 93 }}}, 94 {"Close", nil}, 95 }) 96 } 97 98 func (s *ConfigSuite) TestLocalUsersThirdPartyKey(c *gc.C) { 99 s.bakeryDocResult = bakeryConfigDoc{ 100 LocalUsersKey: "x", 101 LocalUsersThirdPartyKey: `{"public":"XXy70HKjZ6SbrW0h6zb5xkQYzUAvarTDFrl4//7wgUo=","private":"AwHI3v9AQjbAzhZx0JBjqaPYhVJ5Ksi+PWog4rNwS9Y="}`, 102 ExternalUsersThirdPartyKey: "x", 103 OffersThirdPartyKey: "x", 104 } 105 bakeryConfig := NewBakeryConfig("test", s.collectionGetter) 106 key, err := bakeryConfig.GetLocalUsersThirdPartyKey() 107 c.Assert(err, jc.ErrorIsNil) 108 keyBytes, err := json.Marshal(key) 109 c.Assert(err, jc.ErrorIsNil) 110 111 s.CheckCalls(c, []testing.StubCall{ 112 {"GetCollection", []interface{}{"test"}}, 113 {"FindId", []interface{}{"bakeryConfig"}}, 114 {"One", []interface{}{&bakeryConfigDoc{ 115 LocalUsersKey: "x", 116 LocalUsersThirdPartyKey: string(keyBytes), 117 ExternalUsersThirdPartyKey: "x", 118 OffersThirdPartyKey: "x", 119 }}}, 120 {"Close", nil}, 121 }) 122 } 123 124 func (s *ConfigSuite) TestExternalUsersThirdPartyKey(c *gc.C) { 125 s.bakeryDocResult = bakeryConfigDoc{ 126 LocalUsersKey: "x", 127 LocalUsersThirdPartyKey: "x", 128 ExternalUsersThirdPartyKey: `{"public":"XXy70HKjZ6SbrW0h6zb5xkQYzUAvarTDFrl4//7wgUo=","private":"AwHI3v9AQjbAzhZx0JBjqaPYhVJ5Ksi+PWog4rNwS9Y="}`, 129 OffersThirdPartyKey: "x", 130 } 131 bakeryConfig := NewBakeryConfig("test", s.collectionGetter) 132 key, err := bakeryConfig.GetExternalUsersThirdPartyKey() 133 c.Assert(err, jc.ErrorIsNil) 134 keyBytes, err := json.Marshal(key) 135 c.Assert(err, jc.ErrorIsNil) 136 137 s.CheckCalls(c, []testing.StubCall{ 138 {"GetCollection", []interface{}{"test"}}, 139 {"FindId", []interface{}{"bakeryConfig"}}, 140 {"One", []interface{}{&bakeryConfigDoc{ 141 LocalUsersKey: "x", 142 LocalUsersThirdPartyKey: "x", 143 ExternalUsersThirdPartyKey: string(keyBytes), 144 OffersThirdPartyKey: "x", 145 }}}, 146 {"Close", nil}, 147 }) 148 } 149 150 func (s *ConfigSuite) TestOffersThirdPartyKey(c *gc.C) { 151 s.bakeryDocResult = bakeryConfigDoc{ 152 LocalUsersKey: "x", 153 LocalUsersThirdPartyKey: "x", 154 ExternalUsersThirdPartyKey: "x", 155 OffersThirdPartyKey: `{"public":"XXy70HKjZ6SbrW0h6zb5xkQYzUAvarTDFrl4//7wgUo=","private":"AwHI3v9AQjbAzhZx0JBjqaPYhVJ5Ksi+PWog4rNwS9Y="}`, 156 } 157 bakeryConfig := NewBakeryConfig("test", s.collectionGetter) 158 key, err := bakeryConfig.GetOffersThirdPartyKey() 159 c.Assert(err, jc.ErrorIsNil) 160 keyBytes, err := json.Marshal(key) 161 c.Assert(err, jc.ErrorIsNil) 162 163 s.CheckCalls(c, []testing.StubCall{ 164 {"GetCollection", []interface{}{"test"}}, 165 {"FindId", []interface{}{"bakeryConfig"}}, 166 {"One", []interface{}{&bakeryConfigDoc{ 167 LocalUsersKey: "x", 168 LocalUsersThirdPartyKey: "x", 169 ExternalUsersThirdPartyKey: "x", 170 OffersThirdPartyKey: string(keyBytes), 171 }}}, 172 {"Close", nil}, 173 }) 174 }