func incrementSleepInBackground(fakeTimeService *fakeclock.FakeClock, delay time.Duration) chan struct{} { doneChan := make(chan struct{}) go func() { for { select { case <-doneChan: return default: if fakeTimeService.WatcherCount() > 0 { fakeTimeService.Increment(delay) Eventually(fakeTimeService.WatcherCount).Should(Equal(0)) } } } }() return doneChan }
. "github.com/cloudfoundry/bosh-init/ui" "bytes" "time" bosherr "github.com/cloudfoundry/bosh-init/internal/github.com/cloudfoundry/bosh-utils/errors" boshlog "github.com/cloudfoundry/bosh-init/internal/github.com/cloudfoundry/bosh-utils/logger" "github.com/cloudfoundry/bosh-init/internal/github.com/pivotal-golang/clock/fakeclock" ) var _ = Describe("Stage", func() { var ( logOutBuffer, logErrBuffer *bytes.Buffer logger boshlog.Logger stage Stage ui UI fakeTimeService *fakeclock.FakeClock uiOut, uiErr *bytes.Buffer ) BeforeEach(func() { uiOut = bytes.NewBufferString("") uiErr = bytes.NewBufferString("") logOutBuffer = bytes.NewBufferString("") logErrBuffer = bytes.NewBufferString("") logger = boshlog.NewWriterLogger(boshlog.LevelDebug, logOutBuffer, logErrBuffer) ui = NewWriterUI(uiOut, uiErr, logger) fakeTimeService = fakeclock.NewFakeClock(time.Now())
package fakeclock_test import ( "time" "github.com/cloudfoundry/bosh-init/internal/github.com/pivotal-golang/clock/fakeclock" . "github.com/cloudfoundry/bosh-init/internal/github.com/onsi/ginkgo" . "github.com/cloudfoundry/bosh-init/internal/github.com/onsi/gomega" ) var _ = Describe("FakeTicker", func() { const Δ = 10 * time.Millisecond var ( fakeClock *fakeclock.FakeClock initialTime time.Time ) BeforeEach(func() { initialTime = time.Date(2014, 1, 1, 3, 0, 30, 0, time.UTC) fakeClock = fakeclock.NewFakeClock(initialTime) }) It("provides a channel that receives the time at each interval", func() { ticker := fakeClock.NewTicker(10 * time.Second) timeChan := ticker.C() Consistently(timeChan, Δ).ShouldNot(Receive()) fakeClock.Increment(5 * time.Second) Consistently(timeChan, Δ).ShouldNot(Receive())
package fakeclock_test import ( "time" . "github.com/cloudfoundry/bosh-init/internal/github.com/onsi/ginkgo" . "github.com/cloudfoundry/bosh-init/internal/github.com/onsi/gomega" "github.com/cloudfoundry/bosh-init/internal/github.com/pivotal-golang/clock/fakeclock" ) var _ = Describe("FakeClock", func() { const Δ time.Duration = 10 * time.Millisecond var ( fakeClock *fakeclock.FakeClock initialTime time.Time ) BeforeEach(func() { initialTime = time.Date(2014, 1, 1, 3, 0, 30, 0, time.UTC) fakeClock = fakeclock.NewFakeClock(initialTime) }) Describe("Now", func() { It("returns the current time, w/o race conditions", func() { go fakeClock.Increment(time.Minute) Eventually(fakeClock.Now).Should(Equal(initialTime.Add(time.Minute))) }) }) Describe("Sleep", func() {
import ( "errors" . "github.com/cloudfoundry/bosh-init/internal/github.com/onsi/ginkgo" . "github.com/cloudfoundry/bosh-init/internal/github.com/onsi/gomega" "time" "github.com/cloudfoundry/bosh-init/internal/github.com/pivotal-golang/clock/fakeclock" ) var _ = Describe("SSH", func() { Describe("SSHRetryStrategy", func() { var ( sshRetryStrategy *SSHRetryStrategy fakeTimeService *fakeclock.FakeClock connectionRefusedTimeout time.Duration authFailureTimeout time.Duration startTime time.Time ) BeforeEach(func() { startTime = time.Now() fakeTimeService = fakeclock.NewFakeClock(startTime) connectionRefusedTimeout = 10 * time.Minute authFailureTimeout = 5 * time.Minute sshRetryStrategy = &SSHRetryStrategy{ ConnectionRefusedTimeout: connectionRefusedTimeout, AuthFailureTimeout: authFailureTimeout, TimeService: fakeTimeService, }