kubectl/pkg/framework/test/temp_dir_manager_test.go

112 lines
2.8 KiB
Go

package test_test
import (
"fmt"
. "k8s.io/kubectl/pkg/framework/test"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("TempDirManager", func() {
var (
manager *TempDirManager
removerError error
createError error
managedDirCount int
separateDirCounter int
)
BeforeEach(func() {
managedDirCount = 0
separateDirCounter = 0
createError = nil
removerError = nil
manager = NewTempDirManager()
manager.Maker = func(dir, prefix string) (string, error) {
managedDirCount += 1
separateDirCounter += 1
return fmt.Sprintf("%d-%s-%s", separateDirCounter, dir, prefix), createError
}
manager.Remover = func(dir string) error {
managedDirCount -= 1
return removerError
}
})
It("can creates and remove directories", func() {
Expect(managedDirCount).To(Equal(0))
manager.Create()
Expect(managedDirCount).To(Equal(1))
manager.Destroy()
Expect(managedDirCount).To(Equal(0))
})
Context("when I call Create() multiple times on the same manager", func() {
It("returns the same directory every time", func() {
var dir1, dir2 string
var err error
Expect(managedDirCount).To(Equal(0))
dir1, err = manager.Create()
Expect(err).NotTo(HaveOccurred())
Expect(managedDirCount).To(Equal(1))
dir2, err = manager.Create()
Expect(err).NotTo(HaveOccurred())
Expect(managedDirCount).To(Equal(1))
Expect(dir1).To(Equal(dir2))
})
It("deletes the managed directory as soon as Destroy() is called even once", func() {
var err error
Expect(managedDirCount).To(Equal(0))
_, err = manager.Create()
Expect(err).NotTo(HaveOccurred())
_, err = manager.Create()
Expect(err).NotTo(HaveOccurred())
Expect(managedDirCount).To(Equal(1))
manager.Destroy()
Expect(managedDirCount).To(Equal(0))
})
})
Context("when I call Destroy() without calling create first", func() {
It("does nothing", func() {
Expect(managedDirCount).To(Equal(0))
manager.Destroy()
Expect(managedDirCount).To(Equal(0))
})
})
Context("when the remover returns an error", func() {
JustBeforeEach(func() {
removerError = fmt.Errorf("Error on removing dir")
})
It("handles that error depending on whether Create() has been called", func() {
By("avoiding the error if Create() has not been called")
err := manager.Destroy()
Expect(err).NotTo(HaveOccurred())
By("propagating the error if Create() has been called")
manager.Create()
err = manager.Destroy()
Expect(err).To(MatchError("Error on removing dir"))
})
})
Context("when the creater returns an error", func() {
JustBeforeEach(func() {
createError = fmt.Errorf("Error on creating dir")
})
It("bubbles up the error", func() {
_, err := manager.Create()
Expect(err).To(MatchError("Error on creating dir"))
})
})
})