func (s *storageSuite) TestClientTLS(c *gc.C) { listener, _, storageDir := startServerTLS(c) defer listener.Close() stor, err := httpstorage.ClientTLS(listener.Addr().String(), coretesting.CACert, testAuthkey) c.Assert(err, gc.IsNil) data := []byte("hello") err = ioutil.WriteFile(filepath.Join(storageDir, "filename"), data, 0644) c.Assert(err, gc.IsNil) names, err := storage.List(stor, "filename") c.Assert(err, gc.IsNil) c.Assert(names, gc.DeepEquals, []string{"filename"}) checkFileHasContents(c, stor, "filename", data) // Put, Remove and RemoveAll should all succeed. checkPutFile(c, stor, "filenamethesecond", data) checkFileHasContents(c, stor, "filenamethesecond", data) c.Assert(stor.Remove("filenamethesecond"), gc.IsNil) c.Assert(stor.RemoveAll(), gc.IsNil) }
func (e *manualEnviron) SetConfig(cfg *config.Config) error { e.cfgmutex.Lock() defer e.cfgmutex.Unlock() _, err := manualProvider{}.validate(cfg, e.cfg.Config) if err != nil { return err } envConfig := newEnvironConfig(cfg, cfg.UnknownAttrs()) // Set storage. If "use-sshstorage" is true then use the SSH storage. // Otherwise, use HTTP storage. // // We don't change storage once it's been set. Storage parameters // are fixed at bootstrap time, and it is not possible to change // them. if e.storage == nil { var stor storage.Storage if envConfig.useSSHStorage() { storageDir := e.StorageDir() storageTmpdir := path.Join(agent.DefaultPaths.DataDir, storageTmpSubdir) stor, err = newSSHStorage("ubuntu@"+e.cfg.bootstrapHost(), storageDir, storageTmpdir) if err != nil { return fmt.Errorf("initialising SSH storage failed: %v", err) } } else { caCertPEM, ok := envConfig.CACert() if !ok { // should not be possible to validate base config return fmt.Errorf("ca-cert not set") } authkey := envConfig.storageAuthKey() stor, err = httpstorage.ClientTLS(envConfig.storageAddr(), caCertPEM, authkey) if err != nil { return fmt.Errorf("initialising HTTPS storage failed: %v", err) } } e.storage = stor } e.cfg = envConfig return nil }
func (s *storageSuite) TestClientTLSInvalidAuth(c *gc.C) { listener, _, storageDir := startServerTLS(c) defer listener.Close() const invalidAuthkey = testAuthkey + "!" stor, err := httpstorage.ClientTLS(listener.Addr().String(), coretesting.CACert, invalidAuthkey) c.Assert(err, gc.IsNil) // Get and List should succeed. data := []byte("hello") err = ioutil.WriteFile(filepath.Join(storageDir, "filename"), data, 0644) c.Assert(err, gc.IsNil) names, err := storage.List(stor, "filename") c.Assert(err, gc.IsNil) c.Assert(names, gc.DeepEquals, []string{"filename"}) checkFileHasContents(c, stor, "filename", data) // Put, Remove and RemoveAll should all fail. const authErrorPattern = ".*401 Unauthorized" err = putFile(c, stor, "filenamethesecond", data) c.Assert(err, gc.ErrorMatches, authErrorPattern) c.Assert(stor.Remove("filenamethesecond"), gc.ErrorMatches, authErrorPattern) c.Assert(stor.RemoveAll(), gc.ErrorMatches, authErrorPattern) }