mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-20 05:05:47 +01:00
169 lines
4.9 KiB
TypeScript
169 lines
4.9 KiB
TypeScript
|
import "../../src/Player";
|
||
|
|
||
|
import { loadAllServers, saveAllServers } from "../../src/Server/AllServers";
|
||
|
|
||
|
// Direct tests of loading and saving.
|
||
|
// Tests here should try to be comprehensive (cover as much stuff as possible)
|
||
|
// without requiring burdensome levels of maintenance when legitimate changes
|
||
|
// are made.
|
||
|
|
||
|
// Get a stable clock so we don't have time-based diffs.
|
||
|
function freezeTime() {
|
||
|
// You're about to hack time, are you sure? YES/NO
|
||
|
const RealDate = Date;
|
||
|
Date = function () {
|
||
|
return new RealDate(1678834800000);
|
||
|
};
|
||
|
Date.now = () => 1678834800000;
|
||
|
}
|
||
|
|
||
|
// Savegame generated from dev on 2023-03-12, mostly empty game with a few
|
||
|
// tweaks. A RunningScript was added in-game to test the one bit of
|
||
|
// non-trivial machinery involved in save/load.
|
||
|
//
|
||
|
// Most of the Servers have been removed to reduce space. Default values have
|
||
|
// been removed both for space, and to test that they are added correctly.
|
||
|
function loadStandardServers() {
|
||
|
loadAllServers(String.raw`{
|
||
|
"home": {
|
||
|
"ctor": "Server",
|
||
|
"data": {
|
||
|
"hasAdminRights": true,
|
||
|
"hostname": "home",
|
||
|
"ip": "67.4.8.1",
|
||
|
"isConnectedTo": true,
|
||
|
"maxRam": 8,
|
||
|
"messages": [
|
||
|
"hackers-starting-handbook.lit"
|
||
|
],
|
||
|
"organizationName": "Home PC",
|
||
|
"programs": [
|
||
|
"NUKE.exe"
|
||
|
],
|
||
|
"ramUsed": 1.6,
|
||
|
"runningScripts": [
|
||
|
{
|
||
|
"ctor": "RunningScript",
|
||
|
"data": {
|
||
|
"args": [],
|
||
|
"filename": "script.js",
|
||
|
"logs": [
|
||
|
"I shouldn't even be saved, since I'm temporary"
|
||
|
],
|
||
|
"logUpd": true,
|
||
|
"offlineRunningTime": 0.01,
|
||
|
"onlineRunningTime": 7.210000000000004,
|
||
|
"pid": 3,
|
||
|
"ramUsage": 1.6,
|
||
|
"server": "home",
|
||
|
"temporary": true,
|
||
|
"dependencies": [
|
||
|
{
|
||
|
"filename": "script.js",
|
||
|
"url": "blob:http://localhost/302fe9e5-2ec3-4ed7-bb5a-4f8f4a85f46d",
|
||
|
"moduleSequenceNumber": 2
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"ctor": "RunningScript",
|
||
|
"data": {
|
||
|
"args": [],
|
||
|
"filename": "script.js",
|
||
|
"logs": [
|
||
|
"I'm a log line that should be pruned",
|
||
|
"Another log line"
|
||
|
],
|
||
|
"logUpd": true,
|
||
|
"offlineRunningTime": 0.01,
|
||
|
"onlineRunningTime": 7.210000000000004,
|
||
|
"pid": 2,
|
||
|
"ramUsage": 1.6,
|
||
|
"server": "home",
|
||
|
"dependencies": [
|
||
|
{
|
||
|
"filename": "script.js",
|
||
|
"url": "blob:http://localhost/302fe9e5-2ec3-4ed7-bb5a-4f8f4a85f46d",
|
||
|
"moduleSequenceNumber": 2
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
],
|
||
|
"scripts": [
|
||
|
{
|
||
|
"ctor": "Script",
|
||
|
"data": {
|
||
|
"code": "/** @param {NS} ns */\\nexport async function main(ns) {\\n return ns.asleep(1000000);\\n}",
|
||
|
"filename": "script.js",
|
||
|
"module": {},
|
||
|
"dependencies": [
|
||
|
{
|
||
|
"filename": "script.js",
|
||
|
"url": "blob:http://localhost/e0abfafd-2c73-42fc-9eea-288c03820c47",
|
||
|
"moduleSequenceNumber": 5
|
||
|
}
|
||
|
],
|
||
|
"ramUsage": 1.6,
|
||
|
"server": "home",
|
||
|
"moduleSequenceNumber": 5,
|
||
|
"ramUsageEntries": [
|
||
|
{
|
||
|
"type": "misc",
|
||
|
"name": "baseCost",
|
||
|
"cost": 1.6
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
],
|
||
|
"serversOnNetwork": [
|
||
|
"n00dles"
|
||
|
],
|
||
|
"purchasedByPlayer": true
|
||
|
}
|
||
|
},
|
||
|
"n00dles": {
|
||
|
"ctor": "Server",
|
||
|
"data": {
|
||
|
"hostname": "n00dles",
|
||
|
"ip": "61.6.6.2",
|
||
|
"maxRam": 4,
|
||
|
"organizationName": "Noodle Bar",
|
||
|
"serversOnNetwork": [
|
||
|
"home"
|
||
|
],
|
||
|
"moneyAvailable": 70000,
|
||
|
"moneyMax": 1750000,
|
||
|
"numOpenPortsRequired": 0,
|
||
|
"serverGrowth": 3000
|
||
|
}
|
||
|
}
|
||
|
}`); // Fix confused highlighting `
|
||
|
}
|
||
|
|
||
|
test("load/saveAllServers", () => {
|
||
|
// Feed a JSON object through loadAllServers/saveAllServers.
|
||
|
// The object is a pruned set of servers that was extracted from a real (dev) game.
|
||
|
|
||
|
freezeTime();
|
||
|
loadStandardServers();
|
||
|
|
||
|
// Re-stringify with indenting for nicer diffs
|
||
|
const result = saveAllServers(/*excludeRunningScripts=*/ false);
|
||
|
expect(JSON.stringify(JSON.parse(result), null, 2)).toMatchSnapshot();
|
||
|
});
|
||
|
|
||
|
test("load/saveAllServers pruning RunningScripts", () => {
|
||
|
// Feed a JSON object through loadAllServers/saveAllServers.
|
||
|
// The object is a pruned set of servers that was extracted from a real (dev) game.
|
||
|
|
||
|
freezeTime();
|
||
|
loadStandardServers();
|
||
|
|
||
|
// Re-stringify with indenting for nicer diffs
|
||
|
const result = saveAllServers(/*excludeRunningScripts=*/ true);
|
||
|
expect(JSON.stringify(JSON.parse(result), null, 2)).toMatchSnapshot();
|
||
|
});
|