mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Generic tools for recording pycalls, deterministic mode.
Summary: Replaces https://phab.getgrist.com/D2854 Refactoring of NSandbox: - Simplify arguments to NSandbox.spawn. Only half the arguments were used depending on the flavour, adding a layer of confusion. - Ensure the same environment variables are passed to both flavours of sandbox - Simplify passing down environment variables. Implement deterministic mode with libfaketime and a seeded random instance. - Include static prebuilt libfaketime.so.1, may need another solution in future for other platforms. Recording pycalls: - Add script recordDocumentPyCalls.js to open a single document outside of tests. - Refactor out recordPyCalls.ts to support various uses. - Add afterEach hook to save all pycalls from server tests under $PYCALLS_DIR - Make docTools usable without mocha. - Add useLocalDoc and loadLocalDoc for loading non-fixture documents Test Plan: Made a document with formulas NOW() and UUID() Compare two document openings in normal mode: diff <(test/recordDocumentPyCalls.js samples/d4W6NrzCMNVSVD6nWgNrGC.grist /dev/stdout) \ <(test/recordDocumentPyCalls.js samples/d4W6NrzCMNVSVD6nWgNrGC.grist /dev/stdout) Output: < 1623407499.58132, --- > 1623407499.60376, 1195c1195 < "B": "bd2487f6-63c9-4f02-bbbc-5c0d674a2dc6" --- > "B": "22e1a4fd-297f-4b86-91a2-bc42cc6da4b2" `export DETERMINISTIC_MODE=1` and repeat. diff is empty! Reviewers: paulfitz Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D2857
This commit is contained in:
@@ -260,19 +260,29 @@ exports.fixturesRoot = fixturesRoot;
|
||||
exports.appRoot = getAppRoot();
|
||||
|
||||
/**
|
||||
* Copy the given filename from the fixtures directory (test/fixtures) to the provided copyPath.
|
||||
* Copy the given filename from the fixtures directory (test/fixtures)
|
||||
* to the storage manager root.
|
||||
* @param {string} alias - Optional alias that lets you rename the document on disk.
|
||||
*/
|
||||
function useFixtureDoc(fileName, storageManager, alias = fileName) {
|
||||
var srcPath = path.resolve(fixturesRoot, "docs", fileName);
|
||||
var docName = path.basename(alias ? alias : fileName, ".grist");
|
||||
return docUtils.createNumbered(docName, "-",
|
||||
name => docUtils.createExclusive(storageManager.getPath(name))
|
||||
)
|
||||
.tap(docName => log.info("Using fixture %s as %s", fileName, docName + ".grist"))
|
||||
.tap(docName => docUtils.copyFile(srcPath, storageManager.getPath(docName)))
|
||||
.tap(docName => storageManager.markAsChanged(docName));
|
||||
return useLocalDoc(srcPath, storageManager, alias)
|
||||
.tap(docName => log.info("Using fixture %s as %s", fileName, docName + ".grist"))
|
||||
}
|
||||
exports.useFixtureDoc = useFixtureDoc;
|
||||
|
||||
/**
|
||||
* Copy the given filename from srcPath to the storage manager root.
|
||||
* @param {string} alias - Optional alias that lets you rename the document on disk.
|
||||
*/
|
||||
function useLocalDoc(srcPath, storageManager, alias = srcPath) {
|
||||
var docName = path.basename(alias || srcPath, ".grist");
|
||||
return docUtils.createNumbered(docName, "-",
|
||||
name => docUtils.createExclusive(storageManager.getPath(name))
|
||||
)
|
||||
.tap(docName => docUtils.copyFile(srcPath, storageManager.getPath(docName)))
|
||||
.tap(docName => storageManager.markAsChanged(docName));
|
||||
}
|
||||
exports.useLocalDoc = useLocalDoc;
|
||||
|
||||
exports.assert = assert;
|
||||
|
||||
Reference in New Issue
Block a user