From 90f6a0844a5a31a78de76edf55b8b5a33cf74e67 Mon Sep 17 00:00:00 2001 From: Kohei Watanabe Date: Wed, 2 Oct 2024 17:55:31 +0900 Subject: [PATCH] add match --- src/index.ts | 6 ++ test/integrity-metadata-set/match.js | 102 +++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 test/integrity-metadata-set/match.js diff --git a/src/index.ts b/src/index.ts index 3f41630..4413704 100644 --- a/src/index.ts +++ b/src/index.ts @@ -191,6 +191,12 @@ export class IntegrityMetadataSet { return [...new Set(strongestHashAlgorithms)]; } + match(integrity: IntegrityMetadataLike | string | null | undefined): boolean { + return this.#set.some((integrityMetadata) => + integrityMetadata.match(integrity), + ); + } + join(separator = " "): string { return this.#set.map(String).join(separator); } diff --git a/test/integrity-metadata-set/match.js b/test/integrity-metadata-set/match.js new file mode 100644 index 0000000..4ec7879 --- /dev/null +++ b/test/integrity-metadata-set/match.js @@ -0,0 +1,102 @@ +import assert from "node:assert/strict"; +import { test } from "node:test"; +import { IntegrityMetadataSet } from "../../dist/index.js"; + +test("if the hash values match, return true", function () { + const integrityMetadata = new IntegrityMetadataSet( + "sha256-MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + ); + + assert.strictEqual( + integrityMetadata.match({ + alg: "sha256", + val: "MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + }), + true, + ); +}); + +test("if the hash of one of the selected algorithms matches, return true", function () { + const integrityMetadata = new IntegrityMetadataSet([ + "sha256-MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + "sha256-uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=", + ]); + + assert.strictEqual( + integrityMetadata.match({ + alg: "sha256", + val: "MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + }), + true, + ); +}); + +test("a string can be specified", function () { + const integrityMetadata = new IntegrityMetadataSet( + "sha256-MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + ); + + assert.strictEqual( + integrityMetadata.match( + "sha256-MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + ), + true, + ); +}); + +test("if the hash algorithms are different, return false", function () { + const integrityMetadata = new IntegrityMetadataSet( + "sha256-MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + ); + + assert.strictEqual( + integrityMetadata.match({ + alg: "sha512", + val: "MJ7MSJwS1utMxA9QyQLytNDtd+5RGnx6m808qG1M2G+YndNbxf9JlnDaNCVbRbDP2DDoH2Bdz33FVC6TrpzXbw==", + }), + false, + ); +}); + +test("if the hash values are different, return false", function () { + const integrityMetadata = new IntegrityMetadataSet( + "sha256-MV9b23bQeMQ7isAGTkoBZGErH853yGk0W/yUx1iU7dM=", + ); + + assert.strictEqual( + integrityMetadata.match({ + alg: "sha256", + val: "uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=", + }), + false, + ); +}); + +test("if the hash algorithm is unsupported, return false", function () { + const integrityMetadata = new IntegrityMetadataSet( + "sha1-lDpwLQbzRZmu4fjajvn3KWAx1pk=", + ); + + assert.strictEqual( + integrityMetadata.match("sha1-lDpwLQbzRZmu4fjajvn3KWAx1pk="), + false, + ); +}); + +test("if null, return false", function () { + const integrityMetadata = new IntegrityMetadataSet(null); + + assert.strictEqual(integrityMetadata.match(null), false); +}); + +test("if empty, return false", function () { + const integrityMetadata = new IntegrityMetadataSet([]); + + assert.strictEqual(integrityMetadata.match(""), false); +}); + +test("if invalid value, return false", function () { + const integrityMetadata = new IntegrityMetadataSet("md5\0/..invalid-value"); + + assert.strictEqual(integrityMetadata.match("md5\0/..invalid-value"), false); +});