package edu.cmu.sv.arinc838.crc;
import static org.testng.Assert.assertEquals;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao;
import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao.IntegrityType;
import edu.cmu.sv.arinc838.dao.SoftwareDefinitionFileDao;
import edu.cmu.sv.arinc838.util.Converter;
import edu.cmu.sv.arinc838.validation.ReferenceData;
public class CrcCalculatorTest {
private SoftwareDefinitionFileDao sdf;
private BdfFile bdf;
@BeforeTest
public void setUpBeforeTest() throws FileNotFoundException {
sdf = ReferenceData.SDF_TEST_FILE;
bdf = new BdfFile(new File(
"src/test/resources/ACM47-1234-5678/ACM4712345678.BDF"));
}
@Test
public void testCalculateLspCrc() throws IOException {
byte[] crc = CrcCalculator.calculateLspCrc(sdf, bdf);
assertEquals(crc, sdf.getLspIntegrityDefinition().getIntegrityValue(),
"LSP CRC did not calculate correctly");
}
@Test
public void testCalculateSdfCrc() throws IOException {
byte[] crc = CrcCalculator.calculateSdfCrc(sdf, bdf);
assertEquals(crc, sdf.getSdfIntegrityDefinition().getIntegrityValue(),
"SDF CRC did not calculate correctly");
}
@Test
public void testCalculateCrc16() throws IOException {
File file = new File("src/test/resources/crc_test_files/CRC_T02A.rom");
byte[] data = CrcCalculator.readFile(file);
IntegrityDefinitionDao integ = new IntegrityDefinitionDao();
integ.setIntegrityType(IntegrityType.CRC16.getType());
integ.setIntegrityValue(Converter.hexToBytes("1DA3"));
byte[] crc = CrcCalculator.calculateCrc(integ, data);
assertEquals(crc, integ.getIntegrityValue(),
"CRC16 did not calculate correctly");
}
@Test
public void testCalculateCrc32() throws IOException {
File file = new File("src/test/resources/crc_test_files/CRC_T02A.rom");
byte[] data = CrcCalculator.readFile(file);
IntegrityDefinitionDao integ = new IntegrityDefinitionDao();
integ.setIntegrityType(IntegrityType.CRC32.getType());
integ.setIntegrityValue(Converter.hexToBytes("322AB4A6"));
byte[] crc = CrcCalculator.calculateCrc(integ, data);
assertEquals(crc, integ.getIntegrityValue(),
"CRC32 did not calculate correctly");
}
@Test
public void testCalculateCrc64() throws IOException {
File file = new File("src/test/resources/crc_test_files/CRC_T02A.rom");
byte[] data = CrcCalculator.readFile(file);
IntegrityDefinitionDao integ = new IntegrityDefinitionDao();
integ.setIntegrityType(IntegrityType.CRC64.getType());
integ.setIntegrityValue(Converter.hexToBytes("034528B5989BED4D"));
byte[] crc = CrcCalculator.calculateCrc(integ, data);
assertEquals(crc, integ.getIntegrityValue(),
"CRC64 did not calculate correctly");
}
}