Skip to content

Commit

Permalink
Merge branch 'master' into swagger-to-yaml
Browse files Browse the repository at this point in the history
  • Loading branch information
ckangchurch authored Sep 24, 2024
2 parents 77a42b7 + e79fe64 commit 8360d2a
Show file tree
Hide file tree
Showing 78 changed files with 3,262 additions and 3,768 deletions.
273 changes: 181 additions & 92 deletions Cargo.lock

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ for_each_parallel = { path = "./lib/for_each_parallel" }
futures = "0.3"
futures-timer = "3"
hdrhistogram = "7"
http = "0.2"
hyper = { version = "0.14", features = ["client", "http1", "http2", "stream"] }
hyper-tls = "0.5"
http = "1"
hyper = { version = "1", features = ["client", "http1", "http2"] }
hyper-tls = "0.6"
hyper-util = { version = "0.1", features = ["tokio", "client", "http1", "http2"] }
http-body-util = "0.1"
itertools = "0.13"
mod_interval = { path = "./lib/mod_interval" }
native-tls = "0.2"
Expand Down
13 changes: 7 additions & 6 deletions agent/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@fs/ppaas-agent",
"version": "3.3.0",
"version": "3.3.1",
"description": "Agent Service for running pewpew tests",
"main": "dist/src/app.js",
"scripts": {
Expand All @@ -19,7 +19,6 @@
"type": "git",
"url": "git+https://github.com/FamilySearch/pewpew.git"
},
"author": "[email protected]",
"bugs": {
"url": "https://github.com/FamilySearch/pewpew/issues"
},
Expand All @@ -45,17 +44,19 @@
"@aws-sdk/client-s3": "^3.363.0",
"@aws-sdk/client-sqs": "^3.363.0",
"@aws-sdk/util-stream-node": "^3.363.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.8.0",
"@types/bunyan": "~1.8.8",
"@types/chai": "^4.3.5",
"@types/express": "^4.17.17",
"@types/mocha": "^10.0.0",
"@types/node": "^20.0.0",
"@types/node": "^22.0.0",
"@types/semver": "^7.5.0",
"@typescript-eslint/eslint-plugin": "^7.0.0",
"@typescript-eslint/parser": "^7.0.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"axios": "~1.7.0",
"chai": "^4.3.7",
"eslint": "^8.40.0",
"eslint": "^9.8.0",
"mocha": "^10.2.0",
"nyc": "^17.0.0",
"typescript": "^5.3.0"
Expand Down
2 changes: 1 addition & 1 deletion agent/src/healthcheck.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export async function pingS3 (): Promise<boolean> {
log("Pinging S3 succeeded at " + new Date(), LogLevel.DEBUG);
return true;
} catch (error) {
log("pingS3 failed}", LogLevel.ERROR, error);
log("pingS3 failed", LogLevel.ERROR, error);
// DO NOT REJECT. Just return false
return false;
}
Expand Down
1 change: 0 additions & 1 deletion agent/src/pewpewtest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,6 @@ export class PewPewTest {
}

