207 lines
6.1 KiB
JavaScript

/*
Copyright (c) 2012, 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";
/*jslint newcap: true */
/*global t_basic, verify_t_basic, fail_verify_t_basic */
var udebug = unified_debug.getLogger("TransactionTest.js");
if(! global.t_basic) {
require("./lib.js");
}
/***** Test idle state ***/
var t1 = new harness.ConcurrentTest("testIdle");
t1.run = function() {
var testCase = this;
// idle state
fail_openSession(testCase, function(session) {
var tx = session.currentTransaction();
if (tx.state.name !== 'Idle') {
testCase.fail(new Error('t1 Transaction should start in idle state. Actual: ' +
tx.state.name));
return;
}
if (tx.isActive() !== false) {
testCase.fail(new Error('t1 Idle transaction should not be active.'));
return;
}
if (tx.getRollbackOnly() !== false) {
testCase.fail(new Error('t1 Idle transaction should not be rollback only.'));
return;
}
testCase.pass();
});
};
/***** Test active state ***/
var t2 = new harness.ConcurrentTest("testActive");
t2.run = function() {
var testCase = this;
// idle state
fail_openSession(testCase, function(session) {
var tx = session.currentTransaction();
tx.begin();
if (tx.state.name !== 'Active') {
testCase.fail(new Error('t2 Transaction after begin should be in active state. Actual: ' +
tx.state.name));
return;
}
if (tx.isActive() !== true) {
testCase.fail(new Error('t2 Active transaction should be active.'));
return;
}
if (tx.getRollbackOnly() !== false) {
testCase.fail(new Error('t2 Active transaction should not be rollback only.'));
return;
}
tx.begin(function(err) {
if (!err) {
testCase.fail(new Error('t2 Active transaction should not allow begin.'));
} else {
tx.rollback(function(err) {
if (err) {
testCase.fail(new Error('t2 Active transaction should allow rollback.'));
} else {
testCase.pass();
}
});
}
});
});
};
/***** Test rollback only state ***/
var t3 = new harness.ConcurrentTest("testRollbackOnly");
t3.run = function() {
var testCase = this;
// rollback only state
fail_openSession(testCase, function(session) {
var tx = session.currentTransaction();
tx.begin();
tx.setRollbackOnly();
if (tx.state.name !== 'RollbackOnly') {
testCase.fail(new Error('t3 Transaction after setRollbackOnly should be in rollback only state. Actual: ' +
tx.state.name));
return;
}
if (tx.isActive() !== true) {
testCase.fail(new Error('t3 RollbackOnly transaction should be active.'));
return;
}
if (tx.getRollbackOnly() !== true) {
testCase.fail(new Error('t3 RollbackOnly transaction should be rollback only.'));
return;
}
tx.setRollbackOnly();
if (tx.state.name !== 'RollbackOnly') {
testCase.fail(new Error('t3 Rollback only after setRollbackOnly should be in rollback only state. Actual: ' +
tx.state.name));
return;
}
tx.begin(function(err) {
if (!err) {
testCase.fail(new Error('t3 Rollback only transaction should not allow begin.'));
} else {
tx.rollback(function(err) {
if (err) {
testCase.fail(new Error('t3 Rollback only transaction should allow rollback.'));
} else {
testCase.pass();
}
});
}
});
});
};
var t10 = new harness.SerialTest("testCommit");
t10.run = function() {
udebug.log("t10 run");
var testCase = this;
var t10OnFind = function(err, found) {
udebug.log("t10 OnFind");
if (found.id === 1000) {
testCase.pass();
} else {
testCase.fail('t10 Failed to find 1000');
}
};
var t10OnCommit = function(err, session, persisted) {
udebug.log("t10 OnCommit");
session.find(t_basic, 1000, fail_verify_t_basic, 1000, testCase, false); // should succeed
};
var t10OnPersist = function(err, session, tx, persisted) {
udebug.log("t10 OnPersist");
tx.commit(t10OnCommit, session, persisted);
};
var t10OnSession = function(session) {
udebug.log("t10 OnSession");
var tx = session.currentTransaction();
tx.begin();
var instance = new t_basic(1000, "Employee 1000", 1000, 1000);
session.persist(instance, t10OnPersist, session, tx, instance);
};
fail_openSession(testCase, t10OnSession);
};
var t11 = new harness.SerialTest("testRollback");
t11.run = function() {
var testCase = this;
var t11OnClose = function(err, found, session) {
if (found === null) {
testCase.pass();
} else {
testCase.fail('t11 Found 1100 which was supposed to be rolled back.');
}
};
var t11OnFind = function(err, found, session) {
session.close(t11OnClose, found, session);
};
var t11OnRollback = function(err, session, persisted) {
if (err) {
testCase.fail(err);
} else {
session.find(t_basic, 1100, t11OnFind, session); // should fail
}
};
var t11OnPersist = function(err, session, tx, persisted) {
tx.rollback(t11OnRollback, session, persisted);
};
var t11OnSession = function(session) {
var tx = session.currentTransaction();
tx.begin();
var instance = new t_basic(1100, "Employee 1100", 1100, 1100);
session.persist(instance, t11OnPersist, session, tx, instance);
};
fail_openSession(testCase, t11OnSession);
};
module.exports.tests = [t1, t2, t3, t10, t11];