Perguntas e respostas
Respostas curtas, inclusive as sobre o que esta ferramenta não faz.
Ele altera o relógio do meu computador?
Não, e nunca vai - esse é o objetivo da ferramenta. A hora deslocada só é visível para um processo e para os filhos que ele inicia. Seu login de domínio, seus certificados, o Windows Update e todos os outros aplicativos veem a data real o tempo todo.
Preciso de direitos de administrador?
Não para executá-lo. Os zips não precisam de instalador, não gravam nada no registro e rodam
de uma pasta que você pode levar num pen drive. O .msi opcional precisa de
direitos de administrador uma vez, para instalar, porque ele instala para todas as contas da
máquina.
Vai funcionar com o meu aplicativo?
A resposta honesta é que nenhuma ferramenta desse tipo pode prometer isso de antemão - então esta mede. Toda sessão termina com um veredito (funciona, funciona parcialmente, não funciona), a lista de canais de tempo que o aplicativo realmente leu, com a contagem de chamadas de cada um, e a lista de canais que não foram cobertos.
Um aplicativo pode ler o relógio por um caminho que nada interceptou - de um servidor, de um banco de dados, por uma camada do ambiente de execução. Quando isso acontece, você é avisado, em vez de ficar presumindo que o teste passou.
Funciona com aplicativos .NET, Java e Python?
Em parte, e as diferenças importam. Os três estão marcados como experimentais: funcionam nos alvos de teste, não foram testados amplamente, e a auditoria integrada é a sua fonte da verdade, não este parágrafo.
- .NET - o relógio de parede e o fuso horário da sessão são cobertos.
Stopwatchcontinua no contador de alta resolução real, a menos que você ative o escalonamento dele. - Java - o relógio de parede, o tempo decorrido e o fuso horário da sessão são
cobertos. O fuso chega como um deslocamento fixo, com nome como
GMT+05:30. - Python -
time.timeedatetimesão cobertos.perf_counter, emonotonica partir do Python 3.13, ficam no contador de alta resolução, a menos que você ative o escalonamento.
Funciona com aplicativos Electron e Chromium?
Sim, por outro mecanismo. O relógio deles vive em um renderizador isolado que a injeção não alcança, então o aplicativo é iniciado com uma porta de depuração e um perfil limpo e descartável, e as próprias APIs de tempo do JavaScript dele são colocadas no relógio da sessão - inclusive dentro dos Web Workers, onde o temporizador muitas vezes realmente mora.
Um limite que vale conhecer: o processo principal de um aplicativo Electron roda no Node, que a sessão não alcança, então ele mantém o relógio real, e o relatório diz isso. As páginas e seus workers leem o fuso horário da sessão.
Como funciona o modo Chromium e Electron - o que ele alcança, o que não alcança e por que a porta de depuração é a parte a que se deve estar atento.
Posso fazer o tempo correr mais rápido que o tempo real?
Sim. Escolha um multiplicador inteiro e o relógio do aplicativo corre nessa velocidade -
x1440 transforma um dia em um minuto, então um teste de 30 dias expira em cerca de
meia hora. Você também pode congelar o relógio ou saltar para frente e para trás no meio da
sessão.
Contagens regressivas e temporizadores ficam em outro eixo, e acelerá-los é outra chave, porque escaloná-los muda um comportamento do qual muitos aplicativos dependem.
Posso mudar só o fuso horário, sem mudar a data?
Sim. A sessão carrega o próprio deslocamento fixo, visível para aquele processo enquanto o fuso do sistema fica exatamente onde estava. É a parte que a maioria das ferramentas pula, e é assim que se reproduz o bug que só aparece para o cliente cinco fusos horários adiante.
E o horário de verão?
O fuso da sessão é um deslocamento fixo, sem horário de verão. Uma sessão configurada para a Polônia permanece no deslocamento que você escolheu, quer o relógio marque março ou julho, então uma execução que cruza uma transição real se desvia uma hora do que aquele fuso realmente mostraria.
Por isso, forçar um aplicativo a atravessar uma transição de horário de verão ainda não é algo que esta ferramenta faz, e a calculadora de datas diz isso em vez de adivinhar.
Por que meu antivírus alerta?
Porque injetar uma biblioteca em outro processo é uma técnica legítima e documentada do Windows que
o malware também usa. É um falso positivo disparado pela técnica, não por qualquer coisa que a
ferramenta faça na sua máquina. A biblioteca injetada é chrono_hook.dll, compilada a
partir do código-fonte público sob a GPL-3.0, e você pode recompilá-la você mesmo. O modo Chromium
e Electron não injeta nada.
A página de download diz o que fazer a respeito.
Isto serve para estender um período de teste ou burlar uma licença?
Não, e não foi feito para isso. O Chrono Mock serve para testar software pelo qual você é responsável - a expiração da sua própria licença, a sua própria lógica de renovação, o seu próprio relatório de fim de mês. Nenhum exemplo, cenário ou página aqui jamais vai demonstrar como estender o período de teste de software alheio.
Software com proteção de licença é, na verdade, o caso com mais chance de derrotar esta ferramenta: o código antiadulteração costuma ler a hora por caminhos escolhidos de propósito para serem difíceis de interceptar, e retroceder um relógio é uma condição que esse software é escrito para detectar. Está planejado um recurso no sentido oposto - um modo que executa uma série de manipulações de tempo contra o seu próprio aplicativo e relata quais a sua proteção detectou.
Posso usar em integração contínua?
Sim. A versão de linha de comando é um download separado de cerca de 2,4 MB, sem ambiente de
execução para instalar. Todo comando entende --json e termina com um código sobre o
qual um pipeline pode ramificar, e uma sessão pode gravar a evidência em um arquivo.
Qual a diferença para o RunAsDate?
O RunAsDate intercepta cinco funções do relógio de parede e faz isso bem. Esta ferramenta observa 44 canais de tempo e põe 30 deles no relógio da sessão, consegue acelerar o relógio, dá ao processo seu próprio fuso horário, segue os processos filhos e diz depois quais canais foram de fato cobertos. Também é de código aberto, enquanto o RunAsDate é freeware fechado. O RunAsDate, por sua vez, consegue se anexar a um aplicativo que já está rodando, e esta ferramenta não.
A comparação completa também diz onde o RunAsDate é a melhor escolha.
É o libfaketime para Windows?
No espírito, sim - a mesma ideia de mover o tempo para um programa em vez de para a máquina. Na
prática, é uma implementação diferente, porque o
libfaketime depende de
LD_PRELOAD, que não existe no Windows. Há
uma página sobre exatamente isso.
É gratuito, e envia alguma coisa para algum lugar?
Gratuito e de código aberto sob a GPL-3.0. Sem conta, sem telemetria, e nunca se conecta à internet - a ferramenta inteira funciona com o cabo de rede desconectado.
A janela tem, sim, dois controles que levam para fora dela, então vale nomeá-los em vez de deixar você descobrir: os botões Donate e GitHub na barra de título. Ao clicar em um deles, um endereço é entregue ao seu navegador, e é o seu navegador que se conecta. O Chrono Mock não abre nenhuma conexão em nenhum dos casos, e nada do que ele mediu sobre o seu aplicativo vai para lugar nenhum.