11package com .jfrog .ide .common .configuration ;
22
3+ import com .jfrog .ide .common .nodes .FileIssueNode ;
4+ import com .jfrog .ide .common .nodes .FileTreeNode ;
5+ import com .jfrog .ide .common .nodes .subentities .Severity ;
6+ import com .jfrog .ide .common .nodes .subentities .SourceCodeScanType ;
7+ import com .jfrog .ide .common .parse .SarifParser ;
38import org .apache .commons .lang3 .SystemUtils ;
49import org .jfrog .build .api .util .NullLog ;
510import org .jfrog .build .extractor .executor .CommandResults ;
11+ import org .slf4j .Logger ;
12+ import org .slf4j .LoggerFactory ;
613import org .testng .annotations .AfterMethod ;
714import org .testng .annotations .BeforeMethod ;
815import org .testng .annotations .Test ;
1926import java .text .SimpleDateFormat ;
2027import java .util .*;
2128
22- import static java .util .Collections .singletonList ;
2329import static org .testng .Assert .*;
2430
2531/**
@@ -40,6 +46,8 @@ public class JfrogCliDriverTest {
4046 private final String XRAY_URL = SERVER_URL + "xray/" ;
4147 private String testServerId ;
4248 private File tempDir ;
49+ private final SarifParser parser = new SarifParser (new NullLog ());
50+ private final Logger logger = LoggerFactory .getLogger (JfrogCliDriverTest .class );
4351
4452 @ SuppressWarnings ("unused" )
4553 @ Test ()
@@ -82,6 +90,8 @@ private void configJfrogCli(Boolean skipDownload) {
8290 fail (e .getMessage (), e );
8391 }
8492 testEnv .put ("JFROG_CLI_HOME_DIR" , tempDir .getAbsolutePath ());
93+ testEnv .put ("JFROG_CLI_LOG_LEVEL" , "DEBUG" );
94+ testEnv .put ("CI" , "true" );
8595 jfrogCliDriver = new JfrogCliDriver (testEnv , tempDir .getAbsolutePath () + File .separator , new NullLog ());
8696 }
8797
@@ -152,7 +162,6 @@ public void testAddCliServerConfig_withUsernameAndPassword() {
152162 CommandResults response = jfrogCliDriver .addCliServerConfig (XRAY_URL , ARTIFACTORY_URL , testServerId , USER_NAME , PASSWORD , null , tempDir , testEnv );
153163 JfrogCliServerConfig serverConfig = jfrogCliDriver .getServerConfig (tempDir , Collections .emptyList (), testEnv );
154164 assertTrue (response .isOk ());
155- assertTrue (response .getErr ().isBlank ());
156165 assertNotNull (serverConfig );
157166 assertEquals (serverConfig .getUsername (), USER_NAME );
158167 assertEquals (serverConfig .getPassword (), PASSWORD );
@@ -169,7 +178,6 @@ public void testAddCliServerConfig_withAccessToken() {
169178 CommandResults response = jfrogCliDriver .addCliServerConfig (XRAY_URL , ARTIFACTORY_URL , testServerId , null , null , ACCESS_TOKEN , tempDir , testEnv );
170179 JfrogCliServerConfig serverConfig = jfrogCliDriver .getServerConfig (tempDir , Collections .emptyList (), testEnv );
171180 assertTrue (response .isOk ());
172- assertTrue (response .getErr ().isBlank ());
173181 assertNotNull (serverConfig );
174182 assertEquals (serverConfig .getAccessToken (), ACCESS_TOKEN );
175183 assertEquals (serverConfig .getArtifactoryUrl (), ARTIFACTORY_URL );
@@ -195,13 +203,23 @@ public void testAddServerConfig_withBadCredentials() {
195203
196204 @ Test
197205 public void testRunAudit_NpmProject () {
198- String projectToCheck = "npm" ;
199206 try {
200207 Path exampleProjectsFolder = Path .of ("src/test/resources/example-projects/npm" );
201208 CommandResults response = jfrogCliDriver .runCliAudit (exampleProjectsFolder .toFile (),
202- singletonList (projectToCheck ), testServerId , null , testEnv );
203- //TODO: check real values after the sarif parser is added
209+ null , testServerId , testEnv );
204210 assertEquals (response .getExitValue (),0 );
211+ logger .info ("Audit debug logs: \n " + response .getErr ());
212+ logger .info ("Audit response: \n " + response .getRes ());
213+ List <FileTreeNode > findings = parser .parse (response .getRes ());
214+ assertNotNull (findings );
215+ assertFalse (findings .isEmpty (), "Expected findings in SARIF output for npm project" );
216+ // Verify the findings
217+ assertEquals (findings .size (), 1 , "Expected exactly one file with findings" );
218+ FileTreeNode node = findings .get (0 );
219+ assertEquals (node .getChildren ().size (), 1 , "Expected exactly one vulnerabilities" );
220+ FileIssueNode issue = (FileIssueNode ) node .getChildren ().get (0 );
221+ assertEquals (issue .getSeverity (), Severity .High , "Expected severity to be HIGH" );
222+ assertEquals (issue .getReporterType (), SourceCodeScanType .SCA , "Expected reporter type to be SCA" );
205223 } catch (Exception e ) {
206224 fail (e .getMessage (), e );
207225 }
@@ -213,9 +231,20 @@ public void testRunAudit_MultiMavenProject() {
213231 try {
214232 Path exampleProjectsFolder = Path .of ("src/test/resources/example-projects/maven-example" );
215233 CommandResults response = jfrogCliDriver .runCliAudit (exampleProjectsFolder .toFile (),
216- projectsToCheck , testServerId , null , testEnv );
217- //TODO: check real values after the sarif parser is added
234+ projectsToCheck , testServerId , testEnv );
218235 assertEquals (response .getExitValue (), 0 );
236+ logger .info ("Audit debug logs: \n " + response .getErr ());
237+ logger .info ("Audit response: \n " + response .getRes ());
238+ List <FileTreeNode > findings = parser .parse (response .getRes ());
239+ assertNotNull (findings );
240+ assertFalse (findings .isEmpty (), "Expected findings in SARIF output for multi-maven project" );
241+ // Verify the findings
242+ assertEquals (findings .size (), 1 , "Expected exactly one file with findings" );
243+ FileTreeNode node = findings .get (0 );
244+ assertEquals (node .getChildren ().size (), 3 , "Expected exactly three vulnerabilities" );
245+ assertEquals (node .getSeverity (), Severity .High , "Expected severity to be HIGH" );
246+ FileIssueNode issue = (FileIssueNode ) node .getChildren ().get (0 );
247+ assertEquals (issue .getReporterType (), SourceCodeScanType .SCA , "Expected reporter type to be SCA" );
219248 } catch (Exception e ) {
220249 fail (e .getMessage (), e );
221250 }
@@ -225,6 +254,35 @@ private String createServerId() {
225254 return "ide-plugins-common-test-server-" + timeStampFormat .format (System .currentTimeMillis ());
226255 }
227256
257+ @ Test
258+ public void testRunAudit_WithExcludedPattern () {
259+ try {
260+ Path exampleProjectsFolder = Path .of ("src/test/resources/example-projects/maven-example" );
261+ AuditConfig config = new AuditConfig .Builder ()
262+ .serverId (testServerId )
263+ .excludedPattern (new ArrayList <>(List .of ("*multi3*" )))
264+ .serverId (testServerId )
265+ .envVars (testEnv )
266+ .build ();
267+ CommandResults response = jfrogCliDriver .runCliAudit (exampleProjectsFolder .toFile (), config );
268+ assertEquals (response .getExitValue (), 0 );
269+ logger .info ("Audit debug logs: \n " + response .getErr ());
270+ logger .info ("Audit response: \n " + response .getRes ());
271+ List <FileTreeNode > findings = parser .parse (response .getRes ());
272+ assertNotNull (findings );
273+ assertFalse (findings .isEmpty (), "Expected findings in SARIF output for multi-maven project" );
274+ // Verify the findings
275+ assertEquals (findings .size (), 1 , "Expected exactly one file with findings" );
276+ FileTreeNode node = findings .get (0 );
277+ assertEquals (node .getChildren ().size (), 3 , "Expected exactly three vulnerabilities" );
278+ assertEquals (node .getSeverity (), Severity .High , "Expected severity to be HIGH" );
279+ FileIssueNode issue = (FileIssueNode ) node .getChildren ().get (0 );
280+ assertEquals (issue .getReporterType (), SourceCodeScanType .SCA , "Expected reporter type to be SCA" );
281+ } catch (Exception e ) {
282+ fail (e .getMessage (), e );
283+ }
284+ }
285+
228286 @ AfterMethod
229287 public void cleanUp (Method method ) {
230288 try {
@@ -236,4 +294,4 @@ public void cleanUp(Method method) {
236294 fail (e .getMessage (), e );
237295 }
238296 }
239- }
297+ }
0 commit comments