func (test crashInfoBackoffTest) Test() { Context(fmt.Sprintf("when the crashCount is %d and the wait time is %s", test.CrashCount, test.WaitTime), func() { It("should NOT restart before the expected wait time", func() { calc := models.NewDefaultRestartCalculator() currentTimestamp := test.Since + test.WaitTime.Nanoseconds() - time.Second.Nanoseconds() Expect(test.ShouldRestartCrash(time.Unix(0, currentTimestamp), calc)).To(BeFalse()) }) It("should restart after the expected wait time", func() { calc := models.NewDefaultRestartCalculator() currentTimestamp := test.Since + test.WaitTime.Nanoseconds() Expect(test.ShouldRestartCrash(time.Unix(0, currentTimestamp), calc)).To(BeTrue()) }) }) }
func (test crashInfoAlwaysStartTest) Test() { Context(fmt.Sprintf("when the crashCount is %d", test.CrashCount), func() { It("should restart regardless of the wait time", func() { calc := models.NewDefaultRestartCalculator() theFuture := test.Since + time.Hour.Nanoseconds() Expect(test.ShouldRestartCrash(time.Unix(0, 0), calc)).To(BeTrue()) Expect(test.ShouldRestartCrash(time.Unix(0, test.Since), calc)).To(BeTrue()) Expect(test.ShouldRestartCrash(time.Unix(0, theFuture), calc)).To(BeTrue()) }) }) }
Expect(calc.ShouldRestart(0, 0, 3)).To(BeFalse()) Expect(calc.ShouldRestart(nanoseconds(30), 0, 3)).To(BeTrue()) Expect(calc.ShouldRestart(nanoseconds(30), 0, 4)).To(BeFalse()) Expect(calc.ShouldRestart(nanoseconds(59), 0, 4)).To(BeFalse()) Expect(calc.ShouldRestart(nanoseconds(60), 0, 4)).To(BeTrue()) Expect(calc.ShouldRestart(nanoseconds(60), 0, 5)).To(BeFalse()) Expect(calc.ShouldRestart(nanoseconds(118), 0, 5)).To(BeFalse()) Expect(calc.ShouldRestart(nanoseconds(119), 0, 5)).To(BeTrue()) }) }) Describe("Validate", func() { It("the default values are valid", func() { calc := models.NewDefaultRestartCalculator() Expect(calc.Validate()).NotTo(HaveOccurred()) }) It("invalid when MaxBackoffDuration is lower than the CrashBackoffMinDuration", func() { calc := models.NewRestartCalculator(models.DefaultImmediateRestarts, models.CrashBackoffMinDuration-time.Second, models.DefaultMaxRestarts) Expect(calc.Validate()).To(HaveOccurred()) }) }) }) var _ = Describe("ActualLRP", func() { Describe("ShouldRestartCrash", func() { Context("when the lpr is CRASHED", func() { const maxWaitTime = 16 * time.Minute var now = time.Now().UnixNano()