Skip to content

Commit be4e1be

Browse files
authored
fix: make maven and pnpm tests immutable (#186)
* fix: make maven tests immutable Signed-off-by: Ruben Romero Montes <[email protected]> * fix: make pnpm tests immutable Signed-off-by: Ruben Romero Montes <[email protected]> --------- Signed-off-by: Ruben Romero Montes <[email protected]>
1 parent 4e4e67b commit be4e1be

File tree

16 files changed

+50
-106
lines changed

16 files changed

+50
-106
lines changed

src/providers/java_maven.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export default class Java_maven extends Base_java {
101101
throw new Error(`failed creating maven dependency tree`, {cause: error})
102102
}
103103
// read dependency tree from temp file
104-
let content = fs.readFileSync(`${tmpDepTree}`)
104+
let content = fs.readFileSync(tmpDepTree)
105105
if (process.env["EXHORT_DEBUG"] === "true") {
106106
console.error("Dependency tree that will be used as input for creating the BOM =>" + EOL + EOL + content.toString())
107107
}

test/it/test_manifests/pnpm/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"keywords": [],
1111
"license": "ISC",
1212
"dependencies": {
13-
"@hapi/joi": "^17.1.1",
14-
"axios": "^0.19.0"
13+
"axios": "^0.19.0",
14+
"node-json-converter": "0.0.1-security"
1515
}
1616
}

test/it/test_manifests/pnpm/pnpm-lock.yaml

Lines changed: 8 additions & 46 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/providers/java_maven.test.js

Lines changed: 39 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,44 @@ import { expect } from 'chai'
22
import fs from 'fs'
33
import sinon from "sinon";
44
import Java_maven from '../../src/providers/java_maven.js'
5+
import esmock from 'esmock';
6+
import path from 'path';
57

68
let clock
79

8-
/** this function is parsing the outputfile path from the given command, and write that file the providerContent supplied.
9-
*
10-
* @param {Array<string>}args - the arguments to pass to the binary
11-
* @param {string}providerContent - the content of the mocked data to replace original content in intercepted temp file
12-
* @param {string}outputFileParameter - name of the parameter indicating the output file of the command invocation, including '='.
13-
* @private
14-
*/
15-
function interceptAndOverwriteDataWithMock(args, providerContent, outputFileParameter) {
16-
const interceptedFilePath = args.find(arg => arg.includes(outputFileParameter)).split("=")[1]
17-
fs.writeFileSync(interceptedFilePath, providerContent)
10+
async function mockProvider(cwd) {
11+
12+
const mockInvokeCommand = () => {
13+
return '';
14+
};
15+
16+
const mockGitRootDir = (cwd) => {
17+
return cwd;
18+
}
19+
20+
const mockFs = {
21+
mkdtempSync: (pathName) => pathName,
22+
readFileSync: (filePath) => {
23+
const output = path.join(cwd, path.basename(filePath));
24+
return fs.readFileSync(output);
25+
},
26+
rmSync: () => {}
27+
}
28+
29+
return esmock('../../src/providers/java_maven.js', {
30+
fs: mockFs,
31+
'../../src/providers/base_java.js': await esmock('../../src/providers/base_java.js', {
32+
'../../src/tools.js': {
33+
invokeCommand: mockInvokeCommand,
34+
getGitRootDir: mockGitRootDir
35+
}
36+
})
37+
});
38+
}
39+
40+
async function createMockProvider(testPath) {
41+
const Java_maven = await mockProvider(testPath);
42+
return new Java_maven();
1843
}
1944

2045
suite('testing the java-maven data provider', () => {
@@ -42,42 +67,16 @@ suite('testing the java-maven data provider', () => {
4267
"pom_deps_with_no_ignore_common_paths"
4368
].forEach(testCase => {
4469
let scenario = testCase.replace('pom_deps_', '').replaceAll('_', ' ')
45-
// test(`custom adhoc test`, async () => {
46-
//
47-
// // let options = {
48-
// // 'EXHORT_SNYK_TOKEN': 'insert-token'
49-
// // }
50-
// // let httpStatus = await exhort.validateToken(options);
51-
// analysisReport = await exhort.stackAnalysis(`/tmp/pom-xml/pom.xml`,false);
52-
// console.log(analysisReport)
53-
// let pom = fs.readFileSync(`/tmp/pom-xml/pom.xml`,).toString().trim()
54-
// let analysisReport = await exhort.componentAnalysis("pom.xml", pom);
55-
// console.log(analysisReport)
56-
// analysisReport = await exhort.stackAnalysis(`/tmp/pom-xml/pom.xml`,true);
57-
// console.log(analysisReport)
58-
//
59-
// }).timeout(process.env.GITHUB_ACTIONS ? 30000 : 5000)
6070

6171
test(`verify maven data provided for stack analysis with scenario ${scenario}`, async () => {
6272
// load the expected graph for the scenario
6373
let expectedSbom = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/stack_analysis_expected_sbom.json`,).toString().trim()
64-
let dependencyTreeTextContent = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/dep-tree.txt`,).toString()
74+
// let dependencyTreeTextContent = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/dep-tree.txt`,).toString()
6575
expectedSbom = JSON.stringify(JSON.parse(expectedSbom),null, 4)
66-
let mockedExecFunction = function(bin, args){
67-
if (args.find(arg => arg.includes(":tree"))) {
68-
interceptAndOverwriteDataWithMock(args, dependencyTreeTextContent, "DoutputFile=")
69-
}
70-
}
71-
let javaMvnProvider = new Java_maven()
72-
Object.getPrototypeOf(Object.getPrototypeOf(javaMvnProvider))._invokeCommand = mockedExecFunction
76+
let javaMvnProvider = await createMockProvider(`test/providers/tst_manifests/maven/${testCase}`);
7377
// invoke sut stack analysis for scenario manifest
7478
let providedDataForStack = javaMvnProvider.provideStack(`test/providers/tst_manifests/maven/${testCase}/pom.xml`)
7579
// verify returned data matches expectation
76-
// expect(providedDataForStack).to.deep.equal({
77-
// ecosystem: 'maven',
78-
// contentType: 'application/vnd.cyclonedx+json',
79-
// content: expectedSbom
80-
// })
8180
let beautifiedOutput = JSON.stringify(JSON.parse(providedDataForStack.content),null, 4);
8281
expect(beautifiedOutput).to.deep.equal(expectedSbom)
8382

@@ -89,14 +88,7 @@ suite('testing the java-maven data provider', () => {
8988
let expectedSbom = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/component_analysis_expected_sbom.json`,).toString().trim()
9089
// read target manifest file
9190
expectedSbom = JSON.stringify(JSON.parse(expectedSbom))
92-
let effectivePomContent = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/effective-pom.xml`,).toString()
93-
let mockedExecFunction = function(bin, args){
94-
if (args.find(arg => arg.includes(":effective-pom"))){
95-
interceptAndOverwriteDataWithMock(args, effectivePomContent, "Doutput=");
96-
}
97-
}
98-
let javaMvnProvider = new Java_maven()
99-
Object.getPrototypeOf(Object.getPrototypeOf(javaMvnProvider))._invokeCommand = mockedExecFunction
91+
let javaMvnProvider = await createMockProvider(`test/providers/tst_manifests/maven/${testCase}`);
10092
// invoke sut component analysis for scenario manifest
10193
let providedDataForStack = javaMvnProvider.provideComponent(`test/providers/tst_manifests/maven/${testCase}/pom.xml`)
10294
// verify returned data matches expectation
@@ -124,14 +116,7 @@ suite('testing the java-maven data provider with modules', () => {
124116
let expectedSbom = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/component_analysis_expected_sbom.json`,).toString().trim()
125117
// read target manifest file
126118
expectedSbom = JSON.stringify(JSON.parse(expectedSbom))
127-
let effectivePomContent = fs.readFileSync(`test/providers/tst_manifests/maven/${testCase}/effectivePom.xml`,).toString()
128-
let mockedExecFunction = function(command, args){
129-
if (args.find(arg => arg.includes(":effective-pom"))){
130-
interceptAndOverwriteDataWithMock(args, effectivePomContent, "Doutput=");
131-
}
132-
}
133-
let javaMvnProvider = new Java_maven()
134-
Object.getPrototypeOf(Object.getPrototypeOf(javaMvnProvider))._invokeCommand = mockedExecFunction
119+
let javaMvnProvider = await createMockProvider(`test/providers/tst_manifests/maven/${testCase}`);
135120
// invoke sut component analysis for scenario manifest
136121
let provideDataForComponent = javaMvnProvider.provideComponent(`test/providers/tst_manifests/maven/${testCase}/pom.xml`, {})
137122
// verify returned data matches expectation
@@ -140,12 +125,9 @@ suite('testing the java-maven data provider with modules', () => {
140125
contentType: 'application/vnd.cyclonedx+json',
141126
content: expectedSbom
142127
})
143-
// expect(beautifiedOutput).to.deep.equal(expectedSbom)
144-
145128
// these test cases takes ~2500-2700 ms each pr >10000 in CI (for the first test-case)
146129
}).timeout(process.env.GITHUB_ACTIONS ? 40000 : 10000)
147130

148-
149131
// these test cases takes ~1400-2000 ms each pr >10000 in CI (for the first test-case)
150132

151133
})

0 commit comments

Comments
 (0)