// Create a sanitized copy which doesn't have the environment variables which may have passwords
// eslint-disable-next-line @typescript-eslint/ban-types
public sanitizedCopy (): {
started: boolean,
pewpewRunning: boolean,
Expand Down
2 changes: 1 addition & 1 deletion common/integration/s3.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ describe("S3Util Integration", () => {
`${UNIT_TEST_KEY_PREFIX}/${UNIT_TEST_KEY_PREFIX}/${UNIT_TEST_FILENAME}`
].map((s3Path: string) => deleteObject(s3Path).catch((error) =>
log("S3Util Integration before delete failed: " + s3Path, LogLevel.DEBUG, error))));
} catch (error) {
} catch (error) { // eslint-disable-line @typescript-eslint/no-unused-vars
// Swallow
}
});
Expand Down
12 changes: 7 additions & 5 deletions common/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@fs/ppaas-common",
"version": "3.3.0",
"version": "3.3.1",
"description": "Common Code for the PewPewController and PewPewAgent",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
Expand Down Expand Up @@ -41,19 +41,21 @@
},
"devDependencies": {
"@aws-sdk/util-stream-node": "^3.363.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.8.0",
"@fs/config-wasm": "*",
"@types/bunyan": "~1.8.8",
"@types/chai": "^4.3.5",
"@types/express": "^4.17.17",
"@types/mocha": "^10.0.0",
"@types/node": "^20.0.0",
"@typescript-eslint/eslint-plugin": "^7.0.0",
"@typescript-eslint/parser": "^7.0.0",
"@types/node": "^22.0.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"aws-sdk-client-mock": "^4.0.0",
"chai": "^4.3.7",
"dotenv": "^16.0.0",
"dotenv-flow": "^4.0.1",
"eslint": "^8.40.0",
"eslint": "^9.8.0",
"mocha": "^10.2.0",
"nyc": "^17.0.0",
"typescript": "^5.3.0"
Expand Down
2 changes: 1 addition & 1 deletion common/src/ppaastestmessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ export class PpaasTestMessage implements TestMessage {
case "TestMessage":
try {
parsedTestMessage = temp as TestMessage;
} catch (error: unknown) {
} catch (error: unknown) { // eslint-disable-line @typescript-eslint/no-unused-vars
throw new Error(`messageAttributes[${key}] was not an TestMessage = ${JSON.stringify(temp)}`);
}
break;
Expand Down
2 changes: 1 addition & 1 deletion common/src/s3file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ export class PpaasS3File implements S3File {
try {
await access(this.localFilePath);
return true;
} catch (error: unknown) {
} catch (error: unknown) { // eslint-disable-line @typescript-eslint/no-unused-vars
return false;
}
}
Expand Down
2 changes: 0 additions & 2 deletions common/test/yamlparser.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ import { expect } from "chai";
import path from "path";

const UNIT_TEST_FOLDER = process.env.UNIT_TEST_FOLDER || "test";
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const BAD_FILEPATH = path.join(UNIT_TEST_FOLDER, "s3test.txt");
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const EMPTY_FILEPATH = path.join(UNIT_TEST_FOLDER, "empty.yaml");
const BASIC_FILEPATH = path.join(UNIT_TEST_FOLDER, "basic.yaml");
const BASIC_FILEPATH_WITH_VARS = path.join(UNIT_TEST_FOLDER, "basicwithvars.yaml");
Expand Down
6 changes: 5 additions & 1 deletion controller/components/StartTestForm/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ const UploadTestButton = styled.button`
const notAuthorizedMessageOpenId = (username?: string | null): JSX.Element => <Info>
<Column>
<p>
{`'${username}'` || "User"} is not authorized to run tests.<br/>
{username ? `'${username}'` : "User"} is not authorized to run tests.<br/>
Please request 'Pewpew - User' permission if you need to be able to run tests.
</p>
<Warning>DO NOT request 'Non Prod' Permissions. Those are for internal authentication testing only.</Warning>
Expand Down Expand Up @@ -334,6 +334,10 @@ export const StartTestForm = ({
foundVar.variableName = newEnvVar.variableName !== undefined ? newEnvVar.variableName : foundVar.variableName;
foundVar.variableValue = newEnvVar.variableValue !== undefined ? newEnvVar.variableValue : foundVar.variableValue;
foundVar.type = newEnvVar.type !== undefined ? newEnvVar.type : foundVar.type;
if (newEnvVar.type === "password" && foundVar.variableName === "") {
// If we check the "password" box and the name is blank, default the name to PASSWORD
foundVar.variableName = "PASSWORD";
}
} else {
// New var
const newVar: EnvironmentVariablesState = {
Expand Down
2 changes: 1 addition & 1 deletion controller/components/StartTestForm/story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ const versionInitalProps: VersionInitalProps = {
let ppaasTestId: PpaasTestId;
try {
ppaasTestId = PpaasTestId.makeTestId("Story");
} catch (error) {
} catch (error) { // eslint-disable-line @typescript-eslint/no-unused-vars
// For some reason newer versions of storybook do not have path.extname()
ppaasTestId = PpaasTestId.getFromS3Folder("Story/" + PpaasTestId.getDateString());
}
Expand Down
2 changes: 1 addition & 1 deletion controller/components/TestInfo/story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { latestPewPewVersion } from "../../pages/api/util/clientutil";
let ppaasTestId: PpaasTestId;
try {
ppaasTestId = PpaasTestId.makeTestId("Story");
} catch (error) {
} catch (error) { // eslint-disable-line @typescript-eslint/no-unused-vars
// For some reason newer versions of storybook do not have path.extname()
ppaasTestId = PpaasTestId.getFromS3Folder("Story/" + PpaasTestId.getDateString());
}
Expand Down
2 changes: 1 addition & 1 deletion controller/components/TestResults/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ const minMaxTime = (testResults: any) => {
let startTime2 = Infinity;
let endTime2 = -Infinity;

// eslint-disable-next-line @typescript-eslint/no-unused-vars

for (const [_, dataPoints] of testResults) {
for (const point of dataPoints) {
if (point.startTime) {
Expand Down
2 changes: 0 additions & 2 deletions controller/components/TestResults/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { HDRHistogram } from "@fs/hdr-histogram-wasm";
type CheckType = string | ((x: unknown) => boolean);
type Check = [string, CheckType];

// eslint-disable-next-line @typescript-eslint/ban-types
function isObject (o: unknown): o is object {
return typeof o === "object" && !!o;
}
Expand Down Expand Up @@ -53,7 +52,6 @@ function isObject (o: unknown): o is object {
* @returns failed check or undefined
*/
function propertyChecker (
// eslint-disable-next-line @typescript-eslint/ban-types
o: object,
requiredChecks: Check[],
unknownCheck?: CheckType,
Expand Down
2 changes: 1 addition & 1 deletion controller/components/TestResults/story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ configureURL.baseS3Url = "/";
let ppaasTestId: PpaasTestId;
try {
ppaasTestId = PpaasTestId.makeTestId("Story");
} catch (error) {
} catch (error) { // eslint-disable-line @typescript-eslint/no-unused-vars
// For some reason newer versions of storybook do not have path.extname()
ppaasTestId = PpaasTestId.getFromS3Folder("Story/" + PpaasTestId.getDateString());
}
Expand Down
2 changes: 1 addition & 1 deletion controller/components/TestsList/story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const makeTestData = (status: TestStatus): TestData => {
ppaasTestId = PpaasTestId.makeTestId("Story" + counter, {
dateString: PpaasTestId.getDateString(date)
});
} catch (error) {
} catch (error) { // eslint-disable-line @typescript-eslint/no-unused-vars
// For some reason newer versions of storybook do not have path.extname()
ppaasTestId = PpaasTestId.getFromS3Folder(`Story${counter}/` + PpaasTestId.getDateString(date));
}
Expand Down
1 change: 0 additions & 1 deletion controller/integration/secrets.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import { expect } from "chai";
logger.config.LogFileName = "ppaas-controller";

describe("Secrets Integration", () => {
// eslint-disable-next-line require-await
before(async () => {
secretsConfig.secretsClient = undefined as any;
getGlobalSecretsConfig().encryptionKey = undefined;
Expand Down
16 changes: 10 additions & 6 deletions controller/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@fs/ppaas-controller",
"version": "3.3.0",
"version": "3.3.1",
"description": "Controller Service for running pewpew tests",
"private": true,
"scripts": {
Expand All @@ -25,7 +25,6 @@
"type": "git",
"url": "git+https://github.com/FamilySearch/pewpew.git"
},
"author": "[email protected]",
"bugs": {
"url": "https://github.com/FamilySearch/pewpew/issues"
},
Expand All @@ -36,6 +35,9 @@
"nyc": {
"exclude": "**/*.spec.ts"
},
"overrides": {
"eslint": "^9.8.0"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.363.0",
"@aws-sdk/client-secrets-manager": "^3.363.0",
Expand Down Expand Up @@ -78,6 +80,8 @@
"devDependencies": {
"@aws-sdk/client-sqs": "^3.363.0",
"@aws-sdk/util-stream-node": "^3.363.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.8.0",
"@next/eslint-plugin-next": "~14.2.0",
"@storybook/addon-actions": "~8.2.0",
"@storybook/addon-links": "~8.2.0",
Expand All @@ -94,21 +98,21 @@
"@types/js-cookie": "^3.0.2",
"@types/js-yaml": "^4.0.5",
"@types/mocha": "^10.0.0",
"@types/node": "^20.0.0",
"@types/node": "^22.0.0",
"@types/react": "^18.2.12",
"@types/react-dom": "^18.2.5",
"@types/react-transition-group": "^4.4.6",
"@types/semver": "^7.5.0",
"@types/yauzl": "^2.10.0",
"@typescript-eslint/eslint-plugin": "^7.0.0",
"@typescript-eslint/parser": "^7.0.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"aws-sdk-client-mock": "^4.0.0",
"chai": "^4.3.7",
"copy-webpack-plugin": "^12.0.2",
"dotenv": "^16.0.0",
"dotenv-flow": "^4.0.1",
"esbuild": ">=0.17",
"eslint": "^8.40.0",
"eslint": "^9.8.0",
"eslint-config-next": "~14.2.0",
"form-data": "^4.0.0",
"glob-parent": "^6.0.2",
Expand Down
4 changes: 2 additions & 2 deletions controller/pages/api/util/healthcheck.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export function accessEncryptionKeyPass (): boolean {
log("accessEncryptionKeyPass", LogLevel.DEBUG, { keyPass });
return keyPass;
} catch (error) {
log("accessEncryptionKeyPass", LogLevel.WARN, { keyPass: false });
log("accessEncryptionKeyPass", LogLevel.WARN, error, { keyPass: false });
return false;
}
}
Expand All @@ -80,7 +80,7 @@ export function accessOpenIdSecretPass (): boolean {
log("accessOpenIdSecretPass", LogLevel.DEBUG, { secretPass });
return secretPass;
} catch (error) {
log("accessOpenIdSecretPass", LogLevel.WARN, { secretPass: false });
log("accessOpenIdSecretPass", LogLevel.WARN, error, { secretPass: false });
return false;
}
}
Expand Down
6 changes: 4 additions & 2 deletions controller/pages/api/util/ppaasencryptenvfile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,14 @@ export class PpaasEncryptEnvironmentFile extends PpaasEncryptS3File {
}

// Create a sanitized copy which doesn't have the environment variables which may have passwords
public sanitizedCopy (): Record<string, any> {
return Object.assign({}, this, {
public sanitizedCopy (): PpaasEncryptS3File {
const sanitized = Object.assign(super.sanitizedCopy(), this, {
body: undefined,
fileContents: undefined,
// Change the object into an array of just the keys (that can be JSON.stringified)
environmentVariablesFile: this.environmentVariablesFile && Object.keys(this.environmentVariablesFile)
});
return sanitized;
}

// Returns itself
Expand Down
14 changes: 12 additions & 2 deletions controller/pages/api/util/ppaasencrypts3file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,18 @@ export class PpaasEncryptS3File implements s3.S3File {
}

// Create a sanitized copy which doesn't have the body which may have passwords
public sanitizedCopy (): unknown {
return Object.assign({}, this, { body: undefined, fileContents: undefined });
public sanitizedCopy (): PpaasEncryptS3File {
const sanitized = Object.assign(new PpaasEncryptS3File({
filename: this.filename,
s3Folder: this.s3Folder,
fileContents: this.fileContents,
tags: this.tags
}), this, { body: undefined, fileContents: undefined });
const notEnumerable: PropertyDescriptor = { enumerable: false, configurable: true, writable: true };
Object.defineProperties(sanitized, {
body: notEnumerable, fileContents: notEnumerable
});
return sanitized;
}

// Override toString so we can not log the body which may have passwords
Expand Down
2 changes: 1 addition & 1 deletion controller/pages/api/util/s3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export async function getS3Response ({ request, response, filename, s3Folder, re
}
if (s3Object && s3Object.Body) {
let content: GetObjectCommandOutput["Body"] | Buffer = s3Object.Body;
log("s3Object: " + s3Object, LogLevel.DEBUG, { ...s3Object, Body: content !== (undefined || null) });
log("s3Object: " + s3Object, LogLevel.DEBUG, { ...s3Object, Body: !!s3Object.Body });
// res.writeHead and res.send don't mix so we have to set each header separately
response.status(200);
response.setHeader("Content-Disposition", "inline");
Expand Down
2 changes: 1 addition & 1 deletion controller/pages/api/util/testmanager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ export async function downloadPriorTestId (
fieldAdditionalFiles = parsedAdditionalFiles as string[];
}
} catch (error) {
log("Could not parse fieldAdditionalFiles: " + fieldAdditionalFiles, LogLevel.WARN, fieldAdditionalFiles);
log("Could not parse fieldAdditionalFiles: " + fieldAdditionalFiles, LogLevel.WARN, error, fieldAdditionalFiles);
}
}
additionalFileNames.push(...fieldAdditionalFiles);
Expand Down
2 changes: 1 addition & 1 deletion controller/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ const TestStatusPage = ({
});
// Sanitized the search
const searchString = state.testIdSearch;
// eslint-disable-next-line no-useless-escape

if (!SEARCH_REGEX.test(searchString)) {
setState({
error: "Only Alphanumeric characters are allowed"
Expand Down
14 changes: 11 additions & 3 deletions controller/test/ppaasencryptenvfile.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -321,11 +321,19 @@ describe("PpaasEncryptEnvironmentFile", () => {
expect(sanitizedCopy).to.not.equal(undefined);
expect(sanitizedCopy.body, "body").to.equal(undefined);
expect(sanitizedCopy.getFileContents(), "getFileContents()").to.equal(undefined);
expect(sanitizedCopy.getEnvironmentVariablesFile(), "getEnvironmentVariablesFile()").to.equal(undefined);
expect(JSON.stringify(sanitizedCopy.getEnvironmentVariables()), "getEnvironmentVariables()").to.equal("{}");
// We get a base PpaasEncryptS3File without these functions
expect(typeof sanitizedCopy.getEnvironmentVariablesFile, "typeof getEnvironmentVariablesFile()").to.equal("undefined");
expect(typeof sanitizedCopy.getEnvironmentVariables, "typeof getEnvironmentVariables()").to.equal("undefined");
const sanitizedJson = JSON.parse(JSON.stringify(sanitizedCopy));
expect(sanitizedJson.body, "body").to.equal(undefined);
expect(sanitizedJson.fileContents, "fileContents").to.equal(undefined);
// Should be an array of the keys instead of the object
expect(sanitizedJson.environmentVariablesFile, "environmentVariablesFile").to.not.equal(undefined);
expect(Array.isArray(sanitizedJson.environmentVariablesFile), "Array.isArray(environmentVariablesFile)").to.equal(true);
expect(JSON.stringify(sanitizedJson.environmentVariablesFile), "environmentVariablesFile").to.equal(JSON.stringify(Object.keys(environmentVariablesFile)));
done();
} catch (error) {
done();
done(error);
}
});

Expand Down
Loading

0 comments on commit 8360d2a

Please sign in to comment.