Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(849)

Unified Diff: environs/configstore/interface_test.go

Issue 13489044: environs/configstore: memory-based store
Patch Set: environs/configstore: memory-based store Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « environs/configstore/disk_test.go ('k') | environs/configstore/mem.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: environs/configstore/interface_test.go
=== added file 'environs/configstore/interface_test.go'
--- environs/configstore/interface_test.go 1970-01-01 00:00:00 +0000
+++ environs/configstore/interface_test.go 2013-09-19 21:59:37 +0000
@@ -0,0 +1,133 @@
+// Copyright 2013 Canonical Ltd.
+// Licensed under the AGPLv3, see LICENCE file for details.
+
+package configstore_test
+
+import (
+ gc "launchpad.net/gocheck"
+
+ "launchpad.net/juju-core/environs"
+ jc "launchpad.net/juju-core/testing/checkers"
+)
+
+// interfaceSuite defines a set of tests on a ConfigStorage
+// implementation, independent of the implementation itself.
+// The NewStore field must be set up to return a ConfigStorage
+// instance of the type to be tested.
+type interfaceSuite struct {
+ NewStore func(c *gc.C) environs.ConfigStorage
+}
+
+func (s *interfaceSuite) TestCreate(c *gc.C) {
+ store := s.NewStore(c)
+ info, err := store.CreateInfo("someenv")
+ c.Assert(err, gc.IsNil)
+ c.Assert(info.APIEndpoint(), gc.DeepEquals, environs.APIEndpoint{})
+ c.Assert(info.APICredentials(), gc.DeepEquals, environs.APICredentials{})
+ c.Assert(info.Initialized(), jc.IsFalse)
+
+ // Check that we can't create it twice.
+ info, err = store.CreateInfo("someenv")
+ c.Assert(err, gc.Equals, environs.ErrEnvironInfoAlreadyExists)
+ c.Assert(info, gc.IsNil)
+
+ // Check that we can read it again.
+ info, err = store.ReadInfo("someenv")
+ c.Assert(err, gc.IsNil)
+ c.Assert(info.Initialized(), jc.IsFalse)
+}
+
+func (s *interfaceSuite) TestSetAPIEndpointAndCredentials(c *gc.C) {
+ store := s.NewStore(c)
+
+ info, err := store.CreateInfo("someenv")
+ c.Assert(err, gc.IsNil)
+
+ expectEndpoint := environs.APIEndpoint{
+ Addresses: []string{"example.com"},
+ CACert: "a cert",
+ }
+ info.SetAPIEndpoint(expectEndpoint)
+ c.Assert(info.APIEndpoint(), gc.DeepEquals, expectEndpoint)
+
+ expectCreds := environs.APICredentials{
+ User: "foobie",
+ Password: "bletch",
+ }
+ info.SetAPICredentials(expectCreds)
+ c.Assert(info.APICredentials(), gc.DeepEquals, expectCreds)
+}
+
+func (s *interfaceSuite) TestWrite(c *gc.C) {
+ store := s.NewStore(c)
+
+ // Create the info.
+ info, err := store.CreateInfo("someenv")
+ c.Assert(err, gc.IsNil)
+
+ // Set it up with some actual data and write it out.
+ expectCreds := environs.APICredentials{
+ User: "foobie",
+ Password: "bletch",
+ }
+ info.SetAPICredentials(expectCreds)
+
+ expectEndpoint := environs.APIEndpoint{
+ Addresses: []string{"example.com"},
+ CACert: "a cert",
+ }
+ info.SetAPIEndpoint(expectEndpoint)
+
+ err = info.Write()
+ c.Assert(err, gc.IsNil)
+ c.Assert(info.Initialized(), jc.IsTrue)
+
+ // Check we can read the information back
+ info, err = store.ReadInfo("someenv")
+ c.Assert(err, gc.IsNil)
+ c.Assert(info.APICredentials(), gc.DeepEquals, expectCreds)
+ c.Assert(info.APIEndpoint(), gc.DeepEquals, expectEndpoint)
+
+ // Change the information and write it again.
+ expectCreds.User = "arble"
+ info.SetAPICredentials(expectCreds)
+ err = info.Write()
+ c.Assert(err, gc.IsNil)
+
+ // Check we can read the information back
+ info, err = store.ReadInfo("someenv")
+ c.Assert(err, gc.IsNil)
+ c.Assert(info.APICredentials(), gc.DeepEquals, expectCreds)
+}
+
+func (s *interfaceSuite) TestDestroy(c *gc.C) {
+ store := s.NewStore(c)
+
+ info, err := store.CreateInfo("someenv")
+ c.Assert(err, gc.IsNil)
+
+ err = info.Destroy()
+ c.Assert(err, gc.IsNil)
+
+ err = info.Destroy()
+ c.Assert(err, gc.ErrorMatches, "environment info has already been removed")
+
+ info, err = store.CreateInfo("someenv")
+ c.Assert(err, gc.IsNil)
+}
+
+func (s *interfaceSuite) TestNoBleedThrough(c *gc.C) {
+ store := s.NewStore(c)
+
+ info, err := store.CreateInfo("someenv")
+ c.Assert(err, gc.IsNil)
+
+ info.SetAPICredentials(environs.APICredentials{User: "foo"})
+ info.SetAPIEndpoint(environs.APIEndpoint{CACert: "blah"})
+
+ info1, err := store.ReadInfo("someenv")
+ c.Assert(err, gc.IsNil)
+ c.Assert(info1.Initialized(), jc.IsFalse)
+ c.Assert(info1.APICredentials(), gc.DeepEquals, environs.APICredentials{})
+ c.Assert(info1.APIEndpoint(), gc.DeepEquals, environs.APIEndpoint{})
+}
« no previous file with comments | « environs/configstore/disk_test.go ('k') | environs/configstore/mem.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b