From 06c792a4076b5f834483c943479f31b43de92f36 Mon Sep 17 00:00:00 2001 From: Joe Vilches Date: Thu, 14 Dec 2023 11:48:22 -0800 Subject: [PATCH] Create gentest-validate script to validate test signatures (#1504) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1504 I aim to consume this via a github action or workflow. Separating out the CI configuration from the actual script. We could and should maybe change this script to take in arguments for the test dirs so it is more configurable, but getting the barebones down right now. Reviewed By: NickGerleman Differential Revision: D51999865 fbshipit-source-id: 5792c6eec5692943518fecefc6226d784c6f0ad8 --- gentest/gentest-validate.ts | 40 +++++++++++++++++++++++++++++++++++++ gentest/package.json | 3 ++- package.json | 4 ++-- 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 gentest/gentest-validate.ts diff --git a/gentest/gentest-validate.ts b/gentest/gentest-validate.ts new file mode 100644 index 00000000..9f69f1c8 --- /dev/null +++ b/gentest/gentest-validate.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import * as fs from 'node:fs/promises'; +import {dirname} from 'path'; +import {fileURLToPath} from 'url'; +import signedsource from 'signedsource'; + +const yogaDir = dirname(dirname(fileURLToPath(import.meta.url))); +const cppTestDir = `${yogaDir}/tests/generated`; +const jsTestDir = `${yogaDir}/javascript/tests/generated`; +const javaTestDir = `${yogaDir}/java/tests/com/facebook/yoga`; +const testDirs = [cppTestDir, jsTestDir, javaTestDir]; + +for (const testDir of testDirs) { + const tests = await fs.readdir(testDir); + + for (const test of tests) { + const testData = await fs.readFile(`${testDir}/${test}`, 'utf8'); + try { + const validSignature = signedsource.verifySignature(testData); + if (!validSignature) { + console.error(`Invalid signature for ${test}`); + process.exitCode = 1; + } + } catch (e) { + // Java test dir does not separate generated tests from non-generated ones + if (testDir != javaTestDir) { + console.error(`${test}: ${e}`); + process.exitCode = 1; + } + } + } +} diff --git a/gentest/package.json b/gentest/package.json index 1d653ea9..1c472827 100644 --- a/gentest/package.json +++ b/gentest/package.json @@ -3,7 +3,8 @@ "version": "0.0.0", "private": true, "scripts": { - "gentest": "node --loader=babel-register-esm ./gentest-driver.ts" + "gentest": "node --loader=babel-register-esm ./gentest-driver.ts", + "gentest-validate": "node --loader=babel-register-esm ./gentest-validate.ts" }, "type": "module", "dependencies": { diff --git a/package.json b/package.json index 83fde0a1..4e8ae291 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "lint": "eslint .", "lint:fix": "eslint . --fix", "tsc": "yarn workspaces run tsc", - "gentest": "yarn workspace gentest run gentest" + "gentest": "yarn workspace gentest run gentest", + "gentest-validate": "yarn workspace gentest run gentest-validate" }, "workspaces": [ "javascript", @@ -16,7 +17,6 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", - "babel-register-esm": "^1.2.5", "eslint": "^8.30.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-jest": "^27.1.7",