Alterar a data do sistema para testar um aplicativo
É o truque mais antigo que existe: colocar o relógio do Windows na data que você quer testar, executar o programa e voltar o relógio. Funciona - e enquanto o relógio está mudado, ele muda também todo o resto da máquina.
O que realmente se move junto com o relógio
O relógio do sistema não é privado do programa que você testa. Cada processo, serviço e conversa de rede da máquina lê o mesmo, então uma mudança feita para um teste é uma mudança feita para todos.
| O que lê o relógio | O que acontece quando você o move |
|---|---|
| O logon no domínio e as pastas compartilhadas | O Kerberos tolera, por padrão, uma diferença de relógio de cinco minutos. Acima disso, seus tickets são recusados e o logon ou o acesso a um compartilhamento falha. |
| Certificados e HTTPS | Se um certificado é válido é decidido pelo relógio. Coloque-o depois da data de término de um certificado e toda conexão que depende dele é recusada como expirada; volte-o o suficiente e o certificado ainda não é válido. |
| O serviço Hora do Windows | Uma máquina ingressada em um domínio obtém a hora de um controlador de domínio e, por padrão, o serviço corrige o relógio seja qual for o tamanho da diferença. A data que você definiu pode ser desfeita enquanto você ainda testa. |
| Tudo o que registra uma hora | Arquivos, logs, linhas de banco de dados e e-mails enviados enquanto o relógio está mudado levam a data do teste e a mantêm depois que você devolve o relógio. |
| Software que lembra a data mais recente que viu | Alguns programas leem um relógio que anda para trás como adulteração - e é exatamente isso que acontece quando você restaura a data real. |
Quanto mais distante a data, mais disso você encontra. Uma máquina colocada em 2038 vê como expirado todo certificado emitido hoje. Testar 2038 sem isso →
Também é preciso um direito que a maioria das contas não tem: alterar a hora do sistema é um privilégio de administrador e, em uma máquina gerenciada, muitas vezes não é seu.
Quando alterar o relógio é a resposta certa
Uma máquina virtual que ninguém mais usa, com a própria sincronização de relógio desligada, é uma bancada de testes perfeitamente boa. Você a descarta depois, então nada do que ela registrou importa. Se você tem uma e o teste é de uma única data, é a coisa mais simples que funciona.
O problema começa quando é a máquina em que você trabalha, a que está no domínio ou a que também executa algo que não pode notar nada.
Mova o relógio de um único programa
A hora deslocada é visível para um processo e os filhos que ele inicia. Seu logon no domínio, seus certificados e o Windows Update nunca a veem, então nada da tabela acima se move - e não há nada a devolver depois.
# O aplicativo vê 31 de dezembro de 2027, 23:59:50. Todo o resto mantém a data real. chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50 # Começar dez minutos antes da meia-noite e rodar a velocidade x60 - a virada do ano chega em dez segundos chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60
Se uma data movida para um programa realmente chegou a ele não é algo para presumir. Toda sessão termina com um veredito e a lista dos canais de tempo que o programa realmente leu. Como saber se funcionou →
O que isto não substitui
- Um programa que pergunta a hora a um servidor está fora do alcance de uma substituição local. A sessão avisa quando vê o programa abrir uma conexão de rede, em vez de deixar você presumir que o teste passou.
- Testar o próprio sistema - um serviço que reage à mudança do relógio real, uma tarefa agendada, o comportamento do Windows em torno de uma mudança de relógio - não tem substituto para mudar o relógio, em uma máquina que você possa se permitir.