clock

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 31, 2026 License: AGPL-3.0 Imports: 3 Imported by: 0

Documentation

Overview

Package clock abstrai a passagem do tempo.

Nenhum código de produção do UpWatch chama time.Now diretamente: o scheduler, o worker de rollup e a máquina de estado de incidentes recebem um Clock. Em teste, Fake avança o tempo instantaneamente — sem isso, verificar "roda a cada 60s" ou "apaga dado de 8 dias atrás" exigiria sleeps reais, tornando a suíte lenta e instável.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Clock

type Clock interface {
	Now() time.Time
	NewTimer(d time.Duration) Timer
	After(d time.Duration) <-chan time.Time
}

Clock é a fonte de tempo injetada nos componentes.

func Real

func Real() Clock

Real devolve o relógio apoiado no pacote time, usado em produção.

type Fake

type Fake struct {
	// contains filtered or unexported fields
}

Fake é um Clock controlado manualmente pelos testes.

É seguro para uso concorrente: o scheduler mexe no relógio a partir de várias goroutines e uma corrida aqui contaminaria qualquer teste que dependa de tempo.

func NewFake

func NewFake(start time.Time) *Fake

NewFake cria um relógio falso posicionado em start.

func (*Fake) Advance

func (f *Fake) Advance(d time.Duration)

Advance move o relógio para frente e dispara todo timer vencido, em ordem de vencimento.

func (*Fake) After

func (f *Fake) After(d time.Duration) <-chan time.Time

After é o atalho equivalente a NewTimer(d).C().

func (*Fake) BlockUntil

func (f *Fake) BlockUntil(n int)

BlockUntil espera até haver pelo menos n timers pendentes.

Evita a corrida clássica de relógio falso: dar Advance antes de a goroutine sob teste ter registrado seu timer.

func (*Fake) BlockUntilDeadline

func (f *Fake) BlockUntilDeadline(at time.Time)

BlockUntilDeadline espera até haver um timer pendente que vença em at ou antes.

Contar timers não basta para sincronizar com um laço que mantém sempre um armado: BlockUntil(1) já estaria satisfeito pelo timer da volta anterior, e o Advance seguinte dispararia antes do rearme. Esperar pelo vencimento específico elimina essa ambiguidade.

func (*Fake) NewTimer

func (f *Fake) NewTimer(d time.Duration) Timer

NewTimer agenda um timer para daqui a d.

func (*Fake) Now

func (f *Fake) Now() time.Time

Now devolve o instante atual do relógio falso.

type Timer

type Timer interface {
	// C devolve o canal em que o vencimento é entregue.
	C() <-chan time.Time
	// Stop cancela o timer e informa se ele ainda estava pendente.
	Stop() bool
	// Reset reagenda o timer e informa se ele ainda estava pendente.
	Reset(d time.Duration) bool
}

Timer espelha o contrato de *time.Timer, com o mínimo que o UpWatch usa.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL