blob: 322ede931d7f3563ea7c6821f6244ec2309f15e5 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.framework;
import java.util.*;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.queries.*;
/**
* <b>Purpose</b>: Provide write/read load builds functionalities<p>
* <b>Description</b>:<p>
* <b>Responsibilities</b>:<ul>
* <li>
* </ul>
* @author Steven Vo
*/
public class LoadBuildSystem {
public static LoadBuildSummary loadBuild = new LoadBuildSummary();
public static LoadBuildSystem system;
private DatabaseSession session;
public static LoadBuildSummary getSummary() {
return loadBuild;
}
public static LoadBuildSystem getSystem() {
if (system == null) {
system = new LoadBuildSystem();
system.login();
}
return system;
}
public static void main(String[] args) {
LoadBuildSystem system = new LoadBuildSystem();
system.login();
//Don't run this!
//**system.dropTables();**
//**system.createTables();**
//system.populateSampleData();
system.logout();
}
public LoadBuildSystem() {
session = new LoadBuildProject().createDatabaseSession();
}
public DatabaseSession getSession() {
return session;
}
/**
*
* @return boolean
*/
public boolean isConnected() {
return session.isConnected();
}
public void login() {
session.getLogin().useNativeSQL();
session.getLogin().useBatchWriting();
session.getLogin().bindAllParameters();
session.getLogin().cacheAllStatements();
session.getLogin().setMaxBatchWritingSize(50);
session.dontLogMessages();
//session.logMessages();
session.login();
}
public void dropTables() {
try {
session.executeNonSelectingCall(new SQLCall("drop table RESULT"));
session.executeNonSelectingCall(new SQLCall("drop table SUMMARY"));
session.executeNonSelectingCall(new SQLCall("drop table LOADBUILD"));
session.executeNonSelectingCall(new SQLCall("drop sequence result_seq"));
session.executeNonSelectingCall(new SQLCall("drop sequence RESULTSUM_SEQ"));
} catch (Exception ignore) {}
}
/**
* Creates MySQL tables used to store performance data.
*/
public void createTables() {
session.executeNonSelectingCall(new SQLCall("Create table LOADBUILD (\n" +
"id int not null auto_increment, \n" +
"lbtimestamp date, \n" +
"lberrors int, \n" +
"fatalErrors int, \n" +
"loginChoice varchar(100), \n" +
"os varchar(100), \n" +
"toplink_version varchar(100), \n" +
"jvm varchar(100), \n" +
"machine varchar(100), \n" +
"numberOfTests int, \n" +
"lbuserName varchar(50), \n" +
"primary key (id))"));
session.executeNonSelectingCall(new SQLCall("Create table RESULT (\n" +
"id int not null auto_increment, \n" +
"description varchar(2000), \n" +
"exception varchar(2000), \n" +
"name varchar(1000), \n" +
"outcome varchar(100), \n" +
"test_time int, \n" +
"total_time int, \n" +
"summaryId int, \n" +
"lbuildId int, \n" +
"primary key (id))"));
session.executeNonSelectingCall(new SQLCall("Create table SUMMARY (\n" +
"id int not null auto_increment, \n" +
"description varchar(2000), \n" +
"setup_failures int, \n" +
"errors int, \n" +
"fatalErrors int, \n" +
"name varchar(1000), \n" +
"passed int, \n" +
"problems int, \n" +
"setupException varchar(2000), \n" +
"total_time int, \n" +
"totalTests int, \n" +
"warnings int, \n" +
"lbuildId int, \n" +
"parentId int, \n" +
"primary key (id))"));
if (session.getPlatform().supportsUniqueKeyConstraints()
&& !session.getPlatform().requiresUniqueConstraintCreationOnTableCreate()) {
session.executeNonSelectingCall(new SQLCall("ALTER TABLE RESULT ADD CONSTRAINT FK_RESULT_summaryId FOREIGN KEY (summaryId) REFERENCES SUMMARY (id)"));
session.executeNonSelectingCall(new SQLCall("ALTER TABLE RESULT ADD CONSTRAINT FK_RESULT_lbuildId FOREIGN KEY (lbuildId) REFERENCES LOADBUILD (id)"));
session.executeNonSelectingCall(new SQLCall("ALTER TABLE SUMMARY ADD CONSTRAINT FK_LOADBUILD_lbuildId FOREIGN KEY (lbuildId) REFERENCES LOADBUILD (id)"));
session.executeNonSelectingCall(new SQLCall("ALTER TABLE SUMMARY ADD CONSTRAINT FK_LOADBUILD_parentId FOREIGN KEY (parentId) REFERENCES SUMMARY (id)"));
}
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_lbtimestamp", "", false, "lbtimestamp")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_loginChoice", "", false, "loginChoice")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_toplink_version", "", false, "toplink_version")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_machine", "", false, "machine")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("LOADBUILD", "IX_LOADBUILD_lbuserName", "", false, "lbuserName")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("RESULT", "IX_RESULT_name", "", false, "name")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("RESULT", "IX_RESULT_summaryId", "", false, "summaryId")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("RESULT", "IX_RESULT_lbuildId", "", false, "lbuildId")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("SUMMARY", "IX_SUMMARY_lbuildId", "", false, "lbuildId")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("SUMMARY", "IX_SUMMARY_name", "", false, "name")));
session.executeNonSelectingCall(new SQLCall(session.getPlatform().buildCreateIndex("SUMMARY", "IX_SUMMARY_parentId", "", false, "parentId")));
}
public void logout() {
session.logout();
}
public void populateSampleData() {
ReadAllQuery query = new ReadAllQuery(LoadBuildSummary.class);
query.addBatchReadAttribute("results");
query.addBatchReadAttribute("summaries");
query.addBatchReadAttribute(query.getExpressionBuilder().get("summaries").get("results"));
List list = (List)session.executeQuery(query);
Iterator summaries = list.iterator();
System.out.println("Size: " + list.size());
UnitOfWork uow = session.acquireUnitOfWork();
while (summaries.hasNext()) {
LoadBuildSummary summary = (LoadBuildSummary)summaries.next();
for (Iterator<TestResultsSummary> iterator = summary.getSummaries().iterator(); iterator.hasNext(); ) {
iterator.next().getResults();
}
//for (int index = 0; index < 10; index++) {
CopyGroup group = new CopyGroup();
group.setShouldResetPrimaryKey(true);
LoadBuildSummary summaryCopy = (LoadBuildSummary)session.copy(summary, group);
summaryCopy.id = 0;
uow.registerObject(summaryCopy);
//}
}
uow.commit();
list = session.readAllObjects(LoadBuildSummary.class);
System.out.println("Size: " + list.size());
}
public void populate() {
if (loadBuild == null) {
return;
}
UnitOfWork uow = session.acquireUnitOfWork();
loadBuild.timestamp = new java.sql.Timestamp(System.currentTimeMillis());
loadBuild.initializeLoadBuild();
loadBuild.computeNumberOfTestsAndErrors();
uow.registerObject(loadBuild);
uow.commit();
}
/**
* Read all the test summaries, join the load build result.
*/
public Vector readAllTestModelSummaries(org.eclipse.persistence.expressions.Expression expression) {
ReadAllQuery query = new ReadAllQuery(TestResultsSummary.class, expression);
query.addAscendingOrdering("name");
//query.addOrdering(query.getExpressionBuilder().get("loadBuildSummary").get("timestamp").ascending());
query.addJoinedAttribute("loadBuildSummary");
return (Vector)session.executeQuery(query);
}
/**
* Read all the tests, join the load build result.
*/
public Vector readAllTests(org.eclipse.persistence.expressions.Expression expression) {
ReadAllQuery query = new ReadAllQuery(TestResult.class, expression);
query.addAscendingOrdering("name");
//query.addOrdering(query.getExpressionBuilder().get("loadBuildSummary").get("timestamp").ascending());
query.addJoinedAttribute("loadBuildSummary");
return (Vector)session.executeQuery(query);
}
/**
* Save load build and log messages to System.out
*/
public void saveLoadBuild() {
boolean success = true;
try {
login();
populate();
} catch (Exception e) {
System.out.println("Error occurred during saving of test results to database.");
e.printStackTrace();
System.out.println("Saving of test results failed.");
success = false;
}
if (success) {
System.out.println("Saving of test results successful.");
}
loadBuild = new LoadBuildSummary();
logout();
}
/**
* Save load build and log messages to a Writer
*/
public void saveLoadBuild(java.io.Writer log) {
try {
session.setLogLevel(SessionLog.FINE);
session.setLog(log);
login();
populate();
} catch (Exception e) {
e.printStackTrace(System.out);
}
loadBuild = new LoadBuildSummary();
logout();
}
}