package edu.cmu.sv.arinc838.builder; import static org.testng.Assert.assertEquals; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.arinc.arinc838.FileDefinition; import edu.cmu.sv.arinc838.binary.BdfFile; import edu.cmu.sv.arinc838.dao.FileDefinitionDao; import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao; import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao.IntegrityType; import edu.cmu.sv.arinc838.util.Converter; public class FileDefinitionBuilderBinaryTest { private FileDefinitionDao fileDefDao; private BuilderFactory builderFactory; @BeforeMethod public void setup() { builderFactory = new BuilderFactory(); fileDefDao = new FileDefinitionDao(); fileDefDao.setFileLoadable(true); fileDefDao.setFileName("someFile.bin"); fileDefDao.setFileSize(123456); IntegrityDefinitionDao integ = new IntegrityDefinitionDao(); integ.setIntegrityType(IntegrityType.CRC32.getType()); integ.setIntegrityValue(Converter.hexToBytes("DEADBEEF")); fileDefDao.setFileIntegrityDefinition(integ); } @Test public void buildBinary() throws FileNotFoundException, IOException { BdfFile bdfFile = new BdfFile(File.createTempFile("tmpFile", ".bdf")); int bytesWritten = builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class).buildBinary(fileDefDao, bdfFile); // 4 ptr to next + 1 is loadable + 14 file name + 4 file size + 10 CRC32 integrity // 4 + 1 + 14 + 4 + 14 = 37 assertEquals(bytesWritten, 33); bdfFile.seek(0); long nextFileDefPointer = bdfFile.readUint32(); assertEquals(bytesWritten, nextFileDefPointer); assertEquals(bdfFile.readBoolean(), true); // file is loadable assertEquals(bdfFile.readStr64k(), "someFile.bin"); // file name assertEquals(bdfFile.readUint32(), 123456); // file size assertEquals(bdfFile.readUint32(), IntegrityType.CRC32.getType()); // integrity type assertEquals(bdfFile.readShort(), 4); // integrity value length byte[] integValue = new byte[4]; bdfFile.read(integValue); assertEquals(integValue, Converter.hexToBytes("DEADBEEF")); } @Test public void buildBinaryIsLast() throws FileNotFoundException, IOException { fileDefDao.setIsLast(true); BdfFile bdfFile = new BdfFile(File.createTempFile("tmpFile", ".bdf")); int bytesWritten = builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class).buildBinary(fileDefDao, bdfFile); // 4 ptr to next + 1 is loadable + 14 file name + 4 file size + 10 CRC32 integrity // 4 + 1 + 14 + 4 + 14 = 37 assertEquals(bytesWritten, 33); bdfFile.seek(0); long nextFileDefPointer = bdfFile.readUint32(); assertEquals(nextFileDefPointer, 0); } @Test public void fileDefinitionBuilderBdfFile() throws FileNotFoundException, IOException { BdfFile bdfFile = new BdfFile(File.createTempFile("tmpFile", ".bdf")); builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class).buildBinary(fileDefDao, bdfFile); bdfFile.seek(0); //return to start of file bdfFile.readUint32(); //parent object reads the pointers FileDefinitionDao fileDefBuilder2 = new FileDefinitionDao(bdfFile); assertEquals(fileDefBuilder2.isFileLoadable(), fileDefDao.isFileLoadable()); assertEquals(fileDefBuilder2.getFileName(), fileDefDao.getFileName()); assertEquals(fileDefBuilder2.getFileSize(), fileDefDao.getFileSize()); assertEquals(fileDefBuilder2.getFileIntegrityDefinition().getIntegrityType(), fileDefDao.getFileIntegrityDefinition().getIntegrityType()); assertEquals(fileDefBuilder2.getFileIntegrityDefinition().getIntegrityValue(), fileDefDao.getFileIntegrityDefinition().getIntegrityValue()); } }