|
| 1 | +import assert from "node:assert"; |
| 2 | + |
| 3 | +import { Graph } from "./Graph.mjs"; |
| 4 | + |
| 5 | +export function graphTest() { |
| 6 | + const list = [ |
| 7 | + { name: "@aws-sdk/client-s3", location: "clients/client-s3" }, |
| 8 | + { name: "@aws-sdk/core", location: "packages-internal/core" }, |
| 9 | + { name: "@aws-sdk/crc64-nvme", location: "packages-internal/crc64-nvme" }, |
| 10 | + { name: "@aws-sdk/credential-provider-env", location: "packages-internal/credential-provider-env" }, |
| 11 | + { name: "@aws-sdk/credential-provider-http", location: "packages-internal/credential-provider-http" }, |
| 12 | + { name: "@aws-sdk/credential-provider-ini", location: "packages-internal/credential-provider-ini" }, |
| 13 | + { name: "@aws-sdk/credential-provider-login", location: "packages-internal/credential-provider-login" }, |
| 14 | + { name: "@aws-sdk/credential-provider-node", location: "packages-internal/credential-provider-node" }, |
| 15 | + { name: "@aws-sdk/credential-provider-process", location: "packages-internal/credential-provider-process" }, |
| 16 | + { name: "@aws-sdk/credential-provider-sso", location: "packages-internal/credential-provider-sso" }, |
| 17 | + { |
| 18 | + name: "@aws-sdk/credential-provider-web-identity", |
| 19 | + location: "packages-internal/credential-provider-web-identity", |
| 20 | + }, |
| 21 | + { name: "@aws-sdk/middleware-bucket-endpoint", location: "packages-internal/middleware-bucket-endpoint" }, |
| 22 | + { name: "@aws-sdk/middleware-expect-continue", location: "packages-internal/middleware-expect-continue" }, |
| 23 | + { name: "@aws-sdk/middleware-flexible-checksums", location: "packages-internal/middleware-flexible-checksums" }, |
| 24 | + { name: "@aws-sdk/middleware-host-header", location: "packages-internal/middleware-host-header" }, |
| 25 | + { name: "@aws-sdk/middleware-location-constraint", location: "packages-internal/middleware-location-constraint" }, |
| 26 | + { name: "@aws-sdk/middleware-logger", location: "packages-internal/middleware-logger" }, |
| 27 | + { name: "@aws-sdk/middleware-recursion-detection", location: "packages-internal/middleware-recursion-detection" }, |
| 28 | + { name: "@aws-sdk/middleware-sdk-s3", location: "packages-internal/middleware-sdk-s3" }, |
| 29 | + { name: "@aws-sdk/middleware-ssec", location: "packages-internal/middleware-ssec" }, |
| 30 | + { name: "@aws-sdk/middleware-user-agent", location: "packages-internal/middleware-user-agent" }, |
| 31 | + { name: "@aws-sdk/nested-clients", location: "packages-internal/nested-clients" }, |
| 32 | + { name: "@aws-sdk/region-config-resolver", location: "packages-internal/region-config-resolver" }, |
| 33 | + { name: "@aws-sdk/signature-v4-multi-region", location: "packages-internal/signature-v4-multi-region" }, |
| 34 | + { name: "@aws-sdk/token-providers", location: "packages/token-providers" }, |
| 35 | + { name: "@aws-sdk/types", location: "packages-internal/types" }, |
| 36 | + { name: "@aws-sdk/util-arn-parser", location: "packages-internal/util-arn-parser" }, |
| 37 | + { name: "@aws-sdk/util-endpoints", location: "packages-internal/util-endpoints" }, |
| 38 | + { name: "@aws-sdk/util-user-agent-browser", location: "packages-internal/util-user-agent-browser" }, |
| 39 | + { name: "@aws-sdk/util-user-agent-node", location: "packages-internal/util-user-agent-node" }, |
| 40 | + { name: "@aws-sdk/xml-builder", location: "packages-internal/xml-builder" }, |
| 41 | + ]; |
| 42 | + |
| 43 | + function shuffle(list) { |
| 44 | + const a = [...list]; |
| 45 | + for (let i = a.length - 1; i > 0; --i) { |
| 46 | + const j = Math.floor(Math.random() * (i + 1)); |
| 47 | + [a[i], a[j]] = [a[j], a[i]]; |
| 48 | + } |
| 49 | + return a; |
| 50 | + } |
| 51 | + |
| 52 | + function ordered(list, a, b) { |
| 53 | + const nameList = list.map((i) => i.name); |
| 54 | + assert(nameList.indexOf(a) !== -1, `${a} did not appear in list.`); |
| 55 | + assert(nameList.indexOf(b) !== -1, `${b} did not appear in list.`); |
| 56 | + assert(nameList.indexOf(a) <= nameList.indexOf(b), `${a} did not appear before ${b}`); |
| 57 | + } |
| 58 | + |
| 59 | + for (const _list of [list, shuffle(list), shuffle(list), shuffle(list)]) { |
| 60 | + const sorted = Graph.toposort(_list); |
| 61 | + const check = ordered.bind(null, sorted); |
| 62 | + |
| 63 | + check("@aws-sdk/types", "@aws-sdk/core"); |
| 64 | + check("@aws-sdk/xml-builder", "@aws-sdk/core"); |
| 65 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-env"); |
| 66 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-http"); |
| 67 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-ini"); |
| 68 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-login"); |
| 69 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-process"); |
| 70 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-sso"); |
| 71 | + check("@aws-sdk/core", "@aws-sdk/credential-provider-web-identity"); |
| 72 | + check("@aws-sdk/core", "@aws-sdk/middleware-flexible-checksums"); |
| 73 | + check("@aws-sdk/core", "@aws-sdk/middleware-sdk-s3"); |
| 74 | + check("@aws-sdk/core", "@aws-sdk/middleware-user-agent"); |
| 75 | + check("@aws-sdk/core", "@aws-sdk/nested-clients"); |
| 76 | + |
| 77 | + check("@aws-sdk/credential-provider-env", "@aws-sdk/credential-provider-ini"); |
| 78 | + check("@aws-sdk/credential-provider-http", "@aws-sdk/credential-provider-ini"); |
| 79 | + check("@aws-sdk/credential-provider-login", "@aws-sdk/credential-provider-ini"); |
| 80 | + check("@aws-sdk/credential-provider-process", "@aws-sdk/credential-provider-ini"); |
| 81 | + check("@aws-sdk/credential-provider-sso", "@aws-sdk/credential-provider-ini"); |
| 82 | + check("@aws-sdk/credential-provider-web-identity", "@aws-sdk/credential-provider-ini"); |
| 83 | + |
| 84 | + check("@aws-sdk/token-providers", "@aws-sdk/credential-provider-sso"); |
| 85 | + |
| 86 | + for (const name of _list.map((i) => i.name)) { |
| 87 | + check(name, "@aws-sdk/client-s3"); |
| 88 | + } |
| 89 | + } |
| 90 | +} |
0 commit comments