88import org .owasp .dependencycheck .dependency .Dependency ;
99import org .owasp .dependencycheck .dependency .naming .Identifier ;
1010import org .owasp .dependencycheck .dependency .naming .PurlIdentifier ;
11+ import org .owasp .dependencycheck .exception .InitializationException ;
1112import org .owasp .dependencycheck .utils .Settings ;
13+ import org .owasp .dependencycheck .utils .Settings .KEYS ;
14+
1215import org .sonatype .goodies .packageurl .PackageUrl ;
1316import org .sonatype .ossindex .service .api .componentreport .ComponentReport ;
1417import org .sonatype .ossindex .service .client .OssindexClient ;
1518import org .sonatype .ossindex .service .client .transport .Transport ;
1619
1720import java .net .SocketTimeoutException ;
21+ import java .net .URI ;
1822import java .util .Collections ;
23+ import java .util .HashMap ;
1924import java .util .List ;
2025import java .util .Map ;
2126import java .util .concurrent .ExecutionException ;
2530
2631import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
2732import static org .junit .jupiter .api .Assertions .assertEquals ;
33+ import static org .junit .jupiter .api .Assertions .assertThrows ;
2834import static org .junit .jupiter .api .Assertions .assertTrue ;
2935
3036class OssIndexAnalyzerTest extends BaseTest {
@@ -42,10 +48,12 @@ void should_enrich_be_included_in_mutex_to_prevent_NPE()
4248 Dependency dependency = new Dependency ();
4349 dependency .addSoftwareIdentifier (identifier );
4450 Settings settings = getSettings ();
51+ setCredentials (settings );
4552 Engine engine = new Engine (settings );
4653 engine .setDependencies (Collections .singletonList (dependency ));
4754
4855 analyzer .initialize (settings );
56+ analyzer .prepareAnalyzer (engine );
4957
5058 String expectedOutput = "https://ossindex.sonatype.org/component/pkg:maven/test/test@1.0" ;
5159
@@ -75,6 +83,11 @@ void should_enrich_be_included_in_mutex_to_prevent_NPE()
7583 */
7684 static final class SproutOssIndexAnalyzer extends OssIndexAnalyzer {
7785 private Future <?> pendingClosureTask ;
86+ @ Override
87+ OssindexClient newOssIndexClient () {
88+ return new OssIndexClientOk ();
89+ }
90+
7891 @ Override
7992 void enrich (Dependency dependency ) {
8093 ExecutorService executor = Executors .newSingleThreadExecutor ();
@@ -93,19 +106,46 @@ void awaitPendingClosure() throws ExecutionException, InterruptedException {
93106 }
94107 }
95108
109+ private static final class OssIndexClientOk implements OssindexClient {
110+
111+ @ Override
112+ public Map <PackageUrl , ComponentReport > requestComponentReports (List <PackageUrl > coordinates ) throws Exception {
113+ HashMap <PackageUrl , ComponentReport > reports = new HashMap <>();
114+ ComponentReport report = new ComponentReport ();
115+ PackageUrl packageUrl = coordinates .get (0 );
116+ report .setCoordinates (packageUrl );
117+ report .setReference (new URI ("https://ossindex.sonatype.org/component/pkg:maven/test/test@1.0?utm_source=dependency-check&utm_medium=integration&utm_content=12.1.4-SNAPSHOT" ));
118+ reports .put (packageUrl , report );
119+ return reports ;
120+ }
121+
122+ @ Override
123+ public ComponentReport requestComponentReport (PackageUrl coordinates ) throws Exception {
124+ return new ComponentReport ();
125+ }
126+
127+ @ Override
128+ public void close () {
129+
130+ }
131+ }
132+
96133 @ Test
97134 void should_analyzeDependency_return_a_dedicated_error_message_when_403_response_from_sonatype () throws Exception {
98135 // Given
99136 OssIndexAnalyzer analyzer = new OssIndexAnalyzerThrowing403 ();
100- analyzer .initialize (getSettings ());
137+ Settings settings = getSettings ();
138+ setCredentials (settings );
139+ Engine engine = new Engine (settings );
140+
141+ analyzer .initialize (settings );
142+ analyzer .prepareAnalyzer (engine );
101143
102144 Identifier identifier = new PurlIdentifier ("maven" , "test" , "test" , "1.0" ,
103145 Confidence .HIGHEST );
104146
105147 Dependency dependency = new Dependency ();
106148 dependency .addSoftwareIdentifier (identifier );
107- Settings settings = getSettings ();
108- Engine engine = new Engine (settings );
109149 engine .setDependencies (Collections .singletonList (dependency ));
110150
111151 // When
@@ -126,17 +166,19 @@ void should_analyzeDependency_return_a_dedicated_error_message_when_403_response
126166 void should_analyzeDependency_only_warn_when_transport_error_from_sonatype () throws Exception {
127167 // Given
128168 OssIndexAnalyzer analyzer = new OssIndexAnalyzerThrowing502 ();
169+ Settings settings = getSettings ();
170+ setCredentials (settings );
171+ settings .setBoolean (Settings .KEYS .ANALYZER_OSSINDEX_WARN_ONLY_ON_REMOTE_ERRORS , true );
172+ Engine engine = new Engine (settings );
129173
130- getSettings (). setBoolean ( Settings . KEYS . ANALYZER_OSSINDEX_WARN_ONLY_ON_REMOTE_ERRORS , true );
131- analyzer .initialize ( getSettings () );
174+ analyzer . initialize ( settings );
175+ analyzer .prepareAnalyzer ( engine );
132176
133177 Identifier identifier = new PurlIdentifier ("maven" , "test" , "test" , "1.0" ,
134178 Confidence .HIGHEST );
135179
136180 Dependency dependency = new Dependency ();
137181 dependency .addSoftwareIdentifier (identifier );
138- Settings settings = getSettings ();
139- Engine engine = new Engine (settings );
140182
141183 // When
142184 try (engine ) {
@@ -148,22 +190,23 @@ void should_analyzeDependency_only_warn_when_transport_error_from_sonatype() thr
148190 }
149191 }
150192
151-
152193 @ Test
153194 void should_analyzeDependency_only_warn_when_socket_error_from_sonatype () throws Exception {
154195 // Given
155196 OssIndexAnalyzer analyzer = new OssIndexAnalyzerThrowingSocketTimeout ();
197+ Settings settings = getSettings ();
198+ setCredentials (settings );
199+ settings .setBoolean (Settings .KEYS .ANALYZER_OSSINDEX_WARN_ONLY_ON_REMOTE_ERRORS , true );
200+ analyzer .initialize (settings );
156201
157- getSettings (). setBoolean ( Settings . KEYS . ANALYZER_OSSINDEX_WARN_ONLY_ON_REMOTE_ERRORS , true );
158- analyzer .initialize ( getSettings () );
202+ Engine engine = new Engine ( settings );
203+ analyzer .prepareAnalyzer ( engine );
159204
160205 Identifier identifier = new PurlIdentifier ("maven" , "test" , "test" , "1.0" ,
161206 Confidence .HIGHEST );
162207
163208 Dependency dependency = new Dependency ();
164209 dependency .addSoftwareIdentifier (identifier );
165- Settings settings = getSettings ();
166- Engine engine = new Engine (settings );
167210
168211 // When
169212 try (engine ) {
@@ -180,17 +223,19 @@ void should_analyzeDependency_only_warn_when_socket_error_from_sonatype() throws
180223 void should_analyzeDependency_fail_when_socket_error_from_sonatype () throws Exception {
181224 // Given
182225 OssIndexAnalyzer analyzer = new OssIndexAnalyzerThrowingSocketTimeout ();
226+ Settings settings = getSettings ();
227+ setCredentials (settings );
228+ settings .setBoolean (Settings .KEYS .ANALYZER_OSSINDEX_WARN_ONLY_ON_REMOTE_ERRORS , false );
229+ Engine engine = new Engine (settings );
183230
184- getSettings (). setBoolean ( Settings . KEYS . ANALYZER_OSSINDEX_WARN_ONLY_ON_REMOTE_ERRORS , false );
185- analyzer .initialize ( getSettings () );
231+ analyzer . initialize ( settings );
232+ analyzer .prepareAnalyzer ( engine );
186233
187234 Identifier identifier = new PurlIdentifier ("maven" , "test" , "test" , "1.0" ,
188235 Confidence .HIGHEST );
189236
190237 Dependency dependency = new Dependency ();
191238 dependency .addSoftwareIdentifier (identifier );
192- Settings settings = getSettings ();
193- Engine engine = new Engine (settings );
194239 engine .setDependencies (Collections .singletonList (dependency ));
195240
196241 // When
@@ -206,7 +251,25 @@ void should_analyzeDependency_fail_when_socket_error_from_sonatype() throws Exce
206251 analyzer .close ();
207252 }
208253
254+ @ Test
255+ void should_prepareAnalyzer_fail_when_credentials_not_set () throws Exception {
256+ OssIndexAnalyzer analyzer = new OssIndexAnalyzer ();
257+ Settings settings = getSettings ();
258+ Engine engine = new Engine (settings );
259+ analyzer .initialize (settings );
260+ try {
261+ analyzer .prepareAnalyzer (engine );
262+ assertThrows (InitializationException .class , () -> analyzer .prepareAnalyzer (engine ));
263+ } catch (InitializationException e ) {
264+ analyzer .close ();
265+ engine .close ();
266+ }
267+ }
209268
269+ private static void setCredentials (final Settings settings ) {
270+ settings .setString (KEYS .ANALYZER_OSSINDEX_USER , "user" );
271+ settings .setString (KEYS .ANALYZER_OSSINDEX_PASSWORD , "pass" );
272+ }
210273
211274 static final class OssIndexAnalyzerThrowing403 extends OssIndexAnalyzer {
212275 @ Override
0 commit comments