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  }