155 lines
4.1 KiB
JavaScript

/*
Copyright (c) 2012, 2013, 2014 Oracle and/or its affiliates. All rights
reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 of
the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301 USA
*/
/*global adapter */
"use strict";
var path = require("path"),
fs = require("fs"),
dbServiceProvider = require(mynode.spi).getDBServiceProvider(adapter),
metadataManager = dbServiceProvider.getDBMetadataManager();
/* Manage test_connection.js file:
Read it if it exists.
If it doesn't exist, copy it from the standard template in lib/
*/
function getTestConnectionProperties() {
var props_file = path.join(mynode.fs.suites_dir, "test_connection.js");
var props_template = path.join(mynode.fs.suites_dir, "lib", "test_connection_js.dist");
var existsSync = fs.existsSync || path.existsSync;
var properties = null;
var f1, f2;
if(! existsSync(props_file)) {
try {
f1 = fs.createReadStream(props_template);
f2 = fs.createWriteStream(props_file);
f1.pipe(f2);
f1.on('end', function() {});
}
catch(e1) {
console.log(e1);
}
}
try {
properties = require(props_file);
}
catch(e2) {
}
return properties;
}
function getAdapterProperties(adapter) {
var impl = adapter || global.adapter;
var p = new mynode.ConnectionProperties(impl);
return p;
}
function merge(target, m) {
var p;
for(p in m) {
if(m.hasOwnProperty(p)) {
target[p] = m[p];
}
}
}
function getConnectionProperties() {
var adapterProps = getAdapterProperties();
var localConnectionProps = getTestConnectionProperties();
merge(adapterProps, localConnectionProps);
return adapterProps;
}
/** Set global test connection properties */
global.test_conn_properties = getConnectionProperties();
/** Metadata management */
global.sqlCreate = function(suite, callback) {
metadataManager.createTestTables(global.test_conn_properties, suite.name, callback);
};
global.sqlDrop = function(suite, callback) {
metadataManager.dropTestTables(global.test_conn_properties, suite.name, callback);
};
/** Open a session or fail the test case */
global.fail_openSession = function(testCase, callback) {
var promise;
if (arguments.length === 0) {
throw new Error('Fatal internal exception: fail_openSession must have 1 or 2 parameters: testCase, callback');
}
var properties = global.test_conn_properties;
var mappings = testCase.mappings;
promise = mynode.openSession(properties, mappings, function(err, session) {
if (callback && err) {
testCase.fail(err);
return;
}
testCase.session = session;
if (typeof callback !== 'function') {
return;
}
try {
callback(session, testCase);
}
catch(e) {
testCase.appendErrorMessage(e);
testCase.stack = e.stack;
testCase.failOnError();
}
});
return promise;
};
/** Connect or fail the test case */
global.fail_connect = function(testCase, callback) {
var promise;
if (arguments.length === 0) {
throw new Error('Fatal internal exception: fail_connect must have 1 or 2 parameters: testCase, callback');
}
var properties = global.test_conn_properties;
var mappings = testCase.mappings;
promise = mynode.connect(properties, mappings, function(err, sessionFactory) {
if (callback && err) {
testCase.fail(err);
return;
}
testCase.sessionFactory = sessionFactory;
if (typeof callback !== 'function') {
return;
}
try {
callback(sessionFactory, testCase);
}
catch(e) {
testCase.appendErrorMessage(e);
testCase.stack = e.stack;
testCase.failOnError();
}
});
return promise;
};