Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 54 additions & 69 deletions test-complete/nodejs-documents-binary-pdf.js
Original file line number Diff line number Diff line change
@@ -1,87 +1,72 @@
/*
* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
*/
var should = require('should');
const should = require('should');

var fs = require('fs');
var stream = require('stream');
var util = require('util');
const fs = require('fs');
const stream = require('stream');
const util = require('util');

var concatStream = require('concat-stream');
var valcheck = require('core-util-is');
var testconfig = require('../etc/test-config-qa.js');
const concatStream = require('concat-stream');
const valcheck = require('core-util-is');
const testconfig = require('../etc/test-config-qa.js');

var marklogic = require('../');
var q = marklogic.queryBuilder;
const marklogic = require('../');
const q = marklogic.queryBuilder;

const dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection);
const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection);
const dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection);

var dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection);
var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection);
var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection);

describe('Binary documents test', function () {
var binaryPath = __dirname + '/data/somePdfFile.pdf';
var uri = '/test/binary/somePdfFile.pdf';
var binaryValue = null;
before(function (done) {
this.timeout(10000);
fs.createReadStream(binaryPath).
pipe(concatStream({ encoding: 'buffer' }, function (value) {
binaryValue = value;
done();
}));
});
const binaryPath = __dirname + '/data/somePdfFile.pdf';
let binaryValue = null;

it('should write the binary with Readable stream', function (done) {
this.timeout(10000);
var uri = '/test/write/somePdfFile.pdf';
var readableBinary = new ValueStream(binaryValue);
//readableBinary.pause();
dbWriter.documents.write({
uri: uri,
contentType: 'application/pdf',
quality: 25,
properties: { prop1: 'foo' },
content: readableBinary
}).
result(function (response) {
response.should.have.property('documents');
done();
}, done);
});
const uri = '/test/write/somePdfFile.pdf';

it('should read the binary with Readable stream', function (done) {
this.timeout(10000);
var uri = '/test/write/somePdfFile.pdf';
dbReader.documents.read(uri).
result(function (documents) {
//console.log(JSON.stringify(documents, null, 2));
JSON.stringify(binaryValue).should.equal(
JSON.stringify(documents[0].content));
done();
}, done);
before(async function () {
binaryValue = await new Promise((resolve, reject) => {
fs.createReadStream(binaryPath)
.pipe(concatStream({ encoding: 'buffer' }, function (value) {
resolve(value);
}))
.on('error', reject);
});
});

it('should read the binary document metadata', function (done) {
this.timeout(10000);
var uri = '/test/write/somePdfFile.pdf';
dbReader.documents.read({ uris: uri, categories: ['metadata'] })
.result(function (documents) {
var document = documents[0];
document.quality.should.equal(25);
document.properties.prop1.should.equal('foo');
done();
}, done);
});
it('should write, read, read metadata, verify and delete the binary pdf content', async function () {

it('should delete the pdf file', function (done) {
dbAdmin.documents.removeAll({
all: true
}).
result(function (response) {
done();
}, done);
});
const readableBinary = new ValueStream(binaryValue);
try {
const writeResponse = await dbWriter.documents.write({
uri: uri,
contentType: 'application/pdf',
quality: 25,
properties: { prop1: 'foo' },
content: readableBinary
}).result();
writeResponse.should.have.property('documents');

const docReadResp = await dbReader.documents.read(uri).result();
docReadResp[0].contentType.should.equal('application/pdf');
docReadResp[0].content.length.should.equal(binaryValue.length);
Buffer.compare(binaryValue, docReadResp[0].content).should.equal(0);

const docReadRespMeta = await dbReader.documents.read(
{ uris: uri, categories: ['metadata'] }
).result();
docReadRespMeta[0].quality.should.equal(25);
docReadRespMeta[0].properties.prop1.should.equal('foo');

// original test deleted all documents. This one just deletes the one we wrote.
await dbAdmin.documents.remove(uri).result();

} catch (error) {
console.error(error);
throw error;
}
});
});

function ValueStream(value) {
Expand Down
133 changes: 67 additions & 66 deletions test-complete/nodejs-documents-read-chunk.js
Original file line number Diff line number Diff line change
@@ -1,83 +1,84 @@
/*
* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
*/
var should = require('should');
const should = require('should');

var fs = require('fs');
var stream = require('stream');
var util = require('util');
const fs = require('fs');
const stream = require('stream');
const util = require('util');

var concatStream = require('concat-stream');
var valcheck = require('core-util-is');
var testconfig = require('../etc/test-config-qa.js');
const concatStream = require('concat-stream');
const valcheck = require('core-util-is');
const testconfig = require('../etc/test-config-qa.js');

var marklogic = require('../');
var q = marklogic.queryBuilder;
const marklogic = require('../');
const q = marklogic.queryBuilder;

var dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection);
var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection);
var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection);
const dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection);
const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection);
const dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection);

describe('Binary documents test', function () {
var binaryPath = __dirname + '/data/somePdfFile.pdf';
var uri = '/test/binary/somePdfFile.pdf';
var binaryValue = null;
before(function (done) {
this.timeout(10000);
fs.createReadStream(binaryPath).
pipe(concatStream({ encoding: 'buffer' }, function (value) {
binaryValue = value;
done();
}));
});
const binaryPath = __dirname + '/data/somePdfFile.pdf';
let binaryValue = null;

const uri = '/test/binary/somePdfFile.pdf';

it('should write the binary with Readable stream', function (done) {
this.timeout(10000);
var uri = '/test/write/somePdfFile.pdf';
var readableBinary = new ValueStream(binaryValue);
//readableBinary.pause();
dbWriter.documents.write({
uri: uri,
contentType: 'application/pdf',
quality: 25,
properties: { prop1: 'foo' },
content: readableBinary
}).
result(function (response) {
response.should.have.property('documents');
done();
}, done);
before(async function () {
binaryValue = await new Promise((resolve, reject) => {
fs.createReadStream(binaryPath)
.pipe(concatStream({ encoding: 'buffer' }, function (value) {
resolve(value);
}))
.on('error', reject);
});
});

it('should wait for the document to be written', function (done) {
setTimeout(function () {
done();
}, 10000);
});
it('should write, read using stream, verify and delete the binary content', async function () {

it('should read the binary in chunk', function (done) {
this.timeout(10000);
var uri = '/test/write/somePdfFile.pdf';
setTimeout(function () {
dbReader.documents.read(uri).stream('chunked').
on('data', function (data) {
var strData = data.toString();
strData.should.containEql('CVISION Technologies');
}).
on('end', function () {
done();
}, done);
}, 3000);
});
it('should delete all documents', function (done) {
dbAdmin.documents.removeAll({
all: true
}).
result(function (response) {
done();
}, done);
});
let readableBinary = new ValueStream(binaryValue);
try {
const response = await dbWriter.documents.write({
uri: uri,
contentType: 'application/pdf',
quality: 25,
properties: { prop1: 'foo' },
content: readableBinary
}).result();

response.should.have.property('documents');

const streamData = await new Promise((resolve, reject) => {
const chunks = [];
const readStream = dbReader.documents.read(uri).stream('chunked');

readStream.on('data', function (data) {
chunks.push(data);
});

readStream.on('end', function () {
resolve(Buffer.concat(chunks));
});

readStream.on('error', function (error) {
reject(error);
});
});

Buffer.compare(binaryValue, streamData).should.equal(0);

// Verify the binary content has a string near the end of the file
const strData = streamData.toString();
strData.should.containEql('CVISION Technologies');

// original test deleted all documents. This one just deletes the one we wrote.
await dbAdmin.documents.remove(uri).result();

} catch (error) {
console.error("Error writing document: ", error);
throw error;
}
});
});

function ValueStream(value) {
Expand Down