Chrono Mock
IdiomaPortuguês (Brasil)

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. Stopwatch continua 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.time e datetime são cobertos. perf_counter, e monotonic a 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.