Files
xml-streamer/test/performance.spec.ts

104 lines
3.4 KiB
TypeScript

import fs from "fs";
import "mocha";
import should from "should";
import stream from "stream";
import zlib from "zlib";
import { XmlParser } from "../src/parser";
describe("performance testing", () => {
it("should properly parse more than 500 MB of file.", function(done) {
const parser = new XmlParser({ resourcePath: "/items/item" });
// var wsStream = fs.createWriteStream('./test/TestFiles/MB_and_GB_size_files/MBFile.xml')
// var rsStream = fs.createReadStream('./test/TestFiles/MB_and_GB_size_files/MBFile.xml')
let dataEventCount = 0;
// var maxRSSMemoryTaken = 0
// var rss
const startTime = Date.now();
const xmlStream = new stream.Readable();
xmlStream._read = function noop() {
// nop
};
let dataChunk;
this.timeout(900000);
const firstChunk = fs.readFileSync("./test/TestFiles/MB_and_GB_size_files/firstChunk.xml");
xmlStream.push(firstChunk);
for (let i = 0; i < 2200; i++) {
dataChunk = fs.readFileSync("./test/TestFiles/MB_and_GB_size_files/repetitiveChunk.xml");
xmlStream.push(dataChunk);
}
const endingChunk = fs.readFileSync("./test/TestFiles/MB_and_GB_size_files/endingChunk.xml");
xmlStream.push(endingChunk);
xmlStream.push(null);
parser.on("data", (data) => {
// rss = process.memoryUsage().rss
// if (rss > maxRSSMemoryTaken) maxRSSMemoryTaken = rss
dataEventCount++;
});
parser.on("error", (err) => {
should(err).not.be.ok();
done(err);
});
parser.on("end", () => {
// console.log('dataEventCount=', dataEventCount)
// console.log('RSS memory=', rss)
const TimeTaken = Date.now() - startTime;
// console.log('time taken=', TimeTaken)
should(TimeTaken).be.belowOrEqual(300000);
should(dataEventCount).equal(4558400);
done();
});
xmlStream.pipe(parser);
});
it("should properly parse more than 1 GB of file.", function(done) {
const parser = new XmlParser({ resourcePath: "/items/item" });
// var wsStream = fs.createWriteStream('./test/TestFiles/MB_and_GB_size_files/MBFile.xml')
// var rsStream = fs.createReadStream('./test/TestFiles/MB_and_GB_size_files/MBFile.xml')
let dataEventCount = 0;
// var maxRSSMemoryTaken = 0
// var rss
const startTime = Date.now();
const xmlStream = new stream.Readable();
xmlStream._read = function noop() {
// nop
};
let dataChunk;
this.timeout(900000);
const firstChunk = fs.readFileSync("./test/TestFiles/MB_and_GB_size_files/firstChunk.xml");
xmlStream.push(firstChunk);
for (let i = 0; i < 4400; i++) {
dataChunk = fs.readFileSync("./test/TestFiles/MB_and_GB_size_files/repetitiveChunk.xml");
xmlStream.push(dataChunk);
}
const endingChunk = fs.readFileSync("./test/TestFiles/MB_and_GB_size_files/endingChunk.xml");
xmlStream.push(endingChunk);
xmlStream.push(null);
parser.on("data", (data) => {
// rss = process.memoryUsage().rss
// if (rss > maxRSSMemoryTaken) maxRSSMemoryTaken = rss
dataEventCount++;
});
parser.on("error", (err) => {
should(err).not.be.ok();
done(err);
});
parser.on("end", () => {
// console.log('dataEventCount=', dataEventCount)
// console.log('RSS memory=', rss)
const TimeTaken = Date.now() - startTime;
// console.log('time taken=', TimeTaken)
should(TimeTaken).be.belowOrEqual(700000);
should(dataEventCount).equal(9116800);
done();
});
xmlStream.pipe(parser);
});
});