示例#1
0
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)
}
示例#2
0
文件: state_test.go 项目: jkary/core
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)
}
示例#3
0
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)
}
示例#4
0
文件: state_test.go 项目: jkary/core
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
}
示例#5
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() })
}