170 lines
8.2 KiB
JavaScript

/*
Copyright (c) 2013, 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
*/
"use strict";
/***** Failed find should not set rollback only ***/
var t1 = new harness.ConcurrentTest("testFindRollbackOnly");
t1.run = function() {
var testCase = this;
// use the domain object and primitive to find an instance
var from = global.t_basic;
var key = 999;
fail_openSession(testCase, function(session) {
testCase.errorIfTrue('t1 transaction before begin should not be active', session.currentTransaction().isActive());
session.currentTransaction().begin();
testCase.errorIfNotTrue('t1 transaction after begin should be active', session.currentTransaction().isActive());
// key and testCase are passed to fail_verify_t_basic as extra parameters
session.find(from, key, function(err, object) {
testCase.errorIfNotTrue('t1 transaction after failed find should be active', session.currentTransaction().isActive());
testCase.errorIfTrue('t1 rollback only after failed find should be false', session.currentTransaction().getRollbackOnly());
testCase.errorIfNotNull('t1 object should be null', object);
session.currentTransaction().commit(function(err) {
// should succeed
if (err) {
testCase.fail('t1 commit after find failure should succeed.');
} else {
testCase.failOnError();
}
});
});
});
};
/***** Failed persist should set rollback only ***/
var t2 = new harness.ConcurrentTest("testPersistRollbackOnly");
t2.run = function() {
var testCase = this;
// use the domain object to persist an instance
var object = new global.t_basic(0, 'Employee 0', 0, 0);
fail_openSession(testCase, function(session) {
testCase.errorIfTrue('t2 transaction before begin should not be active', session.currentTransaction().isActive());
session.currentTransaction().begin();
testCase.errorIfNotTrue('t2 transaction after begin should be active', session.currentTransaction().isActive());
session.persist(object, function(err) {
testCase.errorIfNotTrue('t2 transaction after failed persist should be active', session.currentTransaction().isActive());
testCase.errorIfNotTrue('t2 rollback only after failed persist should be true', session.currentTransaction().getRollbackOnly());
session.currentTransaction().commit(function(err) {
testCase.errorIfNotTrue('t2 transaction after failed persist commit should be active', session.currentTransaction().isActive());
testCase.errorIfNotTrue('t2 rollback only after failed persist commit should be true', session.currentTransaction().getRollbackOnly());
// should fail
if (err) {
session.currentTransaction().rollback(function(err) {
// should succeed
testCase.errorIfTrue('t2 transaction after failed persist commit rollback should not be active', session.currentTransaction().isActive());
testCase.errorIfTrue('t2 rollback only after failed persist commit rollback should be false', session.currentTransaction().getRollbackOnly());
if (err) {
testCase.appendErrorMessage('t2 rollback after failed persist commit should succeed. ' + err);
testCase.failOnError();
} else {
testCase.pass();
}
});
} else {
testCase.appendErrorMessage('t2 commit after persist failure should fail.');
testCase.failOnError();
}
});
});
});
};
/***** Failed remove should set rollback only ***/
var t3 = new harness.ConcurrentTest("testRemoveRollbackOnly");
t3.run = function() {
var testCase = this;
// use the domain object and primitive to delete a non-existent instance
var from = global.t_basic;
var key = 999;
fail_openSession(testCase, function(session) {
testCase.errorIfTrue('t3 transaction before begin should not be active', session.currentTransaction().isActive());
session.currentTransaction().begin();
testCase.errorIfNotTrue('t3 transaction after begin should be active', session.currentTransaction().isActive());
session.remove(from, key, function(err) {
testCase.errorIfNotTrue('t3 transaction after failed remove should be active', session.currentTransaction().isActive());
testCase.errorIfNotTrue('t3 rollback only after failed remove should be true', session.currentTransaction().getRollbackOnly());
session.currentTransaction().commit(function(err) {
testCase.errorIfNotTrue('t3 transaction after failed remove commit should be active', session.currentTransaction().isActive());
testCase.errorIfNotTrue('t3 rollback only after failed remove commit should be true', session.currentTransaction().getRollbackOnly());
// should fail
if (err) {
session.currentTransaction().rollback(function(err) {
// should succeed
testCase.errorIfTrue('t3 transaction after failed remove commit rollback should not be active', session.currentTransaction().isActive());
testCase.errorIfTrue('t3 rollback only after failed remove commit rollback should be false', session.currentTransaction().getRollbackOnly());
if (err) {
testCase.appendErrorMessage('t3 rollback after failed remove commit should succeed. ' + err);
testCase.failOnError();
} else {
testCase.pass();
}
});
} else {
testCase.appendErrorMessage('t3 commit after remove failure should fail.');
testCase.failOnError();
}
});
});
});
};
/***** Failed update should set rollback only ***/
var t4 = new harness.ConcurrentTest("testUpdateRollbackOnly");
t4.run = function() {
var testCase = this;
// use the domain object and primitive to delete a non-existent instance
var object = new global.t_basic(999, 'Employee 0', 0, 0);
fail_openSession(testCase, function(session) {
testCase.errorIfTrue('t4 transaction before begin should not be active', session.currentTransaction().isActive());
session.currentTransaction().begin();
testCase.errorIfNotTrue('t4 transaction after begin should be active', session.currentTransaction().isActive());
session.update(object, function(err) {
testCase.errorIfNotTrue('t4 transaction after failed update should be active', session.currentTransaction().isActive());
testCase.errorIfNotTrue('t4 rollback only after failed update should be true', session.currentTransaction().getRollbackOnly());
session.currentTransaction().commit(function(err) {
testCase.errorIfNotTrue('t4 transaction after failed update commit should be active', session.currentTransaction().isActive());
testCase.errorIfNotTrue('t4 rollback only after failed update commit should be true', session.currentTransaction().getRollbackOnly());
// should fail
if (err) {
session.currentTransaction().rollback(function(err) {
// should succeed
testCase.errorIfTrue('t4 transaction after failed update commit rollback should not be active', session.currentTransaction().isActive());
testCase.errorIfTrue('t4 rollback only after failed update commit rollback should be false', session.currentTransaction().getRollbackOnly());
if (err) {
testCase.appendErrorMessage('t4 rollback after failed update commit should succeed. ' + err);
testCase.failOnError();
} else {
testCase.pass();
}
});
} else {
testCase.appendErrorMessage('t4 commit after update failure should fail.');
testCase.failOnError();
}
});
});
});
};
module.exports.tests = [t1, t2, t3, t4];