func (app Application) StartMessageGC() { messageLifetime := 24 * time.Hour db := app.mother.Database() messagesRepo := app.mother.MessagesRepo() pollingInterval := 1 * time.Hour logger := log.New(os.Stdout, "", 0) messageGC := postal.NewMessageGC(messageLifetime, db, messagesRepo, pollingInterval, logger) messageGC.Run() }
BeforeEach(func() { loggerBuffer = bytes.NewBuffer([]byte{}) logger := log.New(loggerBuffer, "", 0) conn = mocks.NewConnection() database = mocks.NewDatabase() database.ConnectionCall.Returns.Connection = conn repo = mocks.NewMessagesRepo() lifetime = 2 * time.Minute pollingInterval = 500 * time.Millisecond oldMessageID = "that-message" newMessageID = "this-message" messageGC = postal.NewMessageGC(lifetime, database, repo, pollingInterval, logger) }) Describe("Run", func() { It("It calls collect every passed in duration", func() { messageGC.Run() Eventually(func() int { return repo.DeleteBeforeCall.CallCount }).Should(BeNumerically(">=", 2)) call1 := repo.DeleteBeforeCall.InvocationTimes[0] call2 := repo.DeleteBeforeCall.InvocationTimes[1] Expect(call2).To(BeTemporally(">", call1.Add(pollingInterval-50*time.Millisecond))) Expect(call2).To(BeTemporally("<", call1.Add(pollingInterval+50*time.Millisecond))) })