use of com.axway.ats.environment.database.model.DbTable in project ats-framework by Axway.
the class Test_MariaDbEnvironmentHandler method createBackupNegativeSkippedColumnIsNotNullable.
@Test(expected = ColumnHasNoDefaultValueException.class)
public void createBackupNegativeSkippedColumnIsNotNullable() throws DatabaseEnvironmentCleanupException, DbException, IOException, ParseException, SQLException {
// the columns meta data
DbRecordValuesList column1MetaData = new DbRecordValuesList();
column1MetaData.add(new DbRecordValue("", "COLUMN_NAME", "name1"));
column1MetaData.add(new DbRecordValue("", "COLUMN_TYPE", "varchar(32)"));
column1MetaData.add(new DbRecordValue("", "COLUMN_DEFAULT", true));
DbRecordValuesList column2MetaData = new DbRecordValuesList();
column2MetaData.add(new DbRecordValue("", "COLUMN_NAME", "name2"));
column2MetaData.add(new DbRecordValue("", "COLUMN_TYPE", "varchar(32)"));
column2MetaData.add(new DbRecordValue("", "COLUMN_DEFAULT", null));
DbRecordValuesList column3MetaData = new DbRecordValuesList();
column3MetaData.add(new DbRecordValue("", "COLUMN_NAME", "name3"));
column3MetaData.add(new DbRecordValue("", "COLUMN_TYPE", "bit(1)"));
column3MetaData.add(new DbRecordValue("", "COLUMN_DEFAULT", 1));
DbRecordValuesList[] columnsMetaData = new DbRecordValuesList[] { column1MetaData, column2MetaData, column3MetaData };
DbRecordValuesList record1Value = new DbRecordValuesList();
record1Value.add(new DbRecordValue("table1", "name1", "value1"));
record1Value.add(new DbRecordValue("table1", "name2", null));
record1Value.add(new DbRecordValue("table1", "name3", "1"));
DbRecordValuesList[] recordValues = new DbRecordValuesList[] { record1Value };
expect(mockDbProvider.getConnection()).andReturn(mockConnection);
expect(mockConnection.getMetaData()).andReturn(metaData);
expect(mockDbConnection.getUser()).andReturn("myUserName").atLeastOnce();
expect(metaData.getDriverMajorVersion()).andReturn(5);
expect(metaData.getDriverMinorVersion()).andReturn(1);
expect(mockDbProvider.select(isA(String.class))).andReturn(columnsMetaData);
expect(mockDbProvider.select(isA(DbQuery.class), eq(DbReturnModes.ESCAPED_STRING))).andReturn(recordValues);
expect(mockDbProvider.select(isA(String.class))).andReturn(columnsMetaData);
expect(mockDbProvider.select(isA(DbQuery.class), eq(DbReturnModes.ESCAPED_STRING))).andReturn(recordValues);
mockFileWriter.write("SET FOREIGN_KEY_CHECKS = 0;" + EOL_MARKER + LINE_SEPARATOR);
mockFileWriter.write("DELETE FROM `table1`;" + EOL_MARKER + LINE_SEPARATOR);
mockFileWriter.write("DELETE FROM `table2`;" + EOL_MARKER + LINE_SEPARATOR);
mockFileWriter.write("LOCK TABLES `table1` WRITE;" + EOL_MARKER + LINE_SEPARATOR);
mockFileWriter.write("INSERT INTO `table1` (name1,name2,name3) VALUES('value1',NULL,0x1);" + EOL_MARKER + LINE_SEPARATOR);
mockFileWriter.flush();
mockFileWriter.write("UNLOCK TABLES;" + EOL_MARKER + LINE_SEPARATOR);
mockFileWriter.write(LINE_SEPARATOR);
replayAll();
DbTable table1 = new DbTable("table1");
List<String> columnsToSkip = new ArrayList<String>();
columnsToSkip.add("name2");
DbTable table2 = new DbTable("table2", "dbo", columnsToSkip);
MariaDbEnvironmentHandler envHandler = new MariaDbEnvironmentHandler(mockDbConnection, mockDbProvider);
envHandler.addTable(table1);
envHandler.addTable(table2);
envHandler.writeBackupToFile(mockFileWriter);
verifyAll();
}
use of com.axway.ats.environment.database.model.DbTable in project ats-framework by Axway.
the class Test_OracleEnvironmentHandler method createBackupNegativeSkippedColumnIsNotNullable.
@Test(expected = ColumnHasNoDefaultValueException.class)
public void createBackupNegativeSkippedColumnIsNotNullable() throws DatabaseEnvironmentCleanupException, DbException, IOException, ParseException {
DbTable table1 = new DbTable("table1");
List<String> columnsToSkip = new ArrayList<String>();
columnsToSkip.add("name2");
DbTable table2 = new DbTable("table2", "dbo", columnsToSkip);
// the columns meta data
DbRecordValuesList column1MetaData = new DbRecordValuesList();
column1MetaData.add(new DbRecordValue("", "COLUMN_NAME", "name1"));
column1MetaData.add(new DbRecordValue("", "DATA_TYPE", "varchar(32)"));
column1MetaData.add(new DbRecordValue("", "DATA_DEFAULT", true));
DbRecordValuesList column2MetaData = new DbRecordValuesList();
column2MetaData.add(new DbRecordValue("", "COLUMN_NAME", "name2"));
column2MetaData.add(new DbRecordValue("", "DATA_TYPE", "varchar(32)"));
column2MetaData.add(new DbRecordValue("", "DATA_DEFAULT", null));
DbRecordValuesList column3MetaData = new DbRecordValuesList();
column3MetaData.add(new DbRecordValue("", "COLUMN_NAME", "name3"));
column3MetaData.add(new DbRecordValue("", "DATA_TYPE", "bit"));
column3MetaData.add(new DbRecordValue("", "DATA_DEFAULT", 1));
DbRecordValuesList[] columnsMetaData = new DbRecordValuesList[] { column1MetaData, column2MetaData, column3MetaData };
DbRecordValuesList record1Value = new DbRecordValuesList();
record1Value.add(new DbRecordValue("table1", "name1", "value1"));
record1Value.add(new DbRecordValue("table1", "name2", null));
record1Value.add(new DbRecordValue("table1", "name3", new String(new char[] { 1 })));
DbRecordValuesList[] recordValues = new DbRecordValuesList[] { record1Value };
OracleEnvironmentHandler envHandler = new OracleEnvironmentHandler(mockDbConnection, mockDbProvider);
envHandler.addTable(table1);
envHandler.addTable(table2);
expect(mockDbConnection.getUser()).andReturn("myUserName").atLeastOnce();
expect(mockDbProvider.select(isA(String.class))).andReturn(columnsMetaData);
expect(mockDbProvider.select(isA(DbQuery.class), eq(DbReturnModes.ESCAPED_STRING))).andReturn(recordValues);
expect(mockDbProvider.select(isA(String.class))).andReturn(columnsMetaData);
expect(mockDbProvider.select(isA(DbQuery.class), eq(DbReturnModes.ESCAPED_STRING))).andReturn(recordValues);
replay(mockDbConnection);
replay(mockDbProvider);
envHandler.writeBackupToFile(mockFileWriter);
verify(mockDbConnection);
verify(mockDbProvider);
}
use of com.axway.ats.environment.database.model.DbTable in project ats-framework by Axway.
the class Test_OracleEnvironmentHandler method createBackupNegativeNoColumns.
@Test()
public void createBackupNegativeNoColumns() throws DatabaseEnvironmentCleanupException, DbException, IOException, ParseException {
DbTable table1 = new DbTable("table1");
DbTable table2 = new DbTable("table2");
OracleEnvironmentHandler envHandler = new OracleEnvironmentHandler(mockDbConnection, mockDbProvider);
envHandler.addTable(table1);
envHandler.addTable(table2);
expect(mockDbConnection.getUser()).andReturn("myUserName");
expect(mockDbProvider.select(isA(String.class))).andReturn(new DbRecordValuesList[] {});
replay(mockDbConnection);
replay(mockDbProvider);
try {
envHandler.writeBackupToFile(mockFileWriter);
} catch (DbException e) {
Assert.assertTrue(e.getMessage() != null && e.getMessage().startsWith("Could not get columns for table"));
}
}
use of com.axway.ats.environment.database.model.DbTable in project ats-framework by Axway.
the class DatabaseBackupRestoreTests method init.
@BeforeMethod
public void init() {
serverBox = new TestBox();
serverBox.setHost(configuration.getDatabaseHost());
serverBox.setDbType(configuration.getDatabaseType());
serverBox.setDbName(configuration.getBackupDatabaseName());
serverBox.setDbUser(configuration.getDatabaseUser());
serverBox.setDbPass(configuration.getDatabasePassword());
serverBox.setDbPort(String.valueOf(configuration.getDbPort()));
// establish DB connection
dbOperations = new DatabaseOperations(serverBox);
dbConn = new DbConnPostgreSQL(configuration.getDatabaseHost(), port, configuration.getBackupDatabaseName(), configuration.getDatabaseUser(), configuration.getDatabasePassword(), null);
// establish tables which to be inspected
dbTables = new ArrayList<>();
dbTables.add(new DbTable(TABLE));
}
use of com.axway.ats.environment.database.model.DbTable in project ats-framework by Axway.
the class ConfigurationParser method parseDbEnvironment.
/**
* Parse the database environment node in the Agent descriptor.
*
* @param dbEnvironmentNode the DB environment node.
* @throws AgentException on error.
*/
private EnvironmentUnit parseDbEnvironment(Node dbEnvironmentNode, String backupFolder) throws AgentException {
// create the connection descriptor
DbConnection dbConnection = createConnection(dbEnvironmentNode.getAttributes());
// read the tables
List<DbTable> dbTables = new ArrayList<DbTable>();
NodeList dbChildNodes = dbEnvironmentNode.getChildNodes();
for (int k = 0; k < dbChildNodes.getLength(); k++) {
Node dbChildNode = dbChildNodes.item(k);
if (dbChildNode.getNodeName().equals(TABLE)) {
String tableName = dbChildNode.getAttributes().getNamedItem("name").getNodeValue();
String schemaName = new String();
String[] tableNames = tableName.split("\\.");
if (!StringUtils.isNullOrEmpty(tableName) && tableNames.length > 1) {
// Note that if the table name contains dot (.), even if the table name is escaped properly, according to the database server,
// we will consider the presence of dot as a sign that the table names is of the format <schema_name>.<table_name>
schemaName = tableNames[0];
tableName = tableNames[1];
}
String[] columnsToExclude = {};
if (dbChildNode.getAttributes().getNamedItem("columnsToExclude") != null) {
columnsToExclude = dbChildNode.getAttributes().getNamedItem("columnsToExclude").getNodeValue().split(",");
}
DbTable dbTable = new DbTable(tableName, schemaName, Arrays.asList(columnsToExclude));
// parse db table 'lock' attribute
if (dbChildNode.getAttributes().getNamedItem("lock") != null) {
if (dbConnection.getDbType().equals(DbConnOracle.DATABASE_TYPE)) {
log.warn("Db table 'lock' attribute is NOT implemented for Oracle yet. " + "Table locking is skipped for the moment.");
}
String nodeValue = dbChildNode.getAttributes().getNamedItem("lock").getNodeValue().trim();
if ("false".equalsIgnoreCase(nodeValue) || "true".equalsIgnoreCase(nodeValue)) {
dbTable.setLockTable(Boolean.parseBoolean(nodeValue));
} else {
log.warn("Invalid db table 'lock' attribute value '" + nodeValue + "'. Valid values are 'true' and 'false'. The default value 'true' will be used.");
}
}
if (dbChildNode.getAttributes().getNamedItem("drop") != null) {
String nodeValue = dbChildNode.getAttributes().getNamedItem("drop").getNodeValue().trim();
if ("false".equalsIgnoreCase(nodeValue) || "true".equalsIgnoreCase(nodeValue)) {
dbTable.setDropTable(Boolean.parseBoolean(nodeValue));
} else {
log.warn("Invalid db table 'drop' attribute value '" + nodeValue + "'. Valid values are 'true' and 'false'. The default value 'false' will be used.");
}
}
// parse db table 'autoIncrementResetValue' attribute
if (dbChildNode.getAttributes().getNamedItem(TABLE_ATTR_AUTOINCR_RESET_VALUE) != null) {
if (dbConnection.getDbType().equals(DbConnOracle.DATABASE_TYPE)) {
throw new AgentException("Db table 'autoIncrementResetValue' attribute is NOT implemented for Oracle yet.");
}
String autoInrcResetValue = dbChildNode.getAttributes().getNamedItem(TABLE_ATTR_AUTOINCR_RESET_VALUE).getNodeValue().trim();
try {
Integer.parseInt(autoInrcResetValue);
} catch (NumberFormatException nfe) {
throw new AgentException("Ivalid db table 'autoIncrementResetValue' attribute value '" + autoInrcResetValue + "'. It must be valid number.");
}
dbTable.setAutoIncrementResetValue(autoInrcResetValue);
}
dbTables.add(dbTable);
}
}
String backupFileName = componentName + "-" + dbConnection.getDb() + ".sql";
// create the environment unit
DatabaseEnvironmentUnit dbEnvironment = new DatabaseEnvironmentUnit(backupFolder, backupFileName, dbConnection, dbTables);
return dbEnvironment;
}
Aggregations