@@ -251,6 +251,13 @@ func TestScanDirectThreaded(t *testing.T) {
251251 file : "./tests/fingers.wfp" ,
252252 want : http .StatusOK ,
253253 },
254+ {
255+ name : "Scanning - HPSM success" ,
256+ binary : "../../test-support/scanoss.sh" ,
257+ fieldName : "file" ,
258+ file : "./tests/fingers-hpsm.wfp" ,
259+ want : http .StatusOK ,
260+ },
254261 }
255262 for _ , test := range tests {
256263 t .Run (test .name , func (t * testing.T ) {
@@ -295,3 +302,96 @@ func TestScanDirectThreaded(t *testing.T) {
295302 })
296303 }
297304}
305+
306+ func TestScanDirectSingleHPSM (t * testing.T ) {
307+ err := zlog .NewSugaredDevLogger ()
308+ if err != nil {
309+ t .Fatalf ("an error '%s' was not expected when opening a sugared logger" , err )
310+ }
311+ defer zlog .SyncZap ()
312+ myConfig := setupConfig (t )
313+ myConfig .App .Trace = true
314+ myConfig .Scanning .ScanDebug = true
315+ myConfig .Scanning .HPSMEnabled = false
316+ apiService := NewAPIService (myConfig )
317+
318+ tests := []struct {
319+ name string
320+ fieldName string
321+ file string
322+ binary string
323+ scanType string
324+ assets string
325+ want int
326+ }{
327+ {
328+ name : "Scanning - success 1" ,
329+ binary : "../../test-support/scanoss.sh" ,
330+ fieldName : "file" ,
331+ file : "./tests/fingers.wfp" ,
332+ want : http .StatusOK ,
333+ },
334+ {
335+ name : "Scanning - HPSM fail" ,
336+ binary : "../../test-support/scanoss.sh" ,
337+ fieldName : "filename" ,
338+ file : "./tests/fingers-hpsm.wfp" ,
339+ want : http .StatusForbidden ,
340+ },
341+ }
342+ for _ , test := range tests {
343+ t .Run (test .name , func (t * testing.T ) {
344+ if test .want == http .StatusOK { // flip between Trace for some successful calls
345+ if myConfig .App .Trace {
346+ myConfig .App .Trace = false
347+ } else {
348+ myConfig .App .Trace = true
349+ }
350+ } else {
351+ myConfig .App .Trace = true
352+ }
353+ myConfig .Scanning .ScanBinary = test .binary
354+ filePath := test .file
355+ fieldName := test .fieldName
356+ postBody := new (bytes.Buffer )
357+ mw := multipart .NewWriter (postBody )
358+ file , err := os .Open (filePath )
359+ if err != nil {
360+ t .Fatal (err )
361+ }
362+ writer , err := mw .CreateFormFile (fieldName , filePath )
363+ if err != nil {
364+ t .Fatal (err )
365+ }
366+ if _ , err = io .Copy (writer , file ); err != nil {
367+ t .Fatal (err )
368+ }
369+ if len (test .scanType ) > 0 && len (test .assets ) > 0 {
370+ fmt .Println ("Adding asset options: " , test .scanType , test .assets )
371+ err = mw .WriteField ("type" , test .scanType )
372+ if err != nil {
373+ t .Fatal (err )
374+ }
375+ err = mw .WriteField ("assets" , test .assets )
376+ if err != nil {
377+ t .Fatal (err )
378+ }
379+ }
380+ _ = mw .Close () // close the writer before making the request
381+
382+ req := httptest .NewRequest (http .MethodPost , "http://localhost/api/api/scan/direct" , postBody )
383+ w := httptest .NewRecorder ()
384+ req .Header .Add ("Content-Type" , mw .FormDataContentType ())
385+ apiService .ScanDirect (w , req )
386+ resp := w .Result ()
387+ body , err := io .ReadAll (resp .Body )
388+ if err != nil {
389+ t .Fatalf ("an error was not expected when reading from request: %v" , err )
390+ }
391+ assert .Equal (t , test .want , resp .StatusCode )
392+ fmt .Println ("Status: " , resp .StatusCode )
393+ fmt .Println ("Type: " , resp .Header .Get ("Content-Type" ))
394+ fmt .Println ("Body: " , string (body ))
395+ })
396+ }
397+ }
0 commit comments