import pytest from modules.utils import gerar_assinatura_SHA256_ficheiro import hashlib def test_gerar_assinatura_SHA256_ficheiro(tmp_path): # criar ficheiro temporario ficheiro = tmp_path / "teste.txt" conteudo = "Conteudo de teste" ficheiro.write_text(conteudo) # gerar assinatura usando a função 'gerar_assinatura_SHA256_ficheiro()' assinatura_funcao = gerar_assinatura_SHA256_ficheiro(str(ficheiro)) # gerar assinatura manualmente para comparar with open(ficheiro, "rb") as f: assinatura_manual = hashlib.sha256(f.read()).hexdigest() # verificar se ambas as assinaturas coincidem assert assinatura_funcao == assinatura_manual def test_gerar_assinatura_SHA256_ficheiro_inexistente(): # testar comportamento se ficheiro não existir with pytest.raises(FileNotFoundError): gerar_assinatura_SHA256_ficheiro("ficheiro_que_nao_existe.txt") def test_gerar_assinatura_SHA256_ficheiro_grande(tmp_path): ficheiro_grande = tmp_path / "grande.txt" conteudo = "ABCDE" * 10**5 # muito conteudo ficheiro_grande.write_text(conteudo) assinatura_funcao = gerar_assinatura_SHA256_ficheiro(str(ficheiro_grande)) with open(ficheiro_grande, "rb") as f: assinatura_manual = hashlib.sha256(f.read()).hexdigest() assert assinatura_funcao == assinatura_manual def test_gerar_assinatura_SHA256_ficheiro_binario(tmp_path): ficheiro_binario = tmp_path / "ficheiro.bin" conteudo_binario = bytes(range(256)) # cria bytes de 0 a 255 ficheiro_binario.write_bytes(conteudo_binario) assinatura_funcao = gerar_assinatura_SHA256_ficheiro(str(ficheiro_binario)) with open(ficheiro_binario, "rb") as f: assinatura_manual = hashlib.sha256(f.read()).hexdigest() assert assinatura_funcao == assinatura_manual def test_gerar_assinatura_SHA256_ficheiros_iguais(tmp_path): ficheiro1 = tmp_path / "ficheiro1.txt" ficheiro2 = tmp_path / "ficheiro2.txt" conteudo = "Conteudo igual nos dois ficheiros" ficheiro1.write_text(conteudo) ficheiro2.write_text(conteudo) assinatura1 = gerar_assinatura_SHA256_ficheiro(str(ficheiro1)) assinatura2 = gerar_assinatura_SHA256_ficheiro(str(ficheiro2)) assert assinatura1 == assinatura2