Skip to content

Commit 892ddb7

Browse files
committed
fix: make maven tests immutable
Signed-off-by: Ruben Romero Montes <[email protected]>
1 parent 4e4e67b commit 892ddb7

File tree

14 files changed

+40
-58
lines changed

14 files changed

+40
-58
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/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
})
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)