func (s *interruptibleStorageSuite) TestInterruptStorageConcurrently(c *gc.C) {
	closer, stor, _ := envtesting.CreateLocalTestStorage(c)
	s.AddCleanup(func(c *gc.C) { closer.Close() })
	reader := &errorReader{
		close: make(chan struct{}),
		wait:  make(chan struct{}),
		err:   fmt.Errorf("read failed"),
	}
	istor := bootstrap.NewInterruptibleStorage(stor, reader.close)
	err := istor.Put("name", reader, 3)
	c.Assert(err, gc.ErrorMatches, ".*: interrupted")
	c.Assert(reader.called, gc.Equals, 0) // reader is blocked
	close(reader.wait)
}
Example #2
0
func (suite *StateSuite) TestDeleteStateFile(c *gc.C) {
	closer, stor, dataDir := envtesting.CreateLocalTestStorage(c)
	defer closer.Close()

	err := bootstrap.DeleteStateFile(stor)
	c.Assert(err, gc.IsNil) // doesn't exist, juju don't care

	_, err = bootstrap.CreateStateFile(stor)
	c.Assert(err, gc.IsNil)
	_, err = os.Stat(filepath.Join(dataDir, bootstrap.StateFile))
	c.Assert(err, gc.IsNil)

	err = bootstrap.DeleteStateFile(stor)
	c.Assert(err, gc.IsNil)
	_, err = os.Stat(filepath.Join(dataDir, bootstrap.StateFile))
	c.Assert(err, jc.Satisfies, os.IsNotExist)
}
func (s *interruptibleStorageSuite) TestInterruptStorage(c *gc.C) {
	closer, stor, _ := envtesting.CreateLocalTestStorage(c)
	s.AddCleanup(func(c *gc.C) { closer.Close() })
	reader := &errorReader{
		err: fmt.Errorf("read failed"),
	}
	interrupted := make(chan struct{})
	istor := bootstrap.NewInterruptibleStorage(stor, interrupted)

	err := istor.Put("name", reader, 3)
	c.Assert(err, gc.ErrorMatches, ".*: read failed")
	c.Assert(reader.called, gc.Equals, 1)

	// If the channel is already closed, then the
	// underlying reader is never deferred to.
	close(interrupted)
	err = istor.Put("name", reader, 3)
	c.Assert(err, gc.ErrorMatches, ".*: interrupted")
	c.Assert(reader.called, gc.Equals, 1)
}
Example #4
0
func (suite *StateSuite) newStorageWithDataDir(c *gc.C) (storage.Storage, string) {
	closer, stor, dataDir := envtesting.CreateLocalTestStorage(c)
	suite.AddCleanup(func(*gc.C) { closer.Close() })
	envtesting.UploadFakeTools(c, stor)
	return stor, dataDir
}
Example #5
0
func newStorage(suite cleaner, c *gc.C) storage.Storage {
	closer, stor, _ := envtesting.CreateLocalTestStorage(c)
	suite.AddCleanup(func(*gc.C) { closer.Close() })
	envtesting.UploadFakeTools(c, stor)
	return stor
}
Example #6
0
// setDummyStorage injects the local provider's fake storage implementation
// into the given environment, so that tests can manipulate storage as if it
// were real.
func (s *instanceTypeSuite) setDummyStorage(c *gc.C, env *azureEnviron) {
	closer, storage, _ := testing.CreateLocalTestStorage(c)
	env.storage = storage
	s.AddCleanup(func(c *gc.C) { closer.Close() })
}
Example #7
0
// setDummyStorage injects the local provider's fake storage implementation
// into the given environment, so that tests can manipulate storage as if it
// were real.
func (s *bootstrapSuite) setDummyStorage(c *gc.C, env *bootstrapEnviron) {
	closer, stor, _ := envtesting.CreateLocalTestStorage(c)
	env.storage = stor
	envtesting.UploadFakeTools(c, env.storage)
	s.AddCleanup(func(c *gc.C) { closer.Close() })
}