UNPKG

orwelldb

Version:

Library, wich helps syncronize blockchain and any database use datascript protocol to write operations (can be wroten in blockchain transactions hex like scriptSig or scriptPubKey)

196 lines (143 loc) 6.74 kB
var datascript_builder = require('../datascript/datascript_build'); var datascript_parser = require('../datascript/datascript_parse') var datascript = require('../datascript/index') var assert = require('assert'); var fs = require('fs'); var pem = fs.readFileSync('./_tests/pem').toString(); var obj = {id: 1, type: 'post', title: 'test', text: 'qweqwe123'}; //data without encryption describe('datascript build/parse script no encryption', function () { it('should be okay build', function () { var dscript = new datascript_builder() .setOp('write') .setDataSet('posts') .setJson(obj); assert.equal(dscript.build().toString('hex'), "2005706f737473375435010093e78d54050004020269640104047479706504706f737404057469746c65047465737404047465787409717765717765313233") }); it('should be okay parse', function () { var dparse = new datascript_parser( "2005706f737473375435010093e78d54050004020269640104047479706504706f737404057469746c65047465737404047465787409717765717765313233"); assert.equal(JSON.stringify(dparse.getContent()), JSON.stringify(obj)); }); }); //data with encryption describe('datascript build script + encrypt with RSA', function () { it('should be okay', function () { var dscript = new datascript_builder({ encrypt: 'rsa', pem: pem }) .setOp('write') .setDataSet('posts') .setJson(obj); var dparse = new datascript_parser(dscript.build().toString('hex'), { pem: pem }); assert.equal(dparse.isReadable(), true); assert.equal(dparse.isSuccessfully(), true); assert.equal(dparse.getOperator(), 'write'); assert.equal(dparse.getDataSet(), 'posts'); assert.equal(JSON.stringify(dparse.getContent()), JSON.stringify(obj)); }); it('unsupported operation', function () { assert.throws(function () { var dscript = new datascript_builder({ encrypt: 'rsa', pem: pem }) .setOp('read') .setDataSet('posts') .setJson(obj); dscript.build(); }) }); it('unsupported encryption', function () { assert.throws(function () { var dscript = new datascript_builder({ encrypt: 'dsa', pem: pem }) .setOp('write') .setDataSet('posts') .setJson(obj); dscript.build(); }) }); it('empty dataset name', function () { assert.throws(function () { var dscript = new datascript_builder({ encrypt: 'rsa', pem: pem }) .setOp('write') .setDataSet('') .setJson(obj); dscript.build(); }) }); it('invalid pem', function () { assert.throws(function () { var dscript = new datascript_builder({ encrypt: 'rsa', pem: '' }) .setOp('write') .setDataSet('posts') .setJson(obj); dscript.build(); }) }); it('data is not js object', function () { assert.throws(function () { var dscript = new datascript_builder({ encrypt: 'rsa', pem: pem }) .setOp('write') .setDataSet('posts') .setJson([1, 2, 3, 4, 5]); dscript.build(); }) }); }); describe('datascript parsing encrypted RSA', function () { it('should be okay', function () { var dparse = new datascript_parser( "2005706f737473fd2a0153fd00013b6bf08e8922b9ebd0b5dd83e87147a49748a38785ca8774feda6b0977f41e6612f812951d5e36e9d1107d12deca236fdb817ab44c0fbc8c78f14a0bdaf231061a6a5a03af60c95107cec87f89e18546fe1d5d992d7cfef762ea6fbd08981d57a46313d7f04fd18ef0b6733ac7c32b73f88b8ee29378b43d05705019c9678e45b7e7fe3965dd22afdd9f7d45095e90c6725c112570bdaf36f3e489f26edb1f5f880db9aa828a2106142cf638e0b92ead01e80416fdb73551eed7e2e54c5aa09df31b49fc022cf0608b2f85fbcda9b717384daa214197bb513c32bc853187ed05f7cc9bf215d286b4fedb85a67276487977b4fc5f93bea2a361386ffb5b018a3456015759581f4c0a0280d5c5bf9972815fd36cc4287f66ca3976a2b25f349b1c7536a1e42d87", { pem: pem }); assert.equal(dparse.isReadable(), true); assert.equal(dparse.isSuccessfully(), true); assert.equal(dparse.getOperator(), 'write'); assert.equal(dparse.getDataSet(), 'posts'); assert.equal(JSON.stringify(dparse.getContent()), JSON.stringify(obj)); }); }) describe('datascript interfac1e', function () { it('should be okay1', function () { var dscript = new datascript("2005706f737473fd2a0153fd00013b6bf08e8922b9ebd0b5dd83e87147a49748a38785ca8774feda6b0977f41e6612f812951d5e36e9d1107d12deca236fdb817ab44c0fbc8c78f14a0bdaf231061a6a5a03af60c95107cec87f89e18546fe1d5d992d7cfef762ea6fbd08981d57a46313d7f04fd18ef0b6733ac7c32b73f88b8ee29378b43d05705019c9678e45b7e7fe3965dd22afdd9f7d45095e90c6725c112570bdaf36f3e489f26edb1f5f880db9aa828a2106142cf638e0b92ead01e80416fdb73551eed7e2e54c5aa09df31b49fc022cf0608b2f85fbcda9b717384daa214197bb513c32bc853187ed05f7cc9bf215d286b4fedb85a67276487977b4fc5f93bea2a361386ffb5b018a3456015759581f4c0a0280d5c5bf9972815fd36cc4287f66ca3976a2b25f349b1c7536a1e42d87", pem) var i = dscript.toJSON(); assert.equal(i.canRead, true); assert.equal(i.success, true); assert.equal(i.operator, 'write'); assert.equal(i.dataset, 'posts'); assert.equal(JSON.stringify(i.content), JSON.stringify(obj)); }); it('should be okay2', function () { var dscript = new datascript({ operation: 'write', dataset: 'posts', content: obj, algorithm: 'rsa' }, pem) var hex = dscript.toHEX(); var dscript = new datascript(hex, pem) var i = dscript.toJSON(); assert.equal(i.canRead, true); assert.equal(i.success, true); assert.equal(i.operator, 'write'); assert.equal(i.dataset, 'posts'); assert.equal(JSON.stringify(i.content), JSON.stringify(obj)); }); })