/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.intel.mtwilson.wlm.business; import com.intel.mtwilson.wlm.business.OemBO; import com.intel.mtwilson.wlm.business.OsBO; import com.intel.mtwilson.wlm.business.MleBO; import com.intel.mtwilson.datatypes.ManifestData; import com.intel.mtwilson.datatypes.MleData; import com.intel.mtwilson.datatypes.OemData; import com.intel.mtwilson.datatypes.OsData; import java.security.SecureRandom; import java.util.List; import java.util.jar.Manifest; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Random; /** * * @author dsmagadx */ public class MleBOTest { private SecureRandom rnd = new SecureRandom(); public MleBOTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } private OsData os = null; private OsData getValidOs() { if( os == null ) { OsData tmp = new OsData("Test OS", "0.123", "Auto-generated OS record for JUnit testing"); OsBO db = new OsBO(); // first check if this OS is already in the database boolean found = false; List<OsData> list = db.getAllOs(); for(OsData r : list) { if( r.getName() != null && r.getName().equals(tmp.getName()) ) { found = true; os = r; } } if( !found ) { os = tmp; db.createOs(os, null); } } assert(os!=null); return os; } /* private OsData getInvalidOs() { return new OsData("Test OS #"+rnd.nextInt(9999), "3.14159", "Auto-generated invalid OS record for JUnit testing"); } */ private OemData oem = null; private OemData getValidOem() { if( oem == null ) { OemData tmp = new OemData("Test OEM", "Auto-generated OEM record for JUnit testing"); OemBO db = new OemBO(); // first check if this OS is already in the database boolean found = false; List<OemData> list = db.getAllOem(); for(OemData r : list) { if( r.getName() != null && r.getName().equals(tmp.getName()) ) { found = true; oem = r; } } if( !found ) { oem = tmp; db.createOem(oem, null); } } assert(oem!=null); return oem; } /* private OemData getInvalidOem() { return new OemData("Test OEM #"+rnd.nextInt(9999), "Auto-generated invalid OEM record for JUnit testing"); } */ // we need to have separate BIOS MLE and VMM MLE sample records because the MleBO will reject an MLE record that has both BIOS and VMM "extra" information private MleData getVmmMle() { ManifestData manifestData = new ManifestData("1", "abcd29384722656"); ArrayList<ManifestData> manifestList = new ArrayList<ManifestData>(); manifestList.add(manifestData); // we want this to work so we use the valid os OsData os = getValidOs(); MleData mleData = new MleData( "TestMLE", "version1", MleData.MleType.VMM, MleData.AttestationType.PCR, manifestList, "Description", os.getName(), os.getVersion(), null); // oem name must be null for vmm mle return mleData; } private MleData getBiosMle() { ManifestData manifestData = new ManifestData("2", "defa2342982342"); ArrayList<ManifestData> manifestList = new ArrayList<ManifestData>(); manifestList.add(manifestData); OemData oem = getValidOem(); MleData mleData = new MleData( "TestMLE", "version1", MleData.MleType.BIOS, MleData.AttestationType.PCR, manifestList, "Description", null, // os name must be null for bios mle null, // os version must be null for bios mle oem.getName()); return mleData; } @Before public void setUp() { } /** * Test of addMLe method, of class MleBO. */ @Test public void testAddMleVmm() { System.out.println("addMLeVmm"); MleBO instance = new MleBO(); String expResult = "true"; String result = instance.addMLe(getVmmMle(), null); assertEquals(expResult, result); } /** * Test of addMLe method, of class MleBO. */ @Test public void testAddMleBios() { System.out.println("addMLeBios"); MleBO instance = new MleBO(); String expResult = "true"; String result = instance.addMLe(getBiosMle(), null); assertEquals(expResult, result); } /** * Test of updateMle method, of class MleBO. */ @Test public void testUpdateMle() { MleData vmm = getVmmMle(); System.out.println("updateMle"); MleBO instance = new MleBO(); String expResult = "true"; // first make sure the MLE is in the database try { MleData originalRecord = instance.findMle(vmm.getName(), vmm.getVersion(), vmm.getOsName(), vmm.getOsVersion(), null); System.out.println("MLE already in database: "+originalRecord.getName()); } catch(Exception e) { // record was not in the database, so add it with its initial description instance.addMLe(vmm, null); } String updatedDescription = vmm.getDescription() + "updated " + rnd.nextInt(99); vmm.setDescription(updatedDescription); String result = instance.updateMle(vmm, null); assertEquals(expResult, result); // now check that it was updated MleData updatedRecord = instance.findMle(vmm.getName(), vmm.getVersion(), vmm.getOsName(), vmm.getOsVersion(), null); assertTrue(updatedRecord.getDescription() != null && updatedRecord.getDescription().equals(updatedDescription)); // TODO: need to check BIOS MLE } /** * Test of queryFOrMLE method, of class MleBO. */ @Test public void testQueryFOrMLE() { System.out.println("queryFOrMLE"); MleData mleData = getVmmMle(); String searchCriteria = mleData.getName(); MleBO instance = new MleBO(); List result = instance.listMles(searchCriteria); assertNotNull(result); if( result.isEmpty() ) { testAddMleVmm(); result = instance.listMles(searchCriteria); assertEquals(result.size(), 1); } // if it's not empty then we know it's fine. don't check for size because the size may be 1 or it may be more!! } /** * Test of GetMLEDetails method, of class MleBO. */ @Test public void testGetMLEDetailsVmm() { System.out.println("getMLEDetailsVmm"); MleBO instance = new MleBO(); MleData vmm = getVmmMle(); MleData resultVmm = instance.findMle(vmm.getName(), vmm.getVersion(), vmm.getOsName(), vmm.getOsVersion(), null); assertNotNull(resultVmm); } /** * Test of GetMLEDetails method, of class MleBO. */ @Test public void testGetMLEDetailsBios() { System.out.println("getMLEDetailsBios"); MleBO instance = new MleBO(); MleData bios = getBiosMle(); MleData resultBios = instance.findMle(bios.getName(), bios.getVersion(), null, null, bios.getOemName()); assertNotNull(resultBios); } @Test public void testDeleteMleVmm() { System.out.println("deleteMleVmm"); MleBO instance = new MleBO(); String expResult = "true"; MleData vmm = getVmmMle(); String resultVmm = instance.deleteMle(vmm.getName(), vmm.getVersion(), vmm.getOsName(), vmm.getOsVersion(), vmm.getOemName(), null); assertEquals(expResult, resultVmm); } @Test public void testDeleteMleBios() { System.out.println("deleteMleBios"); MleBO instance = new MleBO(); String expResult = "true"; MleData bios = getBiosMle(); String resultBios = instance.deleteMle(bios.getName(), bios.getVersion(), bios.getOsName(), bios.getOsVersion(), bios.getOemName(), null); assertEquals(expResult, resultBios); } }