@tsmx/secure-config
Version:
Easy and secure configuration management. JSON based encrypted secrets, optional HMAC validation.
143 lines (132 loc) • 7.93 kB
JavaScript
const path = require('path');
describe('secure-config multiconf feature test suite (v2 features)', () => {
const myconfKey = '11c4b6c3cdb7ebaff74a7a340d30c45fd2f7a49d6d0b56badb300dbe49f233ec';
const confKey = '0123456789qwertzuiopasdfghjklyxc';
beforeEach(() => {
jest.resetModules();
delete process.env['CONFIG_ENCRYPTION_KEY'];
delete process.env['CUSTOM_CONFIG_KEY'];
delete process.env['NODE_ENV'];
});
it('tests a successful production configuration retrieval with custom file prefix', () => {
process.env['CONFIG_ENCRYPTION_KEY'] = myconfKey;
const conf = require('../secure-config')({ prefix: 'myconf' });
expect(conf.info).toEqual('myconf');
expect(conf.database.host).toBe('127.0.0.1');
expect(conf.database.user).toBe('SecretUser');
expect(conf.database.password).toBe('SecretPassword');
expect(conf.filestorage.type).toBe('local');
expect(conf.filestorage.params.folder).toBe('/tmp/storage');
expect(conf.filestorage.params.storagepass).toBe('StoragePassword');
expect(conf.testarray).toBeDefined();
expect(Array.isArray(conf.testarray)).toBeTruthy();
expect(conf.testarray.length).toBe(6);
expect(conf.testarray[0]).toEqual('one');
expect(conf.testarray[1]).toEqual('two');
expect(conf.testarray[2]).toEqual('three');
expect(conf.testarray[3].arrayItemKey).toEqual('itemValue1');
expect(conf.testarray[3].additionalItem1).toEqual('value1');
expect(conf.testarray[4].arrayItemKey).toEqual('itemValue2');
expect(conf.testarray[4].additionalItem1).toEqual('value1');
expect(conf.testarray[4].additionalItem2).toEqual(12);
expect(conf.testarray[5].length).toEqual(1);
expect(conf.testarray[5][0].subArrayItemKey).toEqual('subArrayItemValue');
expect(conf.nullvalue).toBe(null);
});
it('tests a successful production configuration retrieval with custom file prefix and custom key variable name', () => {
process.env['CUSTOM_CONFIG_KEY'] = myconfKey;
const conf = require('../secure-config')({ prefix: 'myconf', keyVariable: 'CUSTOM_CONFIG_KEY' });
expect(conf.info).toEqual('myconf');
expect(conf.database.host).toBe('127.0.0.1');
expect(conf.database.user).toBe('SecretUser');
expect(conf.database.password).toBe('SecretPassword');
expect(conf.filestorage.type).toBe('local');
expect(conf.filestorage.params.folder).toBe('/tmp/storage');
expect(conf.filestorage.params.storagepass).toBe('StoragePassword');
expect(conf.testarray).toBeDefined();
expect(Array.isArray(conf.testarray)).toBeTruthy();
expect(conf.testarray.length).toBe(6);
expect(conf.testarray[0]).toEqual('one');
expect(conf.testarray[1]).toEqual('two');
expect(conf.testarray[2]).toEqual('three');
expect(conf.testarray[3].arrayItemKey).toEqual('itemValue1');
expect(conf.testarray[3].additionalItem1).toEqual('value1');
expect(conf.testarray[4].arrayItemKey).toEqual('itemValue2');
expect(conf.testarray[4].additionalItem1).toEqual('value1');
expect(conf.testarray[4].additionalItem2).toEqual(12);
expect(conf.testarray[5].length).toEqual(1);
expect(conf.testarray[5][0].subArrayItemKey).toEqual('subArrayItemValue');
expect(conf.nullvalue).toBe(null);
});
it('tests a successful production configuration retrieval with custom file prefix and HMAC validation', () => {
process.env['CONFIG_ENCRYPTION_KEY'] = myconfKey;
process.env['NODE_ENV'] = 'production';
const conf = require('../secure-config')({ prefix: 'myconf', hmacValidation: true });
expect(conf.info).toEqual('myconf');
expect(conf.database.host).toBe('db.prod.com');
expect(conf.database.user).toBe('SecretUser-Prod');
expect(conf.database.password).toBe('SecretPassword-Prod');
expect(conf.filestorage.type).toBe('local');
expect(conf.filestorage.params.folder).toBe('/tmp/storage');
expect(conf.filestorage.params.storagepass).toBe('StoragePassword-Prod');
expect(conf.testarray.length).toEqual(2);
expect(conf.testarray[0].arrayItemKey).toEqual('itemValue1');
expect(conf.testarray[1].arrayItemKey).toEqual('itemValue2');
});
it('tests a successful retrieval for two production configurations including HMAC validation', () => {
process.env['CONFIG_ENCRYPTION_KEY'] = confKey;
process.env['MYCONFIG_ENCRYPTION_KEY'] = myconfKey;
process.env['NODE_ENV'] = 'production';
const secureConf = require('../secure-config');
const conf = secureConf({ hmacValidation: true });
const myconf = secureConf({ prefix: 'myconf', hmacValidation: true, keyVariable: 'MYCONFIG_ENCRYPTION_KEY' });
expect(conf.info).toBeUndefined();
expect(conf.database.host).toBe('db.prod.com');
expect(conf.database.user).toBe('SecretUser-Prod');
expect(conf.database.password).toBe('SecretPassword-Prod');
expect(myconf.info).toEqual('myconf');
expect(myconf.database.host).toBe('db.prod.com');
expect(myconf.database.user).toBe('SecretUser-Prod');
expect(myconf.database.password).toBe('SecretPassword-Prod');
});
it('tests a successful production configuration retrieval with custom directory', () => {
process.env['CONFIG_ENCRYPTION_KEY'] = confKey;
process.env['NODE_ENV'] = 'production';
const conf = require('../secure-config')({ directory: path.join(process.cwd(), 'test/configurations') });
expect(conf.info).toEqual('production-custom-dir');
expect(conf.database.host).toBe('db.prod.com');
expect(conf.database.user).toBe('SecretUser-Prod');
expect(conf.database.password).toBe('SecretPassword-Prod');
expect(conf.filestorage.type).toBe('local');
expect(conf.filestorage.params.folder).toBe('/tmp/storage');
expect(conf.filestorage.params.storagepass).toBe('StoragePassword-Prod');
expect(conf.testarray.length).toEqual(2);
expect(conf.testarray[0].arrayItemKey).toEqual('itemValue1');
expect(conf.testarray[1].arrayItemKey).toEqual('itemValue2');
});
it('tests a successful production configuration retrieval with custom file prefix and custom directory', () => {
process.env['CONFIG_ENCRYPTION_KEY'] = myconfKey;
const conf = require('../secure-config')({ prefix: 'myconf', directory: path.join(process.cwd(), 'test/configurations') });
expect(conf.info).toEqual('myconf-custom-dir');
expect(conf.database.host).toBe('127.0.0.1');
expect(conf.database.user).toBe('SecretUser');
expect(conf.database.password).toBe('SecretPassword');
expect(conf.filestorage.type).toBe('local');
expect(conf.filestorage.params.folder).toBe('/tmp/storage');
expect(conf.filestorage.params.storagepass).toBe('StoragePassword');
expect(conf.testarray).toBeDefined();
expect(Array.isArray(conf.testarray)).toBeTruthy();
expect(conf.testarray.length).toBe(6);
expect(conf.testarray[0]).toEqual('one');
expect(conf.testarray[1]).toEqual('two');
expect(conf.testarray[2]).toEqual('three');
expect(conf.testarray[3].arrayItemKey).toEqual('itemValue1');
expect(conf.testarray[3].additionalItem1).toEqual('value1');
expect(conf.testarray[4].arrayItemKey).toEqual('itemValue2');
expect(conf.testarray[4].additionalItem1).toEqual('value1');
expect(conf.testarray[4].additionalItem2).toEqual(12);
expect(conf.testarray[5].length).toEqual(1);
expect(conf.testarray[5][0].subArrayItemKey).toEqual('subArrayItemValue');
expect(conf.nullvalue).toBe(null);
});
});