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.
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 (*Fake) Advance ¶
Advance move o relógio para frente e dispara todo timer vencido, em ordem de vencimento.
func (*Fake) BlockUntil ¶
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 ¶
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.
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.