kubernetes-entrypoint/entrypoint/entrypoint_test.go
2017-02-13 12:40:05 +01:00

110 lines
2.3 KiB
Go

package entrypoint
import (
"fmt"
"io/ioutil"
"os"
"time"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
cli "github.com/stackanetes/kubernetes-entrypoint/client"
"github.com/stackanetes/kubernetes-entrypoint/logger"
"github.com/stackanetes/kubernetes-entrypoint/mocks"
)
const (
testNamespace = "test"
dummyResolverName = "dummy"
loggerInfoText = "Entrypoint INFO: "
)
var testEntrypoint EntrypointInterface
var testClient cli.ClientInterface
type dummyResolver struct {
name string
namespace string
}
func (d dummyResolver) IsResolved(entry EntrypointInterface) (bool, error) {
return true, nil
}
func (d dummyResolver) GetName() (name string) {
return d.name
}
func init() {
testClient = mocks.NewClient()
testEntrypoint = mocks.NewEntrypointInNamespace(testNamespace)
}
func registerNilResolver() {
Register(nil)
}
var _ = Describe("Entrypoint", func() {
dummy := dummyResolver{name: dummyResolverName}
BeforeEach(func() {
logger.Info.SetFlags(0)
logger.Warning.SetFlags(0)
logger.Error.SetFlags(0)
})
AfterEach(func() {
// Clear dependencies
dependencies = make([]Resolver, 0)
})
It("registers new nil resolver", func() {
defer GinkgoRecover()
Ω(registerNilResolver).Should(Panic())
})
It("registers new non-nil resolver", func() {
defer GinkgoRecover()
Register(dummy)
Expect(len(dependencies)).To(Equal(1))
})
It("checks Client() method", func() {
client := testEntrypoint.Client()
Expect(client).To(Equal(testClient))
})
It("checks Namespace() method", func() {
ns := testEntrypoint.GetNamespace()
Expect(ns).To(Equal(testNamespace))
})
It("resolves main entrypoint with a dummy dependency", func() {
defer GinkgoRecover()
// Set output logger to our reader
r, w, _ := os.Pipe()
tmp := os.Stdout
defer func() {
os.Stdout = tmp
}()
logger.Info.SetOutput(w)
os.Stdout = w
go func() {
mainEntrypoint := Entrypoint{client: mocks.NewClient(), namespace: "main"}
Register(dummy)
mainEntrypoint.Resolve()
w.Close()
}()
// Wait for resolver to finish
time.Sleep(5 * time.Second)
stdout, _ := ioutil.ReadAll(r)
Expect(string(stdout)).To(Equal(fmt.Sprintf("%sResolving %s\n%sDependency %s is resolved\n", loggerInfoText, dummyResolverName, loggerInfoText, dummyResolverName)))
})
})