@cyclonedx/cdxgen
Version:
Creates CycloneDX Software Bill-of-Materials (SBOM) from source or container image
1,638 lines (1,568 loc) • 67.6 kB
JavaScript
const utils = require("./utils");
const fs = require("fs");
const ssri = require("ssri");
const { jest, expect, test } = require("@jest/globals");
test("SSRI test", () => {
// gopkg.lock hash
let ss = ssri.parse(
"2ca532a6bc655663344004ba102436d29031018eab236247678db1d8978627bf"
);
expect(ss).toEqual(null);
ss = ssri.parse(
"sha256-2ca532a6bc655663344004ba102436d29031018eab236247678db1d8978627bf"
);
expect(ss.sha256[0].digest).toStrictEqual(
"2ca532a6bc655663344004ba102436d29031018eab236247678db1d8978627bf"
);
ss = ssri.parse(
"sha256-" +
Buffer.from(
"2ca532a6bc655663344004ba102436d29031018eab236247678db1d8978627bf",
"hex"
).toString("base64")
);
expect(ss.sha256[0].digest).toStrictEqual(
"LKUyprxlVmM0QAS6ECQ20pAxAY6rI2JHZ42x2JeGJ78="
);
});
test("Parse requires dist string", () => {
expect(utils.parsePyRequiresDist("lazy-object-proxy (>=1.4.0)")).toEqual({
name: "lazy-object-proxy",
version: "1.4.0"
});
expect(utils.parsePyRequiresDist("wrapt (<1.13,>=1.11)")).toEqual({
name: "wrapt",
version: "1.13"
});
expect(
utils.parsePyRequiresDist(
'typed-ast (<1.5,>=1.4.0) ; implementation_name == "cpython" and python_version < "3.8"'
)
).toEqual({ name: "typed-ast", version: "1.5" });
expect(utils.parsePyRequiresDist("asgiref (<4,>=3.2.10)")).toEqual({
name: "asgiref",
version: "4"
});
expect(utils.parsePyRequiresDist("pytz")).toEqual({
name: "pytz",
version: ""
});
expect(utils.parsePyRequiresDist("sqlparse (>=0.2.2)")).toEqual({
name: "sqlparse",
version: "0.2.2"
});
expect(
utils.parsePyRequiresDist("argon2-cffi (>=16.1.0) ; extra == 'argon2'")
).toEqual({ name: "argon2-cffi", version: "16.1.0" });
expect(utils.parsePyRequiresDist("bcrypt ; extra == 'bcrypt'")).toEqual({
name: "bcrypt",
version: ""
});
});
test("finds license id from name", () => {
expect(utils.findLicenseId("Apache License Version 2.0")).toEqual(
"Apache-2.0"
);
expect(
utils.findLicenseId("GNU General Public License (GPL) version 2.0")
).toEqual("GPL-2.0-only");
});
test("parse gradle dependencies", () => {
expect(utils.parseGradleDep(null)).toEqual({});
let parsedList = utils.parseGradleDep(
fs.readFileSync("./test/gradle-dep.out", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(33);
expect(parsedList.dependenciesList.length).toEqual(34);
expect(parsedList.pkgList[0]).toEqual({
group: "org.ethereum",
name: "solcJ-all",
qualifiers: {
type: "jar"
},
version: "0.4.25"
});
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-android-dep.out", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(105);
expect(parsedList.dependenciesList.length).toEqual(106);
expect(parsedList.pkgList[0]).toEqual({
group: "com.android.support.test",
name: "runner",
qualifiers: {
type: "jar"
},
scope: "optional",
version: "1.0.2",
properties: [
{
name: "GradleProfileName",
value: "androidTestImplementation"
}
]
});
expect(parsedList.pkgList[103]).toEqual({
group: "androidx.print",
name: "print",
qualifiers: {
type: "jar"
},
version: "1.0.0",
scope: "optional",
properties: [
{
name: "GradleProfileName",
value: "releaseUnitTestRuntimeClasspath"
}
]
});
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-out1.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(89);
expect(parsedList.dependenciesList.length).toEqual(90);
expect(parsedList.pkgList[0]).toEqual({
group: "org.springframework.boot",
name: "spring-boot-starter-web",
version: "2.2.0.RELEASE",
qualifiers: { type: "jar" },
properties: [
{
name: "GradleProfileName",
value: "compileClasspath"
}
]
});
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-rich1.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(4);
expect(parsedList.pkgList[parsedList.pkgList.length - 1]).toEqual({
group: "ch.qos.logback",
name: "logback-core",
qualifiers: { type: "jar" },
version: "1.4.5"
});
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-rich2.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(2);
expect(parsedList.pkgList).toEqual([
{
group: "io.appium",
name: "java-client",
qualifiers: { type: "jar" },
version: "8.1.1"
},
{
group: "org.seleniumhq.selenium",
name: "selenium-support",
qualifiers: { type: "jar" },
version: "4.5.0"
}
]);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-rich3.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(1);
expect(parsedList.pkgList).toEqual([
{
group: "org.seleniumhq.selenium",
name: "selenium-remote-driver",
version: "4.5.0",
qualifiers: { type: "jar" }
}
]);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-rich4.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(1);
expect(parsedList.pkgList).toEqual([
{
group: "org.seleniumhq.selenium",
name: "selenium-api",
version: "4.5.0",
qualifiers: { type: "jar" }
}
]);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-rich5.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(67);
expect(parsedList.dependenciesList.length).toEqual(68);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-out-249.dep", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(20);
expect(parsedList.dependenciesList.length).toEqual(22);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-service.out", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(34);
expect(parsedList.dependenciesList.length).toEqual(36);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-s.out", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(27);
expect(parsedList.dependenciesList.length).toEqual(29);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-core.out", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(18);
expect(parsedList.dependenciesList.length).toEqual(19);
parsedList = utils.parseGradleDep(
fs.readFileSync("./test/data/gradle-single.out", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(152);
expect(parsedList.dependenciesList.length).toEqual(153);
});
test("parse gradle projects", () => {
expect(utils.parseGradleProjects(null)).toEqual({
projects: [],
rootProject: "root"
});
let retMap = utils.parseGradleProjects(
fs.readFileSync("./test/data/gradle-projects.out", { encoding: "utf-8" })
);
expect(retMap.rootProject).toEqual("elasticsearch");
expect(retMap.projects.length).toEqual(368);
retMap = utils.parseGradleProjects(
fs.readFileSync("./test/data/gradle-projects1.out", { encoding: "utf-8" })
);
expect(retMap.rootProject).toEqual("elasticsearch");
expect(retMap.projects.length).toEqual(409);
retMap = utils.parseGradleProjects(
fs.readFileSync("./test/data/gradle-projects2.out", { encoding: "utf-8" })
);
expect(retMap.rootProject).toEqual("fineract");
expect(retMap.projects.length).toEqual(22);
});
test("parse gradle properties", () => {
expect(utils.parseGradleProperties(null)).toEqual({
projects: [],
rootProject: "root",
metadata: {
group: "",
version: "latest",
properties: []
}
});
let retMap = utils.parseGradleProperties(
fs.readFileSync("./test/data/gradle-properties.txt", { encoding: "utf-8" })
);
expect(retMap).toEqual({
rootProject: "dependency-diff-check",
projects: [
":dependency-diff-check-client-starter",
":dependency-diff-check-common-core",
":dependency-diff-check-service"
],
metadata: {
group: "com.ajmalab",
version: "0.0.1-SNAPSHOT",
properties: [
{
name: "buildFile",
value:
"/home/almalinux/work/sandbox/dependency-diff-check/build.gradle"
},
{
name: "projectDir",
value: "/home/almalinux/work/sandbox/dependency-diff-check"
},
{
name: "rootDir",
value: "/home/almalinux/work/sandbox/dependency-diff-check"
}
]
}
});
retMap = utils.parseGradleProperties(
fs.readFileSync("./test/data/gradle-properties-single.txt", {
encoding: "utf-8"
})
);
expect(retMap).toEqual({
rootProject: "java-test",
projects: [],
metadata: {
group: "com.ajmalab.demo",
version: "latest",
properties: [
{
name: "buildFile",
value: "/home/almalinux/work/sandbox/java-test/build.gradle"
},
{
name: "projectDir",
value: "/home/almalinux/work/sandbox/java-test"
},
{ name: "rootDir", value: "/home/almalinux/work/sandbox/java-test" }
]
}
});
retMap = utils.parseGradleProperties(
fs.readFileSync("./test/data/gradle-properties-single2.txt", {
encoding: "utf-8"
})
);
expect(retMap).toEqual({
rootProject: "java-test",
projects: [],
metadata: {
group: "com.ajmalab.demo",
version: "latest",
properties: [
{
name: "buildFile",
value: "/home/almalinux/work/sandbox/java-test/build.gradle"
},
{ name: "projectDir", value: "/home/almalinux/work/sandbox/java-test" },
{ name: "rootDir", value: "/home/almalinux/work/sandbox/java-test" }
]
}
});
retMap = utils.parseGradleProperties(
fs.readFileSync("./test/data/gradle-properties-elastic.txt", {
encoding: "utf-8"
})
);
expect(retMap.rootProject).toEqual("elasticsearch");
expect(retMap.projects.length).toEqual(409);
});
test("parse maven tree", () => {
expect(utils.parseMavenTree(null)).toEqual({});
let parsedList = utils.parseMavenTree(
fs.readFileSync("./test/data/sample-mvn-tree.txt", { encoding: "utf-8" })
);
expect(parsedList.pkgList.length).toEqual(61);
expect(parsedList.dependenciesList.length).toEqual(61);
expect(parsedList.pkgList[0]).toEqual({
group: "com.pogeyan.cmis",
name: "copper-server",
version: "1.15.2",
qualifiers: { type: "jar" }
});
expect(parsedList.dependenciesList[0]).toEqual({
ref: "pkg:maven/com.pogeyan.cmis/copper-server@1.15.2?type=jar",
dependsOn: [
"pkg:maven/javax/javaee-web-api@7.0?type=jar",
"pkg:maven/org.apache.chemistry.opencmis/chemistry-opencmis-server-support@1.0.0?type=jar",
"pkg:maven/com.pogeyan.cmis/copper-server-api@1.15.2?type=jar",
"pkg:maven/com.pogeyan.cmis/copper-server-impl@1.15.2?type=jar",
"pkg:maven/com.pogeyan.cmis/copper-server-ldap@1.15.2?type=jar",
"pkg:maven/com.pogeyan.cmis/copper-server-repo@1.15.2?type=jar",
"pkg:maven/com.pogeyan.cmis/copper-server-mongo@1.15.2?type=jar",
"pkg:maven/org.apache.commons/commons-lang3@3.4?type=jar",
"pkg:maven/io.dropwizard.metrics/metrics-core@3.1.2?type=jar",
"pkg:maven/com.github.davidb/metrics-influxdb@0.9.3?type=jar",
"pkg:maven/commons-fileupload/commons-fileupload@1.4?type=jar",
"pkg:maven/com.fasterxml.jackson.core/jackson-core@2.12.0?type=jar",
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.12.0?type=jar",
"pkg:maven/junit/junit@4.12?type=jar",
"pkg:maven/com.typesafe.akka/akka-actor_2.11@2.4.14?type=jar",
"pkg:maven/com.typesafe.akka/akka-cluster_2.11@2.4.14?type=jar",
"pkg:maven/org.codehaus.jackson/jackson-mapper-asl@1.9.13?type=jar",
"pkg:maven/org.slf4j/slf4j-log4j12@1.7.21?type=jar",
"pkg:maven/commons-io/commons-io@2.6?type=jar"
]
});
parsedList = utils.parseMavenTree(
fs.readFileSync("./test/data/mvn-dep-tree-simple.txt", {
encoding: "utf-8"
})
);
expect(parsedList.pkgList.length).toEqual(37);
expect(parsedList.dependenciesList.length).toEqual(37);
expect(parsedList.pkgList[0]).toEqual({
group: "com.gitlab.security_products.tests",
name: "java-maven",
version: "1.0-SNAPSHOT",
qualifiers: { type: "jar" }
});
expect(parsedList.dependenciesList[0]).toEqual({
ref: "pkg:maven/com.gitlab.security_products.tests/java-maven@1.0-SNAPSHOT?type=jar",
dependsOn: [
"pkg:maven/org.powermock/powermock-api-mockito@1.7.3?type=jar",
"pkg:maven/io.netty/netty@3.9.1.Final?type=jar",
"pkg:maven/junit/junit@3.8.1?type=jar",
"pkg:maven/org.apache.maven/maven-artifact@3.3.9?type=jar",
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.9.2?type=jar",
"pkg:maven/org.mozilla/rhino@1.7.10?type=jar",
"pkg:maven/org.apache.geode/geode-core@1.1.1?type=jar"
]
});
});
// Slow test
/*
test("get maven metadata", async () => {
let data = await utils.getMvnMetadata([
{
group: "com.squareup.okhttp3",
name: "okhttp",
version: "3.8.1",
},
]);
expect(data).toEqual([
{
description: "",
group: "com.squareup.okhttp3",
name: "okhttp",
version: "3.8.1",
},
]);
data = await utils.getMvnMetadata([
{
group: "com.fasterxml.jackson.core",
name: "jackson-databind",
version: "2.8.5",
},
{
group: "com.github.jnr",
name: "jnr-posix",
version: "3.0.47",
},
]);
expect(data).toEqual([
{
group: "com.fasterxml.jackson.core",
name: "jackson-databind",
version: "2.8.5",
description:
"General data-binding functionality for Jackson: works on core streaming API",
repository: { url: "http://github.com/FasterXML/jackson-databind" },
},
{
group: "com.github.jnr",
name: "jnr-posix",
version: "3.0.47",
license: ["EPL-2.0", "GPL-2.0-only", "LGPL-2.1-only"],
description: "\n Common cross-project/cross-platform POSIX APIs\n ",
repository: { url: "git@github.com:jnr/jnr-posix.git" },
},
]);
});
*/
test("get py metadata", async () => {
const data = await utils.getPyMetadata(
[
{
group: "",
name: "Flask",
version: "1.1.0"
}
],
false
);
expect(data).toEqual([
{
group: "",
name: "Flask",
version: "1.1.0"
}
]);
}, 240000);
test("parseGoModData", async () => {
let dep_list = await utils.parseGoModData(null);
expect(dep_list).toEqual([]);
const gosumMap = {
"google.golang.org/grpc/v1.21.0":
"sha256-oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=",
"github.com/aws/aws-sdk-go/v1.38.47": "sha256-fake-sha-for-aws-go-sdk=",
"github.com/spf13/cobra/v1.0.0":
"sha256-/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=",
"github.com/spf13/viper/v1.0.2":
"sha256-A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=",
"github.com/stretchr/testify/v1.6.1":
"sha256-6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg="
};
dep_list = await utils.parseGoModData(
fs.readFileSync("./test/gomod/go.mod", { encoding: "utf-8" }),
gosumMap
);
expect(dep_list.length).toEqual(4);
expect(dep_list[0]).toEqual({
group: "",
name: "github.com/aws/aws-sdk-go",
license: undefined,
version: "v1.38.47",
_integrity: "sha256-fake-sha-for-aws-go-sdk="
});
expect(dep_list[1]).toEqual({
group: "",
name: "github.com/spf13/cobra",
license: undefined,
version: "v1.0.0",
_integrity: "sha256-/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE="
});
expect(dep_list[2]).toEqual({
group: "",
name: "google.golang.org/grpc",
license: undefined,
version: "v1.21.0",
_integrity: "sha256-oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM="
});
expect(dep_list[3]).toEqual({
group: "",
name: "github.com/spf13/viper",
license: undefined,
version: "v1.0.2",
_integrity: "sha256-A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM="
});
dep_list.forEach((d) => {
expect(d.license);
});
}, 120000);
test("parseGoSumData", async () => {
let dep_list = await utils.parseGoModData(null);
expect(dep_list).toEqual([]);
dep_list = await utils.parseGosumData(
fs.readFileSync("./test/gomod/go.sum", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(4);
expect(dep_list[0]).toEqual({
group: "",
name: "google.golang.org/grpc",
license: undefined,
version: "v1.21.0",
_integrity: "sha256-oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM="
});
expect(dep_list[1]).toEqual({
group: "",
name: "github.com/spf13/cobra",
license: undefined,
version: "v1.0.0",
_integrity: "sha256-/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE="
});
expect(dep_list[2]).toEqual({
group: "",
name: "github.com/spf13/viper",
license: undefined,
version: "v1.0.2",
_integrity: "sha256-A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM="
});
expect(dep_list[3]).toEqual({
group: "",
name: "github.com/stretchr/testify",
license: undefined,
version: "v1.6.1",
_integrity: "sha256-6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg="
});
dep_list.forEach((d) => {
expect(d.license);
});
}, 120000);
test("parse go list dependencies", async () => {
let dep_list = await utils.parseGoListDep(
fs.readFileSync("./test/data/golist-dep.txt", { encoding: "utf-8" }),
{}
);
expect(dep_list.length).toEqual(4);
expect(dep_list[0]).toEqual({
group: "",
name: "github.com/gorilla/mux",
version: "v1.7.4",
_integrity: undefined,
license: undefined,
scope: "required",
properties: [
{
name: "SrcGoMod",
value:
"/home/almalinux/go/pkg/mod/cache/download/github.com/gorilla/mux/@v/v1.7.4.mod"
},
{ name: "ModuleGoVersion", value: "1.12" }
]
});
});
test("parse go mod why dependencies", () => {
let pkg_name = utils.parseGoModWhy(
fs.readFileSync("./test/data/gomodwhy.txt", { encoding: "utf-8" })
);
expect(pkg_name).toEqual("github.com/mailgun/mailgun-go/v4");
pkg_name = utils.parseGoModWhy(
fs.readFileSync("./test/data/gomodwhynot.txt", { encoding: "utf-8" })
);
expect(pkg_name).toBeUndefined();
});
test("parseGopkgData", async () => {
jest.setTimeout(120000);
let dep_list = await utils.parseGopkgData(null);
expect(dep_list).toEqual([]);
dep_list = await utils.parseGopkgData(
fs.readFileSync("./test/gopkg/Gopkg.lock", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(36);
expect(dep_list[0]).toEqual({
group: "",
name: "cloud.google.com/go",
version: "v0.39.0",
_integrity: "sha256-LKUyprxlVmM0QAS6ECQ20pAxAY6rI2JHZ42x2JeGJ78="
});
dep_list.forEach((d) => {
expect(d.license);
});
});
test("parse go version data", async () => {
let dep_list = await utils.parseGoVersionData(
fs.readFileSync("./test/data/goversion.txt", { encoding: "utf-8" }),
{}
);
expect(dep_list.length).toEqual(125);
expect(dep_list[0]).toEqual({
group: "",
name: "github.com/ShiftLeftSecurity/atlassian-connect-go",
version: "v0.0.2",
_integrity: "",
license: undefined
});
dep_list = await utils.parseGoVersionData(
fs.readFileSync("./test/data/goversion2.txt", { encoding: "utf-8" }),
{}
);
expect(dep_list.length).toEqual(149);
expect(dep_list[0]).toEqual({
group: "",
name: "cloud.google.com/go",
version: "v0.79.0",
_integrity: "sha256-oqqswrt4x6b9OGBnNqdssxBl1xf0rSUNjU2BR4BZar0=",
license: undefined
});
});
test("parse cargo lock", async () => {
expect(await utils.parseCargoData(null)).toEqual([]);
let dep_list = await utils.parseCargoData(
fs.readFileSync("./test/Cargo.lock", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(224);
expect(dep_list[0]).toEqual({
group: "",
name: "abscissa_core",
version: "0.5.2",
_integrity:
"sha384-6a07677093120a02583717b6dd1ef81d8de1e8d01bd226c83f0f9bdf3e56bb3a"
});
dep_list = await utils.parseCargoData(
fs.readFileSync("./test/data/Cargom.lock", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(242);
expect(dep_list[0]).toEqual({
group: "",
name: "actix-codec",
version: "0.3.0",
_integrity:
"sha384-78d1833b3838dbe990df0f1f87baf640cf6146e898166afe401839d1b001e570"
});
});
test("parse cargo toml", async () => {
expect(await utils.parseCargoTomlData(null)).toEqual([]);
let dep_list = await utils.parseCargoTomlData(
fs.readFileSync("./test/data/Cargo1.toml", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(4);
expect(dep_list).toEqual([
{ group: "", name: "unwind", version: "0.0.0" },
{ name: "libc", version: "0.2.79" },
{ name: "compiler_builtins", version: "0.1.0" },
{ name: "cfg-if", version: "0.1.8" }
]);
dep_list = await utils.parseCargoTomlData(
fs.readFileSync("./test/data/Cargo2.toml", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(3);
expect(dep_list).toEqual([
{ group: "", name: "quiche-fuzz", version: "0.1.0" },
{ name: "lazy_static", version: "1" },
{
name: "libfuzzer-sys",
version: "git+https://github.com/rust-fuzz/libfuzzer-sys.git"
}
]);
});
test("parse cargo auditable data", async () => {
expect(await utils.parseCargoAuditableData(null)).toEqual([]);
let dep_list = await utils.parseCargoAuditableData(
fs.readFileSync("./test/data/cargo-auditable.txt", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(32);
expect(dep_list[0]).toEqual({
group: "",
name: "adler",
version: "1.0.2"
});
});
test("get crates metadata", async () => {
const dep_list = await utils.getCratesMetadata([
{
group: "",
name: "abscissa_core",
version: "0.5.2",
_integrity:
"sha256-6a07677093120a02583717b6dd1ef81d8de1e8d01bd226c83f0f9bdf3e56bb3a"
}
]);
expect(dep_list.length).toEqual(1);
expect(dep_list[0]).toEqual({
group: "",
name: "abscissa_core",
version: "0.5.2",
_integrity:
"sha256-6a07677093120a02583717b6dd1ef81d8de1e8d01bd226c83f0f9bdf3e56bb3a",
description:
"Application microframework with support for command-line option parsing,\nconfiguration, error handling, logging, and terminal interactions.\nThis crate contains the framework's core functionality.\n",
license: ["Apache-2.0"],
repository: {
url: "https://github.com/iqlusioninc/abscissa/tree/main/core/"
},
homepage: { url: "https://github.com/iqlusioninc/abscissa/" }
});
});
test("parse pub lock", async () => {
expect(await utils.parsePubLockData(null)).toEqual([]);
let dep_list = await utils.parsePubLockData(
fs.readFileSync("./test/data/pubspec.lock", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(26);
expect(dep_list[0]).toEqual({
name: "async",
version: "2.8.2"
});
dep_list = await utils.parsePubYamlData(
fs.readFileSync("./test/data/pubspec.yaml", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(1);
expect(dep_list[0]).toEqual({
name: "awesome_dialog",
version: "2.2.1",
description:
"Flutter package to show beautiful dialogs(INFO,QUESTION,WARNING,SUCCESS,ERROR) with animations as simply as possible.",
homepage: {
url: "https://github.com/marcos930807/awesomeDialogs"
}
});
});
test("get dart metadata", async () => {
const dep_list = await utils.getDartMetadata([
{
group: "",
name: "async",
version: "2.8.2"
}
]);
expect(dep_list.length).toEqual(1);
expect(dep_list[0]).toEqual({
group: "",
name: "async",
version: "2.8.2",
description:
"Utility functions and classes related to the 'dart:async' library.",
license: "https://pub.dev/packages/async/license",
repository: {
url: "https://github.com/dart-lang/async"
}
});
}, 120000);
test("parse cabal freeze", async () => {
expect(await utils.parseCabalData(null)).toEqual([]);
let dep_list = await utils.parseCabalData(
fs.readFileSync("./test/data/cabal.project.freeze", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(24);
expect(dep_list[0]).toEqual({
name: "ansi-terminal",
version: "0.11.3"
});
dep_list = await utils.parseCabalData(
fs.readFileSync("./test/data/cabal-2.project.freeze", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(366);
expect(dep_list[0]).toEqual({
name: "Cabal",
version: "3.2.1.0"
});
});
test("parse conan data", async () => {
expect(await utils.parseConanLockData(null)).toEqual([]);
let dep_list = await utils.parseConanLockData(
fs.readFileSync("./test/data/conan.lock", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(3);
expect(dep_list[0]).toEqual({
name: "zstd",
version: "1.4.4"
});
dep_list = await utils.parseConanData(
fs.readFileSync("./test/data/conanfile.txt", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(3);
expect(dep_list[0]).toEqual({
name: "zstd",
version: "1.4.4"
});
});
test("parse clojure data", () => {
expect(utils.parseLeiningenData(null)).toEqual([]);
let dep_list = utils.parseLeiningenData(
fs.readFileSync("./test/data/project.clj", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(14);
expect(dep_list[0]).toEqual({
group: "",
name: "leiningen-core",
version: "2.9.9-SNAPSHOT"
});
dep_list = utils.parseLeiningenData(
fs.readFileSync("./test/data/project.clj.1", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(17);
expect(dep_list[0]).toEqual({
group: "org.clojure",
name: "clojure",
version: "1.9.0"
});
dep_list = utils.parseLeiningenData(
fs.readFileSync("./test/data/project.clj.2", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(49);
expect(dep_list[0]).toEqual({
group: "",
name: "bidi",
version: "2.1.6"
});
dep_list = utils.parseEdnData(
fs.readFileSync("./test/data/deps.edn", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(20);
expect(dep_list[0]).toEqual({
group: "org.clojure",
name: "clojure",
version: "1.10.3"
});
dep_list = utils.parseEdnData(
fs.readFileSync("./test/data/deps.edn.1", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(11);
expect(dep_list[0]).toEqual({
group: "org.clojure",
name: "clojure",
version: "1.11.0-beta1"
});
dep_list = utils.parseEdnData(
fs.readFileSync("./test/data/deps.edn.2", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(5);
expect(dep_list[0]).toEqual({
group: "clj-commons",
name: "pomegranate",
version: "1.2.1"
});
dep_list = utils.parseCljDep(
fs.readFileSync("./test/data/clj-tree.txt", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(253);
expect(dep_list[0]).toEqual({
group: "org.bouncycastle",
name: "bcprov-jdk15on",
version: "1.70"
});
dep_list = utils.parseLeinDep(
fs.readFileSync("./test/data/lein-tree.txt", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(47);
expect(dep_list[0]).toEqual({
group: "javax.xml.bind",
name: "jaxb-api",
version: "2.4.0-b180830.0359"
});
});
test("parse mix lock data", async () => {
expect(await utils.parseMixLockData(null)).toEqual([]);
let dep_list = await utils.parseMixLockData(
fs.readFileSync("./test/data/mix.lock", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(16);
expect(dep_list[0]).toEqual({
name: "absinthe",
version: "1.7.0"
});
dep_list = await utils.parseMixLockData(
fs.readFileSync("./test/data/mix.lock.1", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(23);
expect(dep_list[0]).toEqual({
name: "bunt",
version: "0.2.0"
});
});
test("parse github actions workflow data", async () => {
expect(await utils.parseGitHubWorkflowData(null)).toEqual([]);
let dep_list = await utils.parseGitHubWorkflowData(
fs.readFileSync("./.github/workflows/nodejs.yml", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(3);
expect(dep_list[0]).toEqual({
group: "actions",
name: "checkout",
version: "v3"
});
dep_list = await utils.parseGitHubWorkflowData(
fs.readFileSync("./.github/workflows/repotests.yml", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(5);
expect(dep_list[0]).toEqual({
group: "actions",
name: "checkout",
version: "v3"
});
dep_list = await utils.parseGitHubWorkflowData(
fs.readFileSync("./.github/workflows/app-release.yml", {
encoding: "utf-8"
})
);
expect(dep_list.length).toEqual(4);
});
test("parse cs pkg data", async () => {
expect(await utils.parseCsPkgData(null)).toEqual([]);
const dep_list = await utils.parseCsPkgData(
fs.readFileSync("./test/data/packages.config", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(21);
expect(dep_list[0]).toEqual({
group: "",
name: "Antlr",
version: "3.5.0.2"
});
});
test("parse cs pkg data 2", async () => {
expect(await utils.parseCsPkgData(null)).toEqual([]);
const dep_list = await utils.parseCsPkgData(
fs.readFileSync("./test/data/packages2.config", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(1);
expect(dep_list[0]).toEqual({
group: "",
name: "EntityFramework",
version: "6.2.0"
});
});
test("parse cs proj", async () => {
expect(await utils.parseCsProjData(null)).toEqual([]);
const dep_list = await utils.parseCsProjData(
fs.readFileSync("./test/sample.csproj", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(5);
expect(dep_list[0]).toEqual({
group: "",
name: "Microsoft.AspNetCore.Mvc.NewtonsoftJson",
version: "3.1.1"
});
});
test("parse project.assets.json", async () => {
expect(await utils.parseCsProjAssetsData(null)).toEqual([]);
const dep_list = await utils.parseCsProjAssetsData(
fs.readFileSync("./test/data/project.assets.json", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(142);
expect(dep_list[0]).toEqual({
group: "",
name: "Castle.Core",
version: "4.4.1",
_integrity:
"sha512-zanbjWC0Y05gbx4eGXkzVycOQqVOFVeCjVsDSyuao9P4mtN1w3WxxTo193NGC7j3o2u3AJRswaoC6hEbnGACnQ=="
});
});
test("parse packages.lock.json", async () => {
expect(await utils.parseCsPkgLockData(null)).toEqual([]);
const dep_list = await utils.parseCsPkgLockData(
fs.readFileSync("./test/data/packages.lock.json", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(14);
expect(dep_list[0]).toEqual({
group: "",
name: "Antlr",
version: "3.5.0.2"
});
});
test("parse .net cs proj", async () => {
expect(await utils.parseCsProjData(null)).toEqual([]);
const dep_list = await utils.parseCsProjData(
fs.readFileSync("./test/data/sample-dotnet.csproj", { encoding: "utf-8" })
);
expect(dep_list.length).toEqual(19);
expect(dep_list[0]).toEqual({
group: "",
name: "Antlr3.Runtime",
version: "3.5.0.2"
});
});
test("get nget metadata", async () => {
jest.setTimeout(240000);
const dep_list = await utils.getNugetMetadata([
{
group: "",
name: "Castle.Core",
version: "4.4.0"
}
]);
expect(dep_list.length).toEqual(1);
expect(dep_list[0]).toEqual({
group: "",
name: "Castle.Core",
version: "4.4.0",
description:
"Castle Core, including DynamicProxy, Logging Abstractions and DictionaryAdapter",
homepage: {
url: "https://www.nuget.org/packages/Castle.Core/4.4.0/"
},
license: "http://www.apache.org/licenses/LICENSE-2.0.html",
repository: {
url: "http://www.castleproject.org/"
}
});
});
test("parsePomFile", () => {
const data = utils.parsePom("./test/pom.xml");
expect(data.length).toEqual(13);
});
test("parsePomMetadata", async () => {
const deps = utils.parsePom("./test/pom.xml");
const data = await utils.getMvnMetadata(deps);
expect(data.length).toEqual(deps.length);
});
/*
test("get repo license", async () => {
let license = await utils.getRepoLicense(
"https://github.com/ShiftLeftSecurity/sast-scan"
);
expect(license).toEqual({
id: "GPL-3.0-or-later",
url: "https://github.com/ShiftLeftSecurity/sast-scan/blob/master/LICENSE"
});
license = await utils.getRepoLicense("https://github.com/cyclonedx/cdxgen", {
group: "",
name: "cdxgen"
});
expect(license).toEqual({
id: "Apache-2.0",
url: "https://github.com/cyclonedx/cdxgen/blob/master/LICENSE"
});
license = await utils.getRepoLicense("https://cloud.google.com/go", {
group: "cloud.google.com",
name: "go"
});
expect(license).toEqual("Apache-2.0");
license = await utils.getRepoLicense(undefined, {
group: "github.com/ugorji",
name: "go"
});
expect(license).toEqual({
id: "MIT",
url: "https://github.com/ugorji/go/blob/master/LICENSE"
});
});
test("get go pkg license", async () => {
jest.setTimeout(120000);
let license = await utils.getGoPkgLicense({
group: "github.com/Azure/azure-amqp-common-go",
name: "v2"
});
expect(license).toEqual([
{
id: "MIT",
url: "https://pkg.go.dev/github.com/Azure/azure-amqp-common-go/v2?tab=licenses"
}
]);
license = await utils.getGoPkgLicense({
group: "go.opencensus.io",
name: "go.opencensus.io"
});
expect(license).toEqual([
{
id: "Apache-2.0",
url: "https://pkg.go.dev/go.opencensus.io?tab=licenses"
}
]);
license = await utils.getGoPkgLicense({
group: "github.com/DataDog",
name: "zstd"
});
expect(license).toEqual([
{
id: "BSD-3-Clause",
url: "https://pkg.go.dev/github.com/DataDog/zstd?tab=licenses"
}
]);
});
*/
test("get licenses", () => {
let licenses = utils.getLicenses({ license: "MIT" });
expect(licenses).toEqual([
{
license: {
id: "MIT",
url: "https://opensource.org/licenses/MIT"
}
}
]);
licenses = utils.getLicenses({ license: ["MIT", "GPL-3.0-or-later"] });
expect(licenses).toEqual([
{
license: {
id: "MIT",
url: "https://opensource.org/licenses/MIT"
}
},
{
license: {
id: "GPL-3.0-or-later",
url: "https://opensource.org/licenses/GPL-3.0-or-later"
}
}
]);
licenses = utils.getLicenses({
license: {
id: "MIT",
url: "https://opensource.org/licenses/MIT"
}
});
expect(licenses).toEqual([
{
license: {
id: "MIT",
url: "https://opensource.org/licenses/MIT"
}
}
]);
});
test("parsePkgLock", async () => {
let parsedList = await utils.parsePkgLock("./test/package-lock.json");
let deps = parsedList.pkgList;
expect(deps.length).toEqual(760);
expect(deps[1]._integrity).toEqual(
"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
);
expect(parsedList.dependenciesList.length).toEqual(621);
parsedList = await utils.parsePkgLock("./test/data/package-lock-v1.json");
deps = parsedList.pkgList;
expect(deps.length).toEqual(639);
expect(deps[1]._integrity).toEqual(
"sha512-/r5HiDwOXTjucbBYkrTMpzWQAwil9MH7zSEfKH+RWWZv27r4vDiUd2FiBJItyQoPThLPxaf82IO6gCXyJR0ZnQ=="
);
expect(parsedList.dependenciesList.length).toEqual(572);
parsedList = await utils.parsePkgLock("./test/data/package-lock2.json");
deps = parsedList.pkgList;
expect(deps.length).toEqual(1);
expect(deps[0]).toEqual({
"bom-ref": "pkg:application/MyProject",
name: "MyProject"
});
parsedList = await utils.parsePkgLock("./test/data/package-lock-v2.json");
deps = parsedList.pkgList;
expect(deps.length).toEqual(1467);
expect(parsedList.dependenciesList.length).toEqual(1280);
expect(deps[0]).toEqual({
"bom-ref": "pkg:application/flink-dashboard@2.0.0",
group: "",
name: "flink-dashboard",
type: "application",
version: "2.0.0"
});
expect(deps[deps.length - 1].name).toEqual("zone.js");
parsedList = await utils.parsePkgLock("./test/data/package-lock-v3.json");
deps = parsedList.pkgList;
expect(deps.length).toEqual(879);
expect(parsedList.dependenciesList.length).toEqual(879);
expect(deps[0]).toEqual({
"bom-ref": "pkg:application/@cyclonedx/cdxgen@8.4.3",
group: "",
name: "@cyclonedx/cdxgen",
type: "application",
version: "8.4.3"
});
expect(deps[deps.length - 1].name).toEqual("yocto-queue");
});
test("parseBowerJson", async () => {
const deps = await utils.parseBowerJson("./test/data/bower.json");
expect(deps.length).toEqual(1);
expect(deps[0].name).toEqual("jquery");
});
test("parseNodeShrinkwrap", async () => {
const deps = await utils.parseNodeShrinkwrap("./test/shrinkwrap-deps.json");
expect(deps.length).toEqual(496);
expect(deps[0]._integrity).toEqual(
"sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g=="
);
});
test("parseSetupPyFile", async () => {
let deps = await utils.parseSetupPyFile(`install_requires=[
'colorama>=0.4.3',
'libsast>=1.0.3',
],`);
expect(deps.length).toEqual(2);
expect(deps[0].name).toEqual("colorama");
deps = await utils.parseSetupPyFile(
`install_requires=['colorama>=0.4.3','libsast>=1.0.3',],`
);
expect(deps.length).toEqual(2);
expect(deps[0].name).toEqual("colorama");
deps = await utils.parseSetupPyFile(
`install_requires=['colorama>=0.4.3','libsast>=1.0.3']`
);
expect(deps.length).toEqual(2);
expect(deps[0].name).toEqual("colorama");
deps = await utils.parseSetupPyFile(
`install_requires=['colorama>=0.4.3', 'libsast>=1.0.3']`
);
expect(deps.length).toEqual(2);
expect(deps[0].name).toEqual("colorama");
deps = await utils.parseSetupPyFile(`install_requires=[
'colorama>=0.4.3',
'libsast>=1.0.3',
]`);
expect(deps.length).toEqual(2);
expect(deps[0].name).toEqual("colorama");
});
test("parsePnpmLock", async () => {
let parsedList = await utils.parsePnpmLock("./test/pnpm-lock.yaml");
expect(parsedList.pkgList.length).toEqual(1610);
expect(parsedList.dependenciesList.length).toEqual(1610);
expect(parsedList.pkgList[0]).toEqual({
_integrity:
"sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
group: "@babel",
name: "code-frame",
scope: undefined,
version: "7.10.1",
properties: [
{
name: "SrcFile",
value: "./test/pnpm-lock.yaml"
}
]
});
parsedList = await utils.parsePnpmLock("./test/data/pnpm-lock.yaml");
expect(parsedList.pkgList.length).toEqual(308);
expect(parsedList.dependenciesList.length).toEqual(308);
expect(parsedList.pkgList[0]).toEqual({
_integrity:
"sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
group: "@babel",
name: "code-frame",
scope: "optional",
version: "7.16.7",
properties: [
{
name: "SrcFile",
value: "./test/data/pnpm-lock.yaml"
}
]
});
parsedList = await utils.parsePnpmLock("./test/data/pnpm-lock2.yaml");
expect(parsedList.pkgList.length).toEqual(7);
expect(parsedList.dependenciesList.length).toEqual(7);
expect(parsedList.pkgList[0]).toEqual({
group: "",
name: "ansi-regex",
version: "2.1.1",
scope: undefined,
_integrity: "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
properties: [{ name: "SrcFile", value: "./test/data/pnpm-lock2.yaml" }]
});
expect(parsedList.dependenciesList[2]).toEqual({
ref: "pkg:npm/chalk@1.1.3",
dependsOn: [
"pkg:npm/ansi-styles@2.2.1",
"pkg:npm/escape-string-regexp@1.0.5",
"pkg:npm/has-ansi@2.0.0",
"pkg:npm/strip-ansi@3.0.1",
"pkg:npm/supports-color@2.0.0"
]
});
parsedList = await utils.parsePnpmLock("./test/data/pnpm-lock3.yaml");
expect(parsedList.pkgList.length).toEqual(448);
expect(parsedList.dependenciesList.length).toEqual(448);
expect(parsedList.pkgList[0]).toEqual({
group: "@nodelib",
name: "fs.scandir",
version: "2.1.5",
scope: undefined,
_integrity:
"sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
properties: [{ name: "SrcFile", value: "./test/data/pnpm-lock3.yaml" }]
});
expect(parsedList.dependenciesList[2]).toEqual({
ref: "pkg:npm/@nodelib/fs.walk@1.2.8",
dependsOn: ["pkg:npm/@nodelib/fs.scandir@2.1.5", "pkg:npm/fastq@1.13.0"]
});
parsedList = await utils.parsePnpmLock("./test/data/pnpm-lock4.yaml");
expect(parsedList.pkgList.length).toEqual(1);
parsedList = await utils.parsePnpmLock("./test/data/pnpm-lock6.yaml");
expect(parsedList.pkgList.length).toEqual(195);
expect(parsedList.dependenciesList.length).toEqual(195);
expect(parsedList.pkgList[0]).toEqual({
group: "@babel",
name: "code-frame",
version: "7.18.6",
scope: "optional",
_integrity:
"sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
properties: [{ name: "SrcFile", value: "./test/data/pnpm-lock6.yaml" }]
});
expect(parsedList.pkgList[parsedList.pkgList.length - 1]).toEqual({
group: "",
name: "yargs",
version: "17.7.1",
scope: "optional",
_integrity:
"sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
properties: [{ name: "SrcFile", value: "./test/data/pnpm-lock6.yaml" }]
});
parsedList = await utils.parsePnpmLock("./test/data/pnpm-lock6a.yaml");
expect(parsedList.pkgList.length).toEqual(229);
expect(parsedList.dependenciesList.length).toEqual(229);
expect(parsedList.pkgList[0]).toEqual({
group: "@babel",
name: "code-frame",
version: "7.18.6",
scope: "optional",
_integrity:
"sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
properties: [{ name: "SrcFile", value: "./test/data/pnpm-lock6a.yaml" }]
});
});
test("parseYarnLock", async () => {
let identMap = utils.yarnLockToIdentMap(
fs.readFileSync("./test/yarn.lock", "utf8")
);
expect(Object.keys(identMap).length).toEqual(62);
let parsedList = await utils.parseYarnLock("./test/yarn.lock");
expect(parsedList.pkgList.length).toEqual(56);
expect(parsedList.pkgList[0]).toEqual({
group: "",
name: "asap",
version: "2.0.5",
_integrity: "sha256-522765b50c3510490e52d7dcfe085ef9ba96958f",
properties: [
{
name: "SrcFile",
value: "./test/yarn.lock"
}
]
});
expect(parsedList.dependenciesList.length).toEqual(56);
identMap = utils.yarnLockToIdentMap(
fs.readFileSync("./test/data/yarn_locks/yarn.lock", "utf8")
);
expect(Object.keys(identMap).length).toEqual(2566);
parsedList = await utils.parseYarnLock("./test/data/yarn_locks/yarn.lock");
expect(parsedList.pkgList.length).toEqual(2029);
expect(parsedList.dependenciesList.length).toEqual(2029);
expect(parsedList.pkgList[0]).toEqual({
group: "@babel",
name: "cli",
version: "7.10.1",
_integrity:
"sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g==",
properties: [
{
name: "SrcFile",
value: "./test/data/yarn_locks/yarn.lock"
}
]
});
parsedList.pkgList.forEach((d) => {
expect(d.name).toBeDefined();
expect(d.version).toBeDefined();
});
parsedList = await utils.parseYarnLock(
"./test/data/yarn_locks/yarn-multi.lock"
);
expect(parsedList.pkgList.length).toEqual(1909);
expect(parsedList.dependenciesList.length).toEqual(1909);
expect(parsedList.pkgList[0]).toEqual({
_integrity:
"sha512-zpruxnFMz6K94gs2pqc3sidzFDbQpKT5D6P/J/I9s8ekHZ5eczgnRp6pqXC86Bh7+44j/btpmOT0kwiboyqTnA==",
group: "@apollo",
name: "client",
version: "3.2.5",
properties: [
{
name: "SrcFile",
value: "./test/data/yarn_locks/yarn-multi.lock"
}
]
});
parsedList = await utils.parseYarnLock(
"./test/data/yarn_locks/yarn-light.lock"
);
expect(parsedList.pkgList.length).toEqual(315);
expect(parsedList.dependenciesList.length).toEqual(315);
expect(parsedList.pkgList[0]).toEqual({
_integrity:
"sha512-rZ1k9kQvJX21Vwgx1L6kSQ6yeXo9cCMyqURSnjG+MRoJn+Mr3LblxmVdzScHXRzv0N9yzy49oG7Bqxp9Knyv/g==",
group: "@actions",
name: "artifact",
version: "0.6.1",
properties: [
{
name: "SrcFile",
value: "./test/data/yarn_locks/yarn-light.lock"
}
]
});
parsedList = await utils.parseYarnLock("./test/data/yarn_locks/yarn3.lock");
expect(parsedList.pkgList.length).toEqual(5);
expect(parsedList.dependenciesList.length).toEqual(5);
expect(parsedList.pkgList[1]).toEqual({
_integrity:
"sha512-+X9Jn4mPI+RYV0ITiiLyJSYlT9um111BocJSaztsxXR+9ZxWErpzdfQqyk+EYZUOklugjJkerQZRtJGLfJeClw==",
group: "",
name: "lru-cache",
version: "6.0.0",
properties: [
{
name: "SrcFile",
value: "./test/data/yarn_locks/yarn3.lock"
}
]
});
parsedList = await utils.parseYarnLock("./test/data/yarn_locks/yarnv2.lock");
expect(parsedList.pkgList.length).toEqual(1090);
expect(parsedList.dependenciesList.length).toEqual(1088);
expect(parsedList.pkgList[0]).toEqual({
_integrity:
"sha512-G0U5NjBUYIs39l1J1ckgpVfVX2IxpzRAIT4/2An86O2Mcri3k5xNu7/RRkfObo12wN9s7BmnREAMhH7252oZiA==",
group: "@arcanis",
name: "slice-ansi",
version: "1.0.2",
properties: [
{
name: "SrcFile",
value: "./test/data/yarn_locks/yarnv2.lock"
}
]
});
parsedList = await utils.parseYarnLock("./test/data/yarn_locks/yarnv3.lock");
expect(parsedList.pkgList.length).toEqual(325);
expect(parsedList.dependenciesList.length).toEqual(323);
expect(parsedList.pkgList[0]).toEqual({
_integrity:
"sha512-vtU+q0TmdIDmezU7lKub73vObN6nmd3lkcKWz7R9hyNI8gz5o7grDb+FML9nykOLW+09gGIup2xyJ86j5vBKpg==",
group: "@babel",
name: "code-frame",
version: "7.16.7",
properties: [
{
name: "SrcFile",
value: "./test/data/yarn_locks/yarnv3.lock"
}
]
});
parsedList = await utils.parseYarnLock("./test/data/yarn_locks/yarn4.lock");
expect(parsedList.pkgList.length).toEqual(1);
expect(parsedList.dependenciesList.length).toEqual(1);
parsedList = await utils.parseYarnLock("./test/data/yarn_locks/yarn-at.lock");
expect(parsedList.pkgList.length).toEqual(4);
expect(parsedList.dependenciesList.length).toEqual(4);
expect(parsedList.pkgList[0]).toEqual({
group: "@ac-synth",
name: "yjs",
version: "13.5.39-alpha1",
_integrity:
"sha512-JE93VWVyVa07xkK1wJ5ogjSZ30Nn4ptUuUXdPnu8MsKme1xFHLFFD3UtnHxnxnNDSnGx+WLlhuyHdIFfSCYqYg==",
properties: [
{ name: "SrcFile", value: "./test/data/yarn_locks/yarn-at.lock" }
]
});
});
test("parseComposerLock", () => {
let deps = utils.parseComposerLock("./test/data/composer.lock");
expect(deps.length).toEqual(1);
expect(deps[0]).toEqual({
group: "quickbooks",
name: "v3-php-sdk",
scope: "required",
version: "4.0.6.1",
repository: {
type: "git",
url: "https://github.com/intuit/QuickBooks-V3-PHP-SDK.git",
reference: "fe42e409bcdc431614f1cfc80cfc4191b926f3ed"
},
license: ["Apache-2.0"],
description: "The Official PHP SDK for QuickBooks Online Accounting API",
properties: [
{
name: "SrcFile",
value: "./test/data/composer.lock"
}
]
});
deps = utils.parseComposerLock("./test/data/composer-2.lock");
expect(deps.length).toEqual(73);
expect(deps[0]).toEqual({
group: "amphp",
name: "amp",
scope: "required",
version: "2.4.4",
repository: {
type: "git",
url: "https://github.com/amphp/amp.git",
reference: "1e58d53e4af390efc7813e36cd215bd82cba4b06"
},
license: ["MIT"],
description: "A non-blocking concurrency framework for PHP applications.",
properties: [
{
name: "SrcFile",
value: "./test/data/composer-2.lock"
}
]
});
deps = utils.parseComposerLock("./test/data/composer-3.lock");
expect(deps.length).toEqual(62);
expect(deps[0]).toEqual({
group: "amphp",
name: "amp",
version: "2.6.2",
repository: {
type: "git",
url: "https://github.com/amphp/amp.git",
reference: "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb"
},
license: ["MIT"],
description: "A non-blocking concurrency framework for PHP applications.",
scope: "required",
properties: [{ name: "SrcFile", value: "./test/data/composer-3.lock" }]
});
});
test("parseGemfileLockData", async () => {
let deps = await utils.parseGemfileLockData(
fs.readFileSync("./test/data/Gemfile.lock", { encoding: "utf-8" })
);
expect(deps.length).toEqual(140);
expect(deps[0]).toEqual({
name: "actioncable",
version: "6.0.0"
});
});
test("parseGemspecData", async () => {
let deps = await utils.parseGemspecData(
fs.readFileSync("./test/data/xmlrpc.gemspec", { encoding: "utf-8" })
);
expect(deps.length).toEqual(1);
expect(deps[0]).toEqual({
name: "xmlrpc",
version: "0.3.0",
description:
"XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP."
});
});
test("parse requirements.txt", async () => {
let deps = await utils.parseReqFile(
fs.readFileSync("./test/data/requirements.comments.txt", {
encoding: "utf-8"
}),
false
);
expec