// TestPersistence tests the adding, reading, listing and removing // of files from the local storage. func (s *storageSuite) TestPersistence(c *gc.C) { listener, _, _ := startServer(c) defer listener.Close() stor := httpstorage.Client(listener.Addr().String()) names := []string{ "aa", "zzz/aa", "zzz/bb", } for _, name := range names { checkFileDoesNotExist(c, stor, name) checkPutFile(c, stor, name, []byte(name)) } checkList(c, stor, "", names) checkList(c, stor, "a", []string{"aa"}) checkList(c, stor, "zzz/", []string{"zzz/aa", "zzz/bb"}) storage2 := httpstorage.Client(listener.Addr().String()) for _, name := range names { checkFileHasContents(c, storage2, name, []byte(name)) } // remove the first file and check that the others remain. err := storage2.Remove(names[0]) c.Check(err, gc.IsNil) // check that it's ok to remove a file twice. err = storage2.Remove(names[0]) c.Check(err, gc.IsNil) // ... and check it's been removed in the other environment checkFileDoesNotExist(c, stor, names[0]) // ... and that the rest of the files are still around checkList(c, storage2, "", names[1:]) for _, name := range names[1:] { err := storage2.Remove(name) c.Assert(err, gc.IsNil) } // check they've all gone checkList(c, storage2, "", nil) // Check that RemoveAll works. checkRemoveAll(c, storage2) }
// Storage is specified in the Environ interface. func (env *localEnviron) Storage() storage.Storage { // localStorage is non-nil if we're running from the CLI if env.localStorage != nil { return env.localStorage } return httpstorage.Client(env.config.storageAddr()) }
func (s *storageSuite) TestList(c *gc.C) { listener, _, _ := startServer(c) defer listener.Close() stor := httpstorage.Client(listener.Addr().String()) names, err := storage.List(stor, "a/b/c") c.Assert(err, gc.IsNil) c.Assert(names, gc.HasLen, 0) }
// CreateLocalTestStorage returns the listener, which needs to be closed, and // the storage that is backed by a directory created in the running test's temp // directory. func CreateLocalTestStorage(c *gc.C) (closer io.Closer, stor storage.Storage, dataDir string) { dataDir = c.MkDir() underlying, err := filestorage.NewFileStorageWriter(dataDir) c.Assert(err, gc.IsNil) listener, err := httpstorage.Serve("localhost:0", underlying) c.Assert(err, gc.IsNil) stor = httpstorage.Client(listener.Addr().String()) closer = listener return }