/* * Copyright (c) 2012 Chris Ellison, Mike Deats, Liron Yahdav, Ryan Neal, * Brandon Sutherlin, Scott Griffin * * This software is released under the MIT license * (http://www.opensource.org/licenses/mit-license.php) * * Created on Feb 12, 2012 */ package edu.cmu.sv.arinc838.dao; import static org.mockito.Mockito.mock; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.List; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.arinc.arinc838.FileDefinition; import com.arinc.arinc838.IntegrityDefinition; import com.arinc.arinc838.SdfFile; import com.arinc.arinc838.SoftwareDescription; import com.arinc.arinc838.ThwDefinition; import edu.cmu.sv.arinc838.binary.BdfFile; import edu.cmu.sv.arinc838.builder.BuilderFactory; import edu.cmu.sv.arinc838.builder.SoftwareDefinitionFileBuilder; import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao.IntegrityType; import edu.cmu.sv.arinc838.util.Converter; import edu.cmu.sv.arinc838.validation.ReferenceData; import edu.cmu.sv.arinc838.writer.BdfWriter; public class SoftwareDefinitionFileDaoTest { private SdfFile swDefFile; private IntegrityDefinition integrity; private SoftwareDescription description; private FileDefinition fileDef; private ThwDefinition hardwareDef; private SoftwareDefinitionFileDao swDefFileDao; private SoftwareDefinitionFileDao readBinaryFile; private BdfFile binaryFile; private String path; @BeforeMethod public void beforeMethod() throws Exception { File tempFile = File.createTempFile("tmp", ".bin"); integrity = new IntegrityDefinition(); integrity.setIntegrityType(IntegrityType.CRC16.getType()); integrity.setIntegrityValue(Converter.hexToBytes("0000000A")); description = new SoftwareDescription(); description .setSoftwarePartnumber(ReferenceData.SOFTWARE_PART_NUMBER_REFERENCE); description.setSoftwareTypeDescription("desc"); description.setSoftwareTypeId(Converter.hexToBytes("0000000A")); fileDef = new FileDefinition(); // we have to create a temp file for this, otherwise we'll get a FileNotFoundException during the // LSP CRC calculation File fileDefTemp = File.createTempFile("tmp", ".bin"); fileDef.setFileName(fileDefTemp.getName()); fileDef.setFileIntegrityDefinition(integrity); fileDef.setFileSize(1234); List<FileDefinition> fileDefs = new ArrayList<FileDefinition>(); fileDefs.add(fileDef); hardwareDef = new ThwDefinition(); hardwareDef.setThwId("hardware"); swDefFile = new SdfFile(); swDefFile .setFileFormatVersion(SoftwareDefinitionFileDao.DEFAULT_FILE_FORMAT_VERSION); swDefFile.setSdfIntegrityDefinition(integrity); swDefFile.setLspIntegrityDefinition(integrity); swDefFile.setSoftwareDescription(description); swDefFile.getFileDefinitions().add(fileDef); swDefFile.getFileDefinitions().add(fileDef); swDefFile.getThwDefinitions().add(hardwareDef); swDefFile.getThwDefinitions().add(hardwareDef); path = tempFile.getParent(); binaryFile = new BdfFile(tempFile); swDefFileDao = new SoftwareDefinitionFileDao( swDefFile, path); SoftwareDefinitionFileBuilder swDefFileBuilder = new SoftwareDefinitionFileBuilder( new BuilderFactory()); swDefFileBuilder.buildBinary(swDefFileDao, binaryFile); readBinaryFile = new SoftwareDefinitionFileDao(binaryFile, path); } @Test public void testFileFormatVersionAccessor() { /** * Only has one value currently - hard coded (no need for a setter * test...) */ assertEquals(swDefFileDao.getFileFormatVersion(), SoftwareDefinitionFileDao.DEFAULT_FILE_FORMAT_VERSION); } @Test public void testSoftwareDescriptionSectionAccessor() { SoftwareDescriptionDao refVal = new SoftwareDescriptionDao(); refVal.setSoftwarePartnumber("SomeJunk"); swDefFileDao.setSoftwareDescription(refVal); assertEquals(swDefFileDao.getSoftwareDescription(), refVal); swDefFileDao.setSoftwareDescription(new SoftwareDescriptionDao()); assertNotEquals(swDefFileDao.getSoftwareDescription(), refVal); } @Test public void testLspIngerityDefinitionAccessor() { IntegrityDefinitionDao refVal = new IntegrityDefinitionDao(); refVal.setIntegrityType(123); swDefFileDao.setLspIntegrityDefinition(refVal); assertEquals(swDefFileDao.getLspIntegrityDefinition(), refVal); swDefFileDao.setLspIntegrityDefinition(new IntegrityDefinitionDao()); assertNotEquals(swDefFileDao.getLspIntegrityDefinition(), refVal); } @Test public void testSdfIngerityDefinitionAccessor() { IntegrityDefinitionDao refVal = new IntegrityDefinitionDao(); refVal.setIntegrityType(123); swDefFileDao.setSdfIntegrityDefinition(refVal); assertEquals(swDefFileDao.getSdfIntegrityDefinition(), refVal); swDefFileDao.setSdfIntegrityDefinition(new IntegrityDefinitionDao()); assertNotEquals(swDefFileDao.getSdfIntegrityDefinition(), refVal); } @Test public void testFileDefinitionAccessor() { FileDefinitionDao first = new FileDefinitionDao(); FileDefinitionDao second = mock(FileDefinitionDao.class); swDefFileDao.getFileDefinitions().clear(); swDefFileDao.getFileDefinitions().add(first); swDefFileDao.getFileDefinitions().add(second); assertEquals(swDefFileDao.getFileDefinitions().size(), 2); assertEquals(swDefFileDao.getFileDefinitions().get(0), first); assertEquals(swDefFileDao.getFileDefinitions().get(1), second); } @Test public void testDefaultConstructor() { assertEquals(swDefFileDao.getFileFormatVersion(), SoftwareDefinitionFileDao.DEFAULT_FILE_FORMAT_VERSION); } @Test public void testXmlConstructor() { swDefFileDao = new SoftwareDefinitionFileDao(swDefFile, path); assertEquals(swDefFileDao.getSoftwareDescription(), new SoftwareDescriptionDao(swDefFile.getSoftwareDescription())); assertEquals( swDefFileDao.getLspIntegrityDefinition(), new IntegrityDefinitionDao(swDefFile .getLspIntegrityDefinition())); assertEquals( swDefFileDao.getSdfIntegrityDefinition(), new IntegrityDefinitionDao(swDefFile .getSdfIntegrityDefinition())); assertEquals(swDefFileDao.getFileDefinitions().size(), swDefFile .getFileDefinitions().size()); assertEquals(swDefFileDao.getTargetHardwareDefinitions().size(), swDefFile.getThwDefinitions().size()); } @Test public void getTargetHardwareDefinitions() { assertEquals(swDefFileDao.getTargetHardwareDefinitions().size(), 2); assertEquals(swDefFileDao.getTargetHardwareDefinitions().get(0) .getThwId(), "hardware"); assertEquals(swDefFileDao.getTargetHardwareDefinitions().get(1) .getThwId(), "hardware"); } @Test public void addTargetHardwareDefinitions() { swDefFileDao.getTargetHardwareDefinitions().clear(); TargetHardwareDefinitionDao expectedHardwareDefinition = new TargetHardwareDefinitionDao(); swDefFileDao.getTargetHardwareDefinitions().add( expectedHardwareDefinition); TargetHardwareDefinitionDao actualHardwareDefinition = swDefFileDao .getTargetHardwareDefinitions().get(0); assertEquals(actualHardwareDefinition, expectedHardwareDefinition); } @Test public void getFileFormatVersion() { assertEquals(SoftwareDefinitionFileDao.DEFAULT_FILE_FORMAT_VERSION, swDefFile.getFileFormatVersion()); } @Test public void getSoftwareDefinitionSections() { assertEquals(description.getSoftwarePartnumber(), swDefFile .getSoftwareDescription().getSoftwarePartnumber()); } @Test public void getPath(){ assertEquals(swDefFileDao.getPath(), path); } @Test public void setPath(){ String myPath = "my path"; swDefFileDao.setPath(myPath); assertEquals(swDefFileDao.getPath(), myPath); } @Test public void testHasBinaryFileName() { String partNumber = "some-part"; SoftwareDescriptionDao descDao = new SoftwareDescriptionDao(); descDao.setSoftwarePartnumber(partNumber); swDefFileDao.setSoftwareDescription(descDao); assertEquals(swDefFileDao.getBinaryFileName(), partNumber.replace("-", "") + ".BDF"); } @Test public void testBinaryConstructorReadsDescription() { assertEquals(readBinaryFile.getSoftwareDescription() .getSoftwareTypeDescription(), swDefFileDao .getSoftwareDescription().getSoftwareTypeDescription()); } @Test public void testSoftwareDefinitionFileBuilderBdfFile() throws FileNotFoundException, IOException { assertEquals(readBinaryFile.getLspIntegrityDefinition() .getIntegrityValue(), swDefFileDao.getLspIntegrityDefinition() .getIntegrityValue()); assertEquals(readBinaryFile.getSdfIntegrityDefinition() .getIntegrityValue(), swDefFileDao.getSdfIntegrityDefinition() .getIntegrityValue()); } @Test public void testEquals() { SoftwareDefinitionFileDao copy = new SoftwareDefinitionFileDao( swDefFile, path); swDefFileDao = new SoftwareDefinitionFileDao(swDefFile, path); assertEquals(swDefFileDao, copy); } @Test public void testHashcode() { swDefFileDao = new SoftwareDefinitionFileDao(swDefFile, path); assertEquals(swDefFileDao.hashCode(), swDefFileDao.getXmlFileName() .hashCode()); } @Test public void testHashcode2() { assertEquals(swDefFileDao.hashCode(), swDefFileDao.getXmlFileName() .hashCode()); } @Test public void testHashcodeWithNoDescriptionSet() { SoftwareDefinitionFileDao builder = new SoftwareDefinitionFileDao(); assertEquals(builder.hashCode(), 0); } @Test public void testInitializeBinaryClearsFileDefinitions() throws IOException { SoftwareDefinitionFileDao builder = new SoftwareDefinitionFileDao(); builder.getFileDefinitions().add(new FileDefinitionDao()); builder.initialize(binaryFile); assertEquals(builder.getFileDefinitions().size(), swDefFile .getFileDefinitions().size()); } @Test public void testInitializeBinaryClearsTargetHardwareDefinitions() throws IOException { SoftwareDefinitionFileDao builder = new SoftwareDefinitionFileDao(); builder.getTargetHardwareDefinitions().add( new TargetHardwareDefinitionDao()); builder.initialize(binaryFile); assertEquals(builder.getTargetHardwareDefinitions().size(), swDefFile .getThwDefinitions().size()); } @Test public void testInitializeXmlClearsFileDefinitions() { SoftwareDefinitionFileDao builder = new SoftwareDefinitionFileDao(); builder.getFileDefinitions().add(new FileDefinitionDao()); builder.initialize(swDefFile); assertEquals(builder.getFileDefinitions().size(), swDefFile .getFileDefinitions().size()); } @Test public void testInitializeXmlClearsTargetHardwareDefinitions() { SoftwareDefinitionFileDao builder = new SoftwareDefinitionFileDao(); builder.getTargetHardwareDefinitions().add( new TargetHardwareDefinitionDao()); builder.initialize(swDefFile); assertEquals(builder.getTargetHardwareDefinitions().size(), swDefFile .getThwDefinitions().size()); } @Test public void testHasXmlFileName() { String partNumber = "some-part"; SoftwareDescriptionDao descDao = new SoftwareDescriptionDao(); descDao.setSoftwarePartnumber(partNumber); swDefFileDao.setSoftwareDescription(descDao); assertEquals(swDefFileDao.getXmlFileName(), partNumber.replace("-", "") + ".XDF"); } @Test public void testReadBinaryActualFilesOnDisk() throws Exception { BdfWriter writer = new BdfWriter(); String path = System.getProperty("java.io.tmpdir"); writer.write(path, swDefFileDao); File firstOnDisk = new File(path + writer.getFilename(swDefFileDao)); BdfFile file = new BdfFile(firstOnDisk); SoftwareDefinitionFileDao actual = new SoftwareDefinitionFileDao(file, path); RandomAccessFile first = new RandomAccessFile(firstOnDisk, "r"); byte[] firstBytes = new byte[(int) first.length()]; first.readFully(firstBytes); writer.write(path, actual); File secondOnDisk = new File(path + writer.getFilename(actual)); RandomAccessFile second = new RandomAccessFile(secondOnDisk, "r"); byte[] secondBytes = new byte[(int) second.length()]; second.readFully(secondBytes); assertEquals(firstBytes, secondBytes); firstOnDisk.delete(); secondOnDisk.delete(); } @Test public void testInitializeSoftwareDefinitionFileDaoSetsPath() { swDefFileDao.setPath("foo"); SoftwareDefinitionFileDao sdfDao2 = new SoftwareDefinitionFileDao(); sdfDao2.initialize(swDefFileDao); assertEquals(sdfDao2.getPath(), "foo"); } }