Trying to fix up code to pull down the correct library for JPARepository

This commit is contained in:
Cyrus 2022-07-28 07:37:43 -04:00
parent d4b0a87228
commit 53c565717d
40 changed files with 97 additions and 843 deletions

View File

@ -14,6 +14,7 @@ dependencies {
compile libs.commons_codec
compile libs.commons_lang
compile libs.spring_webmvc
compile libs.spring_data // Cyrus ?
compile libs.log4j2
compile libs.log4j2_web
compile libs.protobuf_java

View File

@ -100,7 +100,8 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi
*/
// @Bean
public SessionFactory sessionFactory() {
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(getSettings()).build();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(getSettings()).build();
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
Metadata metadata = metadataSources.buildMetadata();
// LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
@ -113,14 +114,19 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi
private Map<String, String> getSettings() {
Map<String, String> settings = new HashMap<>();
settings.put("connection.driver_class", environment.getRequiredProperty("persistence.db.driverClass"));
settings.put("connection.driver_class",
environment.getRequiredProperty("persistence.db.driverClass"));
settings.put("dialect", environment.getRequiredProperty("persistence.hibernate.dialect"));
settings.put("hibernate.connection.url", environment.getRequiredProperty("persistence.db.url"));
settings.put("hibernate.connection.username", environment.getRequiredProperty("persistence.db.username"));
settings.put("hibernate.connection.password", environment.getRequiredProperty("persistence.db.password"));
settings.put("hibernate.connection.url",
environment.getRequiredProperty("persistence.db.url"));
settings.put("hibernate.connection.username",
environment.getRequiredProperty("persistence.db.username"));
settings.put("hibernate.connection.password",
environment.getRequiredProperty("persistence.db.password"));
// settings.put("hibernate.current_session_context_class", );
settings.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
settings.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
settings.put("hibernate.format_sql",
environment.getRequiredProperty("hibernate.format_sql"));
return settings;
}
@ -141,9 +147,12 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi
dataSource.setDriverClassName(
environment.getRequiredProperty("persistence.db.driverClass"));
// dataSource.setMaximumPoolSize(Integer.parseInt(environment.getRequiredProperty("persistence.db.maximumPoolSize"));
// dataSource.setConnectionTimeout(Long.parseLong(environment.getRequiredProperty("persistence.db.connectionTimeout"));
// dataSource.setLeakDetectionThreshold(Long.parseLong(environment.getRequiredProperty("persistence.db.leakDetectionThreshold"));
// dataSource.setMaximumPoolSize(Integer.parseInt(environment
// .getRequiredProperty("persistence.db.maximumPoolSize"));
// dataSource.setConnectionTimeout(Long.parseLong(environment.
// getRequiredProperty("persistence.db.connectionTimeout"));
// dataSource.setLeakDetectionThreshold(Long.parseLong(environment
// .getRequiredProperty("persistence.db.leakDetectionThreshold"));
return dataSource;
}

View File

@ -1,8 +1,8 @@
package hirs.attestationca;
import hirs.attestationca.persist.DBAppraiserManager;
import hirs.attestationca.persist.DBDeviceGroupManager;
import hirs.attestationca.persist.DBPolicyManager;
import hirs.attestationca.servicemanager.DBAppraiserManager;
import hirs.attestationca.servicemanager.DBDeviceGroupManager;
import hirs.attestationca.servicemanager.DBPolicyManager;
import hirs.utils.HIRSProfiles;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@ -25,8 +25,10 @@ public class InitializationListener implements ServletContextListener {
context.refresh();
// obtain reference to hibernate session factory
// SessionFactory sessionFactory = context.getBean(LocalSessionFactoryBean.class).getObject();
EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager();
// SessionFactory sessionFactory = context.getBean(LocalSessionFactoryBean.class)
// .getObject();
EntityManager entityManager = context.getBean(EntityManagerFactory.class)
.createEntityManager();
AcaDbInit.insertDefaultEntries(
new DBAppraiserManager(entityManager),
new DBDeviceGroupManager(entityManager),

View File

@ -1,17 +1,17 @@
package hirs.attestationca.configuration;
import hirs.attestationca.AttestationCertificateAuthorityConfiguration;
import hirs.attestationca.persist.DBCertificateManager;
import hirs.attestationca.persist.DBDeviceGroupManager;
import hirs.attestationca.persist.DBDeviceManager;
import hirs.attestationca.persist.DBManager;
import hirs.attestationca.persist.DBPolicyManager;
import hirs.attestationca.persist.DBPortalInfoManager;
import hirs.attestationca.persist.DBReferenceEventManager;
import hirs.attestationca.persist.DBReferenceManifestManager;
import hirs.attestationca.persist.DBReportManager;
import hirs.attestationca.persist.DBReportRequestStateManager;
import hirs.attestationca.persist.DBReportSummaryManager;
import hirs.attestationca.servicemanager.DBCertificateManager;
import hirs.attestationca.servicemanager.DBDeviceGroupManager;
import hirs.attestationca.servicemanager.DBDeviceManager;
import hirs.attestationca.servicemanager.DBManager;
import hirs.attestationca.servicemanager.DBPolicyManager;
import hirs.attestationca.servicemanager.DBPortalInfoManager;
import hirs.attestationca.servicemanager.DBReferenceEventManager;
import hirs.attestationca.servicemanager.DBReferenceManifestManager;
import hirs.attestationca.servicemanager.DBReportManager;
import hirs.attestationca.servicemanager.DBReportRequestStateManager;
import hirs.attestationca.servicemanager.DBReportSummaryManager;
import hirs.data.persist.SupplyChainValidationSummary;
import hirs.persist.CertificateManager;
import hirs.persist.CrudManager;
@ -50,9 +50,10 @@ public class PersistenceConfiguration {
public static final String DEVICE_STATE_MANAGER_BEAN_NAME = "general_db_man_bean";
@Autowired
EntityManagerFactory entityManagerFactory;
private EntityManagerFactory entityManagerFactory;
@PersistenceContext
EntityManager entityManager = entityManagerFactory.createEntityManager();
private EntityManager entityManager = entityManagerFactory.createEntityManager();
@Autowired
private long retryWaitTimeMilliseconds;
@ -184,9 +185,10 @@ public class PersistenceConfiguration {
}
/**
* Creates a {@link hirs.attestationca.persist.DBManager} for SupplyChainValidationSummary persistence, ready for use.
* Creates a {@link hirs.attestationca.servicemanager.DBManager}
* for SupplyChainValidationSummary persistence, ready for use.
*
* @return {@link hirs.attestationca.persist.DBManager}
* @return {@link hirs.attestationca.servicemanager.DBManager}
*/
@Bean
public CrudManager<SupplyChainValidationSummary> supplyChainValidationSummaryManager() {

View File

@ -1,7 +0,0 @@
/**
* Data access objects (DAOs) for storing and retrieving objects from the
* database.
*/
package hirs.attestationca.persist;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.FilteredRecordsList;
import hirs.data.persist.ArchivableEntity;
@ -9,19 +9,13 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.criterion.Conjunction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.springframework.stereotype.Service;
@ -509,7 +503,7 @@ public abstract class AbstractDbManager<T> implements CrudManager<T> {
return null;
}
Transaction tx = null;
Session session =getSession();
Session session = getSession();
try {
LOGGER.debug("retrieving object from db");
tx = session.beginTransaction();

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.appraiser.Appraiser;
import hirs.persist.AppraiserManager;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.certificate.Certificate;
import hirs.persist.CertificateManager;
@ -39,8 +39,10 @@ public class DBCertificateManager extends DBManager<Certificate>
}
/**
* This method does not need to be used directly as it is used by {@link hirs.persist.CertificateSelector}'s
* get* methods. Regardless, it may be used to retrieve certificates by other code in this
* This method does not need to be used directly as it is used by
* {@link hirs.persist.CertificateSelector}'s
* get methods. Regardless, it may be used to retrieve certificates
* by other code in this
* package, given a configured CertificateSelector.
*
* Example:
@ -55,7 +57,8 @@ public class DBCertificateManager extends DBManager<Certificate>
* </pre>
*
* @param <T> the type of certificate that will be retrieved
* @param certificateSelector a configured {@link hirs.persist.CertificateSelector} to use for querying
* @param certificateSelector a configured {@link hirs.persist.CertificateSelector}
* to use for querying
* @return the resulting set of Certificates, possibly empty
*/
@SuppressWarnings("unchecked")

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.FilteredRecordsList;
import hirs.data.persist.DeviceGroup;
@ -12,7 +12,6 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.springframework.stereotype.Service;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.FilteredRecordsList;
import hirs.data.persist.Device;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.FilteredRecordsList;
import hirs.data.persist.ArchivableEntity;
@ -7,7 +7,6 @@ import hirs.persist.DBManagerException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.StaleObjectStateException;
import org.hibernate.criterion.Criterion;
import org.hibernate.exception.LockAcquisitionException;
@ -118,7 +117,8 @@ public class DBManager<T> extends AbstractDbManager<T> {
* @param predicateCollection the collection of Criterion to apply
*
* @return a List of objects that match the criteria
* @throws hirs.persist.DBManagerException if an error is encountered while performing the query or creating
* @throws hirs.persist.DBManagerException if an error is encountered
* while performing the query or creating
* the result objects
*/
public final List<T> getWithCriteria(final Collection<Predicate> predicateCollection)

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import com.google.common.base.Preconditions;
import hirs.appraiser.Appraiser;
@ -12,7 +12,6 @@ import hirs.persist.PolicyMapper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.enums.PortalScheme;
import hirs.data.persist.info.PortalInfo;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.BaseReferenceManifest;
import hirs.data.persist.ReferenceDigestRecord;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.ReferenceManifest;
import hirs.persist.ReferenceManifestManager;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.Report;
import hirs.persist.DBManagerException;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.Device;
import hirs.data.persist.ReportRequestState;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.data.persist.ReportSummary;
import hirs.persist.DBManagerException;

View File

@ -1,4 +1,4 @@
package hirs.attestationca.persist;
package hirs.attestationca.servicemanager;
import hirs.persist.RepositoryManager;
import hirs.repository.RepoPackage;
@ -10,7 +10,8 @@ import java.io.Serializable;
import java.util.List;
/**
* This class defines a {@link hirs.persist.RepositoryManager} that stores Repositories and RepoPackages
* This class defines a {@link hirs.persist.RepositoryManager} that
* stores Repositories and RepoPackages
* in a database.
*/
@Service

View File

@ -0,0 +1,7 @@
/**
* Service objects for the DAOs; storing and retrieving objects from the
* database.
*/
package hirs.attestationca.servicemanager;

View File

@ -19,6 +19,10 @@ hibernate.format_sql = true
persistence.hibernate.contextClass = org.springframework.orm.hibernate5.SpringSessionContext
persistence.hibernate.provider = org.hibernate.hikaricp.internal.HikariCPConnectionProvider
spring.datasource.url = jdbc:mariadb://localhost/hirs_db?autoReconnect=true&useSSL=true&requireSSL=true&amp;enabledSslProtocolSuites=TLSv1&disableSslHostnameVerification=true
spring.datasource.username = hirs_db
spring.datasource.password = hirs_db
spring.datasource.driver-class-name = org.mariadb.jdbc.Driver
spring.jpa.generate-ddl = true
# caching the entity manager in a persistence
# inject the entity manger in spring using context

View File

@ -5,7 +5,6 @@ import hirs.data.persist.AppraisalStatus;
import hirs.data.persist.Device;
import hirs.data.persist.DeviceGroup;
import hirs.data.persist.DeviceInfoReport;
import hirs.data.persist.SpringPersistenceTest;
import hirs.data.persist.SupplyChainPolicy;
import hirs.data.persist.SupplyChainValidation;
import hirs.data.persist.SupplyChainValidationSummary;
@ -17,9 +16,9 @@ import hirs.data.persist.certificate.PlatformCredential;
import hirs.persist.AppraiserManager;
import hirs.persist.CertificateManager;
import hirs.persist.CrudManager;
import hirs.attestationca.persist.DBCertificateManager;
import hirs.attestationca.persist.DBDeviceGroupManager;
import hirs.attestationca.persist.DBDeviceManager;
import hirs.attestationca.servicemanager.DBCertificateManager;
import hirs.attestationca.servicemanager.DBDeviceGroupManager;
import hirs.attestationca.servicemanager.DBDeviceManager;
import hirs.persist.DeviceGroupManager;
import hirs.persist.DeviceManager;
import hirs.persist.PolicyManager;

View File

@ -9,7 +9,7 @@ import hirs.attestationca.portal.page.params.NoPageParams;
import hirs.data.persist.Device;
import hirs.data.persist.certificate.Certificate;
import hirs.data.persist.certificate.DeviceAssociatedCertificate;
import hirs.attestationca.persist.DBManager;
import hirs.attestationca.servicemanager.DBManager;
import hirs.persist.DeviceManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.criterion.Restrictions;

View File

@ -13,8 +13,8 @@ import hirs.data.persist.SupportReferenceManifest;
import hirs.data.persist.certificate.Certificate;
import hirs.persist.CriteriaModifier;
import hirs.persist.DBManagerException;
import hirs.attestationca.persist.DBReferenceEventManager;
import hirs.attestationca.persist.DBReferenceManifestManager;
import hirs.attestationca.servicemanager.DBReferenceEventManager;
import hirs.attestationca.servicemanager.DBReferenceManifestManager;
import hirs.persist.ReferenceEventManager;
import hirs.persist.ReferenceManifestManager;
import org.apache.logging.log4j.LogManager;

View File

@ -4,6 +4,7 @@ import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
import java.util.Date;
import java.util.UUID;
@ -11,7 +12,7 @@ import java.util.UUID;
* An abstract database entity.
*/
@MappedSuperclass
public abstract class AbstractEntity {
public abstract class AbstractEntity implements Serializable {
/**
* static value for the length of a status message for objects that

View File

@ -72,33 +72,21 @@ public abstract class ReferenceManifest extends ArchivableEntity {
private byte[] rimBytes;
@Column(nullable = false)
private String rimType = "Base";
@Column
private String tagId = null;
@Column
private boolean swidPatch = false;
@Column
private boolean swidSupplemental = false;
@Column
private String platformManufacturer = null;
@Column
private String platformManufacturerId = null;
@Column
private String swidTagVersion = null;
@Column
private String swidVersion = null;
@Column
private String platformModel = null;
@Column(nullable = false)
private String fileName = null;
@Column
private UUID associatedRim;
@Column
@JsonIgnore
private String deviceName;
@Column
@JsonIgnore
private String hexDecHash = "";
@Column
@JsonIgnore
private String eventLogHash = "";

View File

@ -1,372 +0,0 @@
package hirs.data.persist;
import hirs.data.persist.info.FirmwareInfo;
import hirs.data.persist.info.HardwareInfo;
import hirs.data.persist.info.NetworkInfo;
import hirs.data.persist.info.OSInfo;
import hirs.data.persist.info.TPMInfo;
import hirs.foss.XMLCleaner;
import hirs.persist.DBReportManager;
import hirs.persist.ReportManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.UUID;
/**
* DeviceInfoReportTest is a unit test class for DeviceInfoReports.
*/
public class DeviceInfoReportTest extends SpringPersistenceTest {
private final NetworkInfo networkInfo = createTestNetworkInfo();
private final OSInfo osInfo = createTestOSInfo();
private final FirmwareInfo firmwareInfo = createTestFirmwareInfo();
private final HardwareInfo hardwareInfo = createTestHardwareInfo();
private final TPMInfo tpmInfo = createTPMInfo();
private static final String TEST_IDENTITY_CERT = "/tpm/sample_identity_cert.cer";
private static final Logger LOGGER = LogManager.getLogger(DeviceInfoReportTest.class);
private static final String EXPECTED_CLIENT_VERSION = "Test.Version";
private ReportManager reportManager;
/**
* Initializes a <code>SessionFactory</code>. The factory is used for an
* in-memory database that is used for testing.
*/
@BeforeClass
public final void setup() {
LOGGER.debug("retrieving session factory");
reportManager = new DBReportManager(sessionFactory);
}
/**
* Closes the <code>SessionFactory</code> from setup.
*/
@AfterClass
public final void tearDown() {
LOGGER.debug("closing session factory");
}
/**
* Resets the test state to a known good state. This currently only resets
* the database by removing all <code>Report</code> objects.
*/
@AfterMethod
public final void resetTestState() {
LOGGER.debug("reset test state");
LOGGER.debug("deleting all reports");
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Report> criteriaQuery = builder.createQuery(Report.class);
Root<Report> root = criteriaQuery.from(Report.class);
criteriaQuery.select(root);
Query<Report> query = session.createQuery(criteriaQuery);
try {
final List<Report> reports = query.getResultList();
// final List<?> reports = session.createCriteria(Report.class).list();
for (Object o : reports) {
LOGGER.debug("deleting report: {}", o);
session.delete(o);
}
LOGGER.debug("all reports removed");
} finally {
session.getTransaction().commit();
}
}
/**
* Tests instantiation of a DeviceInfoReport.
*/
@Test
public final void deviceInfoReport() {
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
}
/**
* Tests that NetworkInfo cannot be null.
*/
@Test(expectedExceptions = NullPointerException.class)
public final void networkInfoNull() {
new DeviceInfoReport(null, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
}
/**
* Tests that OSInfo cannot be null.
*/
@Test(expectedExceptions = NullPointerException.class)
public final void osInfoNull() {
new DeviceInfoReport(networkInfo, null, firmwareInfo, hardwareInfo, tpmInfo);
}
/**
* Tests that FirmwareInfo cannot be null.
*/
@Test(expectedExceptions = NullPointerException.class)
public final void firmwareInfoNull() {
new DeviceInfoReport(networkInfo, osInfo, null, hardwareInfo, tpmInfo);
}
/**
* Tests that HardwareInfo cannot be null.
*/
@Test(expectedExceptions = NullPointerException.class)
public final void hardwareInfoNull() {
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, null, tpmInfo);
}
/**
* Tests that TPMInfo may be null.
*/
@Test
public final void tpmInfoNull() {
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, hardwareInfo, null);
}
/**
* Tests that the getters for DeviceInfoReport work as expected.
*/
@Test
public final void testGetters() {
DeviceInfoReport deviceInfoReport =
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
Assert.assertEquals(deviceInfoReport.getNetworkInfo(), networkInfo);
Assert.assertEquals(deviceInfoReport.getOSInfo(), osInfo);
Assert.assertEquals(deviceInfoReport.getFirmwareInfo(), firmwareInfo);
Assert.assertEquals(deviceInfoReport.getHardwareInfo(), hardwareInfo);
Assert.assertEquals(deviceInfoReport.getTPMInfo(), tpmInfo);
Assert.assertEquals(deviceInfoReport.getClientApplicationVersion(),
EXPECTED_CLIENT_VERSION);
}
/**
* Tests that the XML is generated correctly.
*
* @throws JAXBException
* in case there are errors marshalling/unmarshalling
*/
@Test
public final void marshalUnmarshalTest() throws JAXBException {
DeviceInfoReport deviceInfoReport =
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
String xml = getXMLFromReport(deviceInfoReport);
DeviceInfoReport deviceInfoReportFromXML = getReportFromXML(xml);
Assert.assertEquals(deviceInfoReportFromXML.getNetworkInfo(), networkInfo);
Assert.assertEquals(deviceInfoReportFromXML.getOSInfo(), osInfo);
Assert.assertEquals(deviceInfoReport.getFirmwareInfo(), firmwareInfo);
Assert.assertEquals(deviceInfoReport.getHardwareInfo(), hardwareInfo);
Assert.assertEquals(deviceInfoReportFromXML.getTPMInfo(), tpmInfo);
Assert.assertEquals(deviceInfoReport.getClientApplicationVersion(),
EXPECTED_CLIENT_VERSION);
}
/**
* Tests that a <code>DeviceInfoReport</code> can be saved in the
* <code>ReportManager</code>.
*/
@Test
public final void testSaveReport() {
final DeviceInfoReport deviceInfoReport = new DeviceInfoReport(
networkInfo, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
final DeviceInfoReport savedReport = (DeviceInfoReport) reportManager
.saveReport(deviceInfoReport);
Assert.assertEquals(savedReport.getNetworkInfo(), networkInfo);
Assert.assertEquals(savedReport.getOSInfo(), osInfo);
Assert.assertEquals(savedReport.getFirmwareInfo(), firmwareInfo);
Assert.assertEquals(savedReport.getHardwareInfo(), hardwareInfo);
Assert.assertEquals(savedReport.getTPMInfo(), tpmInfo);
Assert.assertEquals(deviceInfoReport.getClientApplicationVersion(),
EXPECTED_CLIENT_VERSION);
}
/**
* Tests that a <code>DeviceInfoReport</code> can be saved in the
* <code>ReportManager</code> and then retrieved.
*/
@Test
public final void testGetReport() {
final DeviceInfoReport deviceInfoReport =
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
final DeviceInfoReport savedReport =
(DeviceInfoReport) reportManager.saveReport(deviceInfoReport);
final DeviceInfoReport getReport =
(DeviceInfoReport) reportManager.getReport(savedReport.getId());
Assert.assertEquals(getReport.getNetworkInfo(), networkInfo);
Assert.assertEquals(getReport.getOSInfo(), osInfo);
Assert.assertEquals(getReport.getFirmwareInfo(), firmwareInfo);
Assert.assertEquals(getReport.getHardwareInfo(), hardwareInfo);
Assert.assertEquals(getReport.getTPMInfo(), tpmInfo);
Assert.assertEquals(getReport.getClientApplicationVersion(),
EXPECTED_CLIENT_VERSION);
}
/**
* Tests that a <code>DeviceInfoReport</code> can be saved in the
* <code>ReportManager</code> and then deleted.
*/
@Test
public final void testDeleteReport() {
final DeviceInfoReport deviceInfoReport =
new DeviceInfoReport(networkInfo, osInfo, firmwareInfo, hardwareInfo, tpmInfo);
final DeviceInfoReport savedReport =
(DeviceInfoReport) reportManager.saveReport(deviceInfoReport);
Assert.assertNotNull(savedReport);
final UUID id = savedReport.getId();
Assert.assertNotNull(reportManager.getReport(id));
Assert.assertTrue(reportManager.deleteReport(id));
Assert.assertNull(reportManager.getReport(id));
}
/**
* Creates a DeviceInfoReport instance usable for testing.
*
* @return a test DeviceInfoReport
*/
public static DeviceInfoReport getTestReport() {
return new DeviceInfoReport(
createTestNetworkInfo(), createTestOSInfo(), createTestFirmwareInfo(),
createTestHardwareInfo(), createTPMInfo()
);
}
/**
* Creates a test instance of NetworkInfo.
*
* @return network information for a fake device
*/
public static NetworkInfo createTestNetworkInfo() {
try {
final String hostname = "test.hostname";
final InetAddress ipAddress =
InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
final byte[] macAddress = new byte[] {11, 22, 33, 44, 55, 66};
return new NetworkInfo(hostname, ipAddress, macAddress);
} catch (UnknownHostException e) {
LOGGER.error("error occurred while creating InetAddress");
return null;
}
}
/**
* Creates a test instance of OSInfo.
*
* @return OS information for a fake device
*/
public static OSInfo createTestOSInfo() {
return new OSInfo("test os name", "test os version", "test os arch",
"test distribution", "test distribution release");
}
/**
* Creates a test instance of FirmwareInfo.
*
* @return Firmware information for a fake device
*/
public static FirmwareInfo createTestFirmwareInfo() {
return new FirmwareInfo("test bios vendor", "test bios version", "test bios release date");
}
/**
* Creates a test instance of HardwareInfo.
*
* @return Hardware information for a fake device
*/
public static HardwareInfo createTestHardwareInfo() {
return new HardwareInfo("test manufacturer", "test product name", "test version",
"test really long serial number with many characters", "test really long chassis "
+ "serial number with many characters",
"test really long baseboard serial number with many characters");
}
/**
* Creates a test instance of TPMInfo.
*
* @return TPM information for a fake device
*/
public static final TPMInfo createTPMInfo() {
final short num1 = 1;
final short num2 = 2;
final short num3 = 3;
final short num4 = 4;
return new TPMInfo("test os make", num1, num2, num3, num4,
getTestIdentityCertificate());
}
private static X509Certificate getTestIdentityCertificate() {
X509Certificate certificateValue = null;
InputStream istream = null;
istream = DeviceInfoReportTest.class.getResourceAsStream(
TEST_IDENTITY_CERT
);
try {
if (istream == null) {
throw new FileNotFoundException(TEST_IDENTITY_CERT);
}
CertificateFactory cf = CertificateFactory.getInstance("X.509");
certificateValue = (X509Certificate) cf.generateCertificate(
istream);
} catch (Exception e) {
return null;
} finally {
if (istream != null) {
try {
istream.close();
} catch (IOException e) {
LOGGER.error("test certificate file could not be closed");
}
}
}
return certificateValue;
}
private String getXMLFromReport(final DeviceInfoReport deviceInfoReport)
throws JAXBException {
String xml = null;
JAXBContext context = JAXBContext.newInstance(DeviceInfoReport.class);
Marshaller marshaller = context.createMarshaller();
StringWriter writer = new StringWriter();
marshaller.marshal(deviceInfoReport, writer);
xml = writer.toString();
xml = XMLCleaner.stripNonValidXMLCharacters(xml);
return xml;
}
private DeviceInfoReport getReportFromXML(final String xml)
throws JAXBException {
DeviceInfoReport deviceInfoReport;
JAXBContext context;
context = JAXBContext.newInstance(DeviceInfoReport.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader reader = new StringReader(xml);
deviceInfoReport = (DeviceInfoReport) unmarshaller.unmarshal(reader);
return deviceInfoReport;
}
}

View File

@ -1,23 +0,0 @@
package hirs.data.persist;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
/**
* Base class that autowires a session factory for use of
* any tests that need a database connection.
*/
@ContextConfiguration(classes = PersistenceConfiguration.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class SpringPersistenceTest extends AbstractTestNGSpringContextTests {
/**
* Autowired session factory.
*/
@SuppressWarnings("checkstyle:visibilitymodifier")
@Autowired
protected SessionFactory sessionFactory;
}

View File

@ -1,347 +0,0 @@
package hirs.data.persist;
import hirs.data.persist.certificate.Certificate;
import hirs.persist.DBCertificateManager;
import hirs.persist.DBManager;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import hirs.data.persist.certificate.CertificateTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Tests the functionality in SupplyChainValidationSummary, as well as the persistence of
* SupplyChainValidationSummary and SupplyChainValidation.
*/
public class SupplyChainValidationSummaryTest extends SpringPersistenceTest {
private Device device;
private DeviceGroup deviceGroup;
private List<ArchivableEntity> certificates;
/**
* Create a session factory to use for persistence testing and persist some certificates
* for use by these tests.
*
* @throws Exception if there is a problem deserializing certificates or creating test device
*/
@BeforeClass
public void setup() throws Exception {
certificates = CertificateTest.getAllTestCertificates();
DBCertificateManager certMan = new DBCertificateManager(sessionFactory);
for (ArchivableEntity cert : certificates) {
certMan.save((Certificate) cert);
}
deviceGroup = new DeviceGroup("TestDeviceGroup", "TestDeviceGroupDescription");
DBManager<DeviceGroup> devicGroupMan = new DBManager<>(DeviceGroup.class, sessionFactory);
deviceGroup = devicGroupMan.save(deviceGroup);
device = DeviceTest.getTestDevice("TestDevice");
device.setDeviceGroup(deviceGroup);
DBManager<Device> deviceMan = new DBManager<>(Device.class, sessionFactory);
device = deviceMan.save(device);
}
/**
* Remove test certificates and close the session factory.
*/
@AfterClass
public void teardown() {
DBCertificateManager certManager = new DBCertificateManager(sessionFactory);
for (ArchivableEntity cert : certificates) {
certManager.deleteCertificate((Certificate) cert);
}
}
/**
* Resets the test state to a known good state. This resets
* the database by removing all {@link Certificate} objects.
*/
@AfterMethod
public void resetTestState() {
DBManager<SupplyChainValidationSummary> summaryManager = new DBManager<>(
SupplyChainValidationSummary.class,
sessionFactory
);
for (SupplyChainValidationSummary summary
: summaryManager.getList(SupplyChainValidationSummary.class)) {
summaryManager.deleteById(summary.getId());
}
}
/**
* Tests that an empty summary behaves as expected.
*/
@Test
public void testEmptySummary() {
SupplyChainValidationSummary emptySummary = getTestSummary(
0,
0,
certificates
);
Assert.assertEquals(emptySummary.getDevice(), device);
Assert.assertEquals(emptySummary.getValidations(), Collections.EMPTY_LIST);
Assert.assertEquals(emptySummary.getOverallValidationResult(), AppraisalStatus.Status.PASS);
Assert.assertNotNull(emptySummary.getCreateTime());
}
/**
* Test that a summary can't be created with a null validationIdentifier.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullValidationIdentifier() {
new SupplyChainValidationSummary(null, Collections.emptyList());
}
/**
* Test that a summary can't be created with a null validations list.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullValidationList() {
new SupplyChainValidationSummary(device, null);
}
/**
* Test that summaries with one and two component validations, which both represent successful
* validations, have getters that return the expected information.
*/
@Test
public void testSuccessfulSummary() {
SupplyChainValidationSummary oneValidation = getTestSummary(
1,
0,
certificates
);
Assert.assertEquals(oneValidation.getDevice(), device);
Assert.assertEquals(oneValidation.getValidations().size(), 1);
Assert.assertEquals(oneValidation.getOverallValidationResult(),
AppraisalStatus.Status.PASS);
Assert.assertNotNull(oneValidation.getCreateTime());
SupplyChainValidationSummary twoValidations = getTestSummary(
2,
0,
certificates
);
Assert.assertEquals(twoValidations.getDevice(), device);
Assert.assertEquals(twoValidations.getValidations().size(), 2);
Assert.assertEquals(twoValidations.getOverallValidationResult(),
AppraisalStatus.Status.PASS);
Assert.assertNotNull(twoValidations.getCreateTime());
}
/**
* Test that summaries with one and two component validations, of which one represents an
* unsuccessful validations, have getters that return the expected information.
*/
@Test
public void testUnsuccessfulSummary() {
SupplyChainValidationSummary oneValidation = getTestSummary(
1,
1,
certificates
);
Assert.assertEquals(oneValidation.getDevice(), device);
Assert.assertEquals(oneValidation.getValidations().size(), 1);
Assert.assertEquals(oneValidation.getOverallValidationResult(),
AppraisalStatus.Status.FAIL);
Assert.assertNotNull(oneValidation.getCreateTime());
SupplyChainValidationSummary twoValidations = getTestSummary(
2,
1,
certificates
);
Assert.assertEquals(twoValidations.getDevice(), device);
Assert.assertEquals(twoValidations.getValidations().size(), 2);
Assert.assertEquals(twoValidations.getOverallValidationResult(),
AppraisalStatus.Status.FAIL);
Assert.assertNotNull(twoValidations.getCreateTime());
SupplyChainValidationSummary twoBadValidations = getTestSummary(
2,
2,
certificates
);
Assert.assertEquals(twoBadValidations.getDevice(), device);
Assert.assertEquals(twoBadValidations.getValidations().size(), 2);
Assert.assertEquals(twoBadValidations.getOverallValidationResult(),
AppraisalStatus.Status.FAIL);
Assert.assertNotNull(twoBadValidations.getCreateTime());
}
/**
* Tests that a SupplyChainValidationSummary can be persisted.
*/
@Test
public void testSave() {
DBManager<SupplyChainValidationSummary> supplyMan = new DBManager<>(
SupplyChainValidationSummary.class, sessionFactory
);
SupplyChainValidationSummary summary = getTestSummary(
2,
1,
certificates
);
SupplyChainValidationSummary savedSummary = supplyMan.save(summary);
Assert.assertEquals(savedSummary, summary);
}
/**
* Tests that an empty SupplyChainValidationSummary can be persisted and retrieved.
*/
@Test
public void testSaveAndGetEmpty() {
DBManager<SupplyChainValidationSummary> supplyMan = new DBManager<>(
SupplyChainValidationSummary.class, sessionFactory
);
SupplyChainValidationSummary emptySummary = getTestSummary(
0,
0,
Collections.emptyList()
);
SupplyChainValidationSummary savedEmptySummary = supplyMan.save(emptySummary);
SupplyChainValidationSummary retrievedEmptySummary =
supplyMan.get(savedEmptySummary.getId());
Assert.assertEquals(retrievedEmptySummary, emptySummary);
Assert.assertEquals(retrievedEmptySummary.getValidations().size(), 0);
}
/**
* Tests that a SupplyChainValidationSummary with a single validation can be persisted
* and retrieved.
*/
@Test
public void testSaveAndGetSmall() {
DBManager<SupplyChainValidationSummary> supplyMan = new DBManager<>(
SupplyChainValidationSummary.class, sessionFactory
);
List<ArchivableEntity> singleCert = certificates.subList(0, 1);
SupplyChainValidationSummary smallSummary = getTestSummary(
1,
0,
singleCert
);
SupplyChainValidationSummary savedSmallSummary = supplyMan.save(smallSummary);
SupplyChainValidationSummary retrievedSmallSummary =
supplyMan.get(savedSmallSummary.getId());
Assert.assertEquals(retrievedSmallSummary, smallSummary);
Assert.assertEquals(
new ArrayList<>(retrievedSmallSummary.getValidations())
.get(0).getCertificatesUsed(),
singleCert
);
}
/**
* Tests that a SupplyChainValidationSummary can be retrieved and that its fields are properly
* restored.
*/
@Test
public void testGet() {
DBManager<SupplyChainValidationSummary> supplyMan = new DBManager<>(
SupplyChainValidationSummary.class, sessionFactory
);
SupplyChainValidationSummary summary = getTestSummary(
2,
1,
certificates
);
SupplyChainValidationSummary savedSummary = supplyMan.save(summary);
Assert.assertEquals(savedSummary, summary);
SupplyChainValidationSummary retrievedSummary = supplyMan.get(savedSummary.getId());
Assert.assertNotNull(retrievedSummary);
Assert.assertEquals(
retrievedSummary.getDevice(),
summary.getDevice()
);
Assert.assertEquals(retrievedSummary.getCreateTime(), summary.getCreateTime());
Assert.assertEquals(
retrievedSummary.getOverallValidationResult(),
summary.getOverallValidationResult()
);
Assert.assertEquals(retrievedSummary.getValidations(), summary.getValidations());
SupplyChainValidation failedValidation = null;
for (SupplyChainValidation validation : retrievedSummary.getValidations()) {
if (validation.getResult() != AppraisalStatus.Status.PASS) {
failedValidation = validation;
break;
}
}
Assert.assertNotNull(failedValidation);
Assert.assertEquals(
failedValidation.getCertificatesUsed(),
certificates
);
}
private SupplyChainValidationSummary getTestSummary(
final int numberOfValidations,
final int numFail,
final List<ArchivableEntity> certificates
) {
SupplyChainValidation.ValidationType[] validationTypes =
SupplyChainValidation.ValidationType.values();
if (numberOfValidations > validationTypes.length) {
throw new IllegalArgumentException(String.format(
"Cannot have more than %d validation types",
validationTypes.length
));
}
if (numFail > numberOfValidations) {
throw new IllegalArgumentException(String.format(
"Cannot have more than %d failed validations",
validationTypes.length
));
}
List<SupplyChainValidation> validations = new ArrayList<>();
for (int i = 0; i < numberOfValidations; i++) {
boolean successful = true;
if (i >= (numberOfValidations - numFail)) {
successful = false;
}
AppraisalStatus.Status result = AppraisalStatus.Status.FAIL;
if (successful) {
result = AppraisalStatus.Status.PASS;
}
validations.add(SupplyChainValidationTest.getTestSupplyChainValidation(
validationTypes[i],
result,
certificates
));
}
return new SupplyChainValidationSummary(device, validations);
}
}

View File

@ -1,6 +1,5 @@
package hirs.persist;
import hirs.data.persist.SpringPersistenceTest;
import hirs.data.persist.certificate.CertificateAuthorityCredential;
import org.springframework.util.Assert;
import org.testng.annotations.BeforeClass;

View File

@ -4,7 +4,6 @@ import hirs.appraiser.Appraiser;
import hirs.appraiser.IMAAppraiser;
import hirs.appraiser.TPMAppraiser;
import hirs.appraiser.TestAppraiser;
import hirs.data.persist.SpringPersistenceTest;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.testng.Assert;

View File

@ -2,7 +2,6 @@ package hirs.persist;
import hirs.data.persist.Device;
import hirs.data.persist.DeviceGroup;
import hirs.data.persist.SpringPersistenceTest;
import hirs.data.persist.certificate.Certificate;
import hirs.data.persist.certificate.CertificateAuthorityCredential;
import hirs.data.persist.certificate.CertificateTest;

View File

@ -11,7 +11,6 @@ import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import hirs.data.persist.SpringPersistenceTest;
import hirs.data.persist.TestPolicy;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

View File

@ -14,7 +14,6 @@ import hirs.data.persist.DeviceInfoReport;
import hirs.data.persist.DeviceTest;
import hirs.data.persist.enums.HealthStatus;
import hirs.data.persist.info.NetworkInfo;
import hirs.data.persist.SpringPersistenceTest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

View File

@ -1,7 +1,6 @@
package hirs.persist;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hirs.data.persist.SpringPersistenceTest;
import org.hibernate.LazyInitializationException;
import org.hibernate.StaleObjectStateException;
import org.hibernate.exception.LockAcquisitionException;

View File

@ -6,7 +6,6 @@ import hirs.data.persist.Device;
import hirs.data.persist.DeviceGroup;
import hirs.data.persist.DeviceTest;
import hirs.data.persist.Policy;
import hirs.data.persist.SpringPersistenceTest;
import hirs.data.persist.TestPolicy;
import hirs.data.persist.TestPolicy2;
import org.apache.logging.log4j.LogManager;

View File

@ -6,7 +6,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import hirs.data.persist.SpringPersistenceTest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import hirs.data.persist.info.PortalInfo;

View File

@ -3,7 +3,6 @@ package hirs.persist;
import hirs.data.persist.Device;
import hirs.data.persist.DeviceGroup;
import hirs.data.persist.ReportRequestState;
import hirs.data.persist.SpringPersistenceTest;
import hirs.data.persist.type.ReportRequestType;
import org.testng.Assert;

View File

@ -6,7 +6,6 @@ import hirs.data.persist.AppraisalResult;
import hirs.data.persist.AppraisalStatus;
import hirs.data.persist.ReportSummary;
import hirs.data.persist.SpringPersistenceTest;
import org.apache.commons.lang3.RandomStringUtils;
import org.testng.Assert;
import org.testng.annotations.AfterClass;

View File

@ -137,11 +137,15 @@ subprojects {
reflections: 'org.reflections:reflections:0.10.2',
servlet_api: 'javax.servlet:javax.servlet-api:4.0.1',
slf4j: 'org.slf4j:slf4j-api:1.7.36',
spring_core: ['org.springframework:spring-aop:5.3.19',
'org.springframework:spring-beans:5.3.19',
'org.springframework:spring-context:5.3.19',
'org.springframework:spring-expression:5.3.19',
'org.springframework:spring-orm:5.3.19'],
spring_core: ['org.springframework:spring-aop:5.3.22',
'org.springframework:spring-beans:5.3.22',
'org.springframework:spring-context:5.3.22',
'org.springframework:spring-expression:5.3.22',
'org.springframework:spring-orm:5.3.22'],
spring_boot: ['org.springframework:spring-boot-starter-web: 2.6.10',
'org.springframework:spring-boot-starter-thymeleaf: 2.6.10',
'org.springframework:spring-boot-starter-data-jpa: 2.6.10'],
spring_data: ['org.springframework.data:spring-data-jpa:2.7.2'],
spring_msg: 'org.springframework:spring-messaging:5.3.19',
spring_plugin: 'org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE',
spring_retry: 'org.springframework.retry:spring-retry:1.3.2',