23 lines
1.2 KiB
Python
23 lines
1.2 KiB
Python
import json
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
|
|
|
|
def test_estx_rejects_corrupted_last_engine_signature_byte_when_sample_exists():
|
|
sample = Path("C:/Dasansoft/Est Plus 2/Data/ProjectData/main.estx")
|
|
if not sample.exists():
|
|
pytest.skip("installed EST sample unavailable")
|
|
script = r"""const fs=require('fs'),m=require('./tools/est-test/import-estx.cjs'),a=require('./tools/est-test/archive.cjs');
|
|
const bytes=fs.readFileSync(process.argv[1]),files=m.unzip(bytes),table=files.get('estmaindat.dat');
|
|
const valid=m.importEstx(bytes).tables.EstMainDat.length;table[24]^=1;let rejected=false;
|
|
try{m.importEstx(a.pack(files))}catch(e){rejected=e.message.includes('DBISAM')}
|
|
table[24]^=1;files.get('stuffcdat.dat')[9]^=1;let missingRejected=false;
|
|
try{m.importEstx(a.pack(files))}catch(e){missingRejected=e.message.includes('stuffcdat.dat')}
|
|
process.stdout.write(JSON.stringify({valid:valid>0,rejected,missingRejected}));"""
|
|
result = json.loads(subprocess.check_output(["node", "-e", script, str(sample)], cwd=ROOT))
|
|
assert result == {"valid": True, "rejected": True, "missingRejected": True}
|