From c6cada990b60c0ff0bb956dfbb5129003250f4c4 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 16 Sep 2020 11:04:42 +0200 Subject: [PATCH] crypto - asyncify checkum method and add tests --- src/vs/base/node/crypto.ts | 18 ++++++++---------- src/vs/base/test/node/crypto.test.ts | 27 +++++++++++++++++++++++++++ src/vs/base/test/node/utils.ts | 28 ---------------------------- 3 files changed, 35 insertions(+), 38 deletions(-) create mode 100644 src/vs/base/test/node/crypto.test.ts delete mode 100644 src/vs/base/test/node/utils.ts diff --git a/src/vs/base/node/crypto.ts b/src/vs/base/node/crypto.ts index 7323a92770a..6156c7daa48 100644 --- a/src/vs/base/node/crypto.ts +++ b/src/vs/base/node/crypto.ts @@ -7,8 +7,8 @@ import * as fs from 'fs'; import * as crypto from 'crypto'; import { once } from 'vs/base/common/functional'; -export function checksum(path: string, sha1hash: string | undefined): Promise { - const promise = new Promise((c, e) => { +export async function checksum(path: string, sha1hash: string | undefined): Promise { + const checksumPromise = new Promise((resolve, reject) => { const input = fs.createReadStream(path); const hash = crypto.createHash('sha1'); input.pipe(hash); @@ -18,9 +18,9 @@ export function checksum(path: string, sha1hash: string | undefined): Promise done(undefined, data.toString('hex'))); }); - return promise.then(hash => { - if (hash !== sha1hash) { - return Promise.reject(new Error('Hash mismatch')); - } + const hash = await checksumPromise; - return Promise.resolve(); - }); + if (hash !== sha1hash) { + throw new Error('Hash mismatch'); + } } diff --git a/src/vs/base/test/node/crypto.test.ts b/src/vs/base/test/node/crypto.test.ts new file mode 100644 index 00000000000..ad8dc4fa5af --- /dev/null +++ b/src/vs/base/test/node/crypto.test.ts @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { checksum } from 'vs/base/node/crypto'; +import { generateUuid } from 'vs/base/common/uuid'; +import { join } from 'vs/base/common/path'; +import { tmpdir } from 'os'; +import { mkdirp, rimraf, RimRafMode, writeFile } from 'vs/base/node/pfs'; + +suite('Crypto', () => { + + test('checksum', async () => { + const id = generateUuid(); + const testDir = join(tmpdir(), 'vsctests', id); + const testFile = join(testDir, 'checksum.txt'); + + await mkdirp(testDir); + + await writeFile(testFile, 'Hello World'); + + await checksum(testFile, '0a4d55a8d778e5022fab701977c5d840bbc486d0'); + + await rimraf(testDir, RimRafMode.MOVE); + }); +}); diff --git a/src/vs/base/test/node/utils.ts b/src/vs/base/test/node/utils.ts deleted file mode 100644 index 5ba6f6e2472..00000000000 --- a/src/vs/base/test/node/utils.ts +++ /dev/null @@ -1,28 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { generateUuid } from 'vs/base/common/uuid'; -import { join } from 'vs/base/common/path'; -import { tmpdir } from 'os'; -import { mkdirp, rimraf, RimRafMode } from 'vs/base/node/pfs'; - -export interface ITestFileResult { - testFile: string; - cleanUp: () => Promise; -} - -export function testFile(folder: string, file: string): Promise { - const id = generateUuid(); - const parentDir = join(tmpdir(), 'vsctests', id); - const newDir = join(parentDir, folder, id); - const testFile = join(newDir, file); - - return mkdirp(newDir, 493).then(() => { - return { - testFile, - cleanUp: () => rimraf(parentDir, RimRafMode.MOVE) - }; - }); -}