155 lines
4.1 KiB
JavaScript
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;
|
|
};
|