node/test/parallel/test-sqlite-config.js
Bart Louwers f475aea034
sqlite: enable defensive mode by default
PR-URL: https://github.com/nodejs/node/pull/61266
Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
2026-01-20 11:10:53 +00:00

63 lines
2 KiB
JavaScript

'use strict';
const { skipIfSQLiteMissing } = require('../common/index.mjs');
const { test } = require('node:test');
const assert = require('node:assert');
skipIfSQLiteMissing();
const { DatabaseSync } = require('node:sqlite');
function checkDefensiveMode(db) {
function journalMode() {
return db.prepare('PRAGMA journal_mode').get().journal_mode;
}
assert.strictEqual(journalMode(), 'memory');
db.exec('PRAGMA journal_mode=OFF');
switch (journalMode()) {
case 'memory': return true; // journal_mode unchanged, defensive mode must be active
case 'off': return false; // journal_mode now 'off', so defensive mode not active
default: throw new Error('unexpected journal_mode');
}
}
test('by default, defensive mode is on', (t) => {
const db = new DatabaseSync(':memory:');
t.assert.strictEqual(checkDefensiveMode(db), true);
});
test('when passing { defensive: true } as config, defensive mode is on', (t) => {
const db = new DatabaseSync(':memory:', {
defensive: true
});
t.assert.strictEqual(checkDefensiveMode(db), true);
});
test('when passing { defensive: false } as config, defensive mode is off', (t) => {
const db = new DatabaseSync(':memory:', {
defensive: false
});
t.assert.strictEqual(checkDefensiveMode(db), false);
});
test('defensive mode on after calling db.enableDefensive(true)', (t) => {
const db = new DatabaseSync(':memory:');
db.enableDefensive(true);
t.assert.strictEqual(checkDefensiveMode(db), true);
});
test('defensive mode off after calling db.enableDefensive(false)', (t) => {
const db = new DatabaseSync(':memory:', {
defensive: true
});
db.enableDefensive(false);
t.assert.strictEqual(checkDefensiveMode(db), false);
});
test('throws if options.defensive is provided but is not a boolean', (t) => {
t.assert.throws(() => {
new DatabaseSync(':memory:', { defensive: 42 });
}, {
code: 'ERR_INVALID_ARG_TYPE',
message: 'The "options.defensive" argument must be a boolean.',
});
});