From 948e2075b12bc30a95a9602e40a34cd529b84715 Mon Sep 17 00:00:00 2001 From: Rupert Wood Date: Fri, 15 Jun 2018 19:26:00 +0100 Subject: [PATCH] Fix key and registry tests to work on Windows 10 - Open keys in HKCR as read-only, not all access - Create a new key HKCU\Software\windows-registry-node for read/write tests. Note that this key is not cleaned up on test completion, in case the delete function deletes something it shouldn't! The file association test still attempts to write to HKCR and will fail. --- test/key.js | 47 ++++++++++++++++++++++++++++++++++++++--------- test/registry.js | 43 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 72 insertions(+), 18 deletions(-) diff --git a/test/key.js b/test/key.js index 122141c..353f62d 100644 --- a/test/key.js +++ b/test/key.js @@ -1,4 +1,4 @@ -/* global describe, it */ +/* global describe, it, before */ 'use strict'; require('./test_helper'); var assert = require('assert'), @@ -7,34 +7,47 @@ var assert = require('assert'), describe('Key Open Tests', () => { it('Should create a key given a subkey', () => { - var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_READ); assert(key.handle !== null && key.handle !== undefined); key.close(); }); it('Should open a subkey provided a previously opened key', () => { - var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '', windef.KEY_ACCESS.KEY_ALL_ACCESS); - var key2 = key.openSubKey('.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '', windef.KEY_ACCESS.KEY_READ); + var key2 = key.openSubKey('.txt', windef.KEY_ACCESS.KEY_READ); assert(key2.handle !== null && key2.handle !== undefined); key.close(); key2.close(); }); it('Should properly close', () => { - var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_READ); key.close(); // ensure that the key is actually closed by trying to open a subkey // which should fail assert.throws(() => { - key.openSubKey('OpenWithList', windef.KEY_ACCESS.KEY_ALL_ACCESS); + key.openSubKey('OpenWithList', windef.KEY_ACCESS.KEY_READ); }); }); }); describe('Create Key Tests', function () { + before(() => { + // We perform all testing that modifies the registry under HKCU\Software\windows-registry-node. + // Ensure this exists. + var key = new Key(windef.HKEY.HKEY_CURRENT_USER, 'Software', windef.KEY_ACCESS.KEY_READ); + try { + key.createSubKey('windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); + } + catch (error) { + console.log('Error creating test environment root key'); + throw error; + } + }); + it('Should create a new key and Delete it', () => { - var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = new Key(windef.HKEY.HKEY_CURRENT_USER, 'Software\\windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); assert(key.handle !== undefined); assert(key.handle !== null); @@ -46,8 +59,9 @@ describe('Create Key Tests', function () { assert(createdKey.path === '\test_key_name'); createdKey.deleteKey(); + assert.throws(() => { - key.openSubKey('\test_key_name', windef.KEY_ACCESS.KEY_ALL_ACCESS); + key.openSubKey('\test_key_name', windef.KEY_ACCESS.KEY_READ); }, (err) => { assert(err.indexOf('ERROR_FILE_NOT_FOUND') > -1); return true; @@ -58,8 +72,21 @@ describe('Create Key Tests', function () { }); describe('Set / Query Value Tests', function () { + before(() => { + // We perform all testing that modifies the registry under HKCU\Software\windows-registry-node. + // Ensure this exists. + var key = new Key(windef.HKEY.HKEY_CURRENT_USER, 'Software', windef.KEY_ACCESS.KEY_READ); + try { + key.createSubKey('windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); + } + catch (error) { + console.log('Error creating test environment root key'); + throw error; + } + }); + it('Should set and read REG_SZ Value', () => { - var key = new Key(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = new Key(windef.HKEY.HKEY_CURRENT_USER, 'Software\\windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); assert(key.handle !== null && key.handle !== undefined); @@ -68,6 +95,8 @@ describe('Set / Query Value Tests', function () { var value = key.getValue('test_value_name'); assert.equal(value, 'test_value'); + + key.deleteValue('test_value_name'); key.close(); }); }); diff --git a/test/registry.js b/test/registry.js index 13ad47a..c55f551 100644 --- a/test/registry.js +++ b/test/registry.js @@ -1,4 +1,4 @@ -/* global describe, it */ +/* global describe, it, before */ 'use strict'; require('./test_helper'); @@ -8,22 +8,34 @@ var assert = require('assert'), describe('Registry API open tests', () => { it('Should open a subkey provided a predefined key', () => { - var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); - console.log(key.handle); + var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_READ); assert.equal(key.handle !== null, true); key.close(); }); it('Should open a subkey provided a previously opened key', () => { - var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CLASSES_ROOT, '', windef.KEY_ACCESS.KEY_ALL_ACCESS); - var key2 = registry.openKeyFromKeyObject(key, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CLASSES_ROOT, '', windef.KEY_ACCESS.KEY_READ); + var key2 = registry.openKeyFromKeyObject(key, '.txt', windef.KEY_ACCESS.KEY_READ); assert.equal(key2.handle !== null, true); key.close(); }); }); describe('Create Key Tests', function () { + before(() => { + // We perform all testing that modifies the registry under HKCU\Software\windows-registry-node. + // Ensure this exists. + var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CURRENT_USER, 'Software', windef.KEY_ACCESS.KEY_READ); + try { + registry.createKey(key, 'windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); + } + catch (error) { + console.log('Error creating test environment root key'); + throw error; + } + }); + it('Should create a new key and delete it', () => { - var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CURRENT_USER, 'Software\\windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); assert(key.handle !== undefined); assert(key.handle !== null); @@ -49,17 +61,30 @@ describe('Create Key Tests', function () { }); describe('Set / Query Value Tests', function () { + before(() => { + // We perform all testing that modifies the registry under HKCU\Software\windows-registry-node. + // Ensure this exists. + var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CURRENT_USER, 'Software', windef.KEY_ACCESS.KEY_READ); + try { + registry.createKey(key, 'windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); + } + catch (error) { + console.log('Error creating test environment root key'); + throw error; + } + }); + it('Should set and read REG_SZ Value', () => { - var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CLASSES_ROOT, '.txt', windef.KEY_ACCESS.KEY_ALL_ACCESS); + var key = registry.openKeyFromPredefined(windef.HKEY.HKEY_CURRENT_USER, 'Software\\windows-registry-node', windef.KEY_ACCESS.KEY_ALL_ACCESS); assert.equal(key.handle !== null, true); registry.setValueForKeyObject(key, 'test_value_name', windef.REG_VALUE_TYPE.REG_SZ, 'test_value'); var value = registry.queryValueForKeyObject(key, 'test_value_name'); - console.log('her is value:' + value); assert.equal(value, 'test_value'); - console.log('lngth:' + value.length); + + registry.deleteValue(key, 'test_value_name'); key.close(); }); });