2021-06-06 19:14:28 +03:00
package arch_test
import (
"io"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2023-09-20 09:23:39 +03:00
"github.com/aquasecurity/vuln-list-update/arch"
2021-06-06 19:14:28 +03:00
)
func TestUpdate ( t * testing . T ) {
tests := [ ] struct {
name string
inputJSONFile string
wantErr string
} {
{
name : "happy path" ,
inputJSONFile : "testdata/archlinux.json" ,
} ,
{
name : "sad path, unreachable Arch Linux service" ,
wantErr : "connection refused" ,
} ,
{
name : "sad path, invalid json" ,
inputJSONFile : "testdata/invalid.json" ,
wantErr : "json unmarshal error" ,
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
ts := httptest . NewServer ( http . HandlerFunc ( func ( w http . ResponseWriter , r * http . Request ) {
b , err := os . ReadFile ( tt . inputJSONFile )
require . NoError ( t , err )
_ , _ = io . WriteString ( w , string ( b ) )
} ) )
defer ts . Close ( )
// Intentionally close to induce network errors
if tt . inputJSONFile == "" {
ts . Close ( )
}
dir := t . TempDir ( )
c := arch . NewArchLinux ( arch . WithURL ( ts . URL ) , arch . WithDir ( filepath . Join ( dir ) ) , arch . WithRetry ( 0 ) )
err := c . Update ( )
if tt . wantErr != "" {
require . Error ( t , err )
assert . Contains ( t , err . Error ( ) , tt . wantErr )
return
}
entries , err := os . ReadDir ( dir )
require . NoError ( t , err )
for _ , e := range entries {
if e . IsDir ( ) {
continue
}
filePath := e . Name ( )
gotJSON , err := os . ReadFile ( filepath . Join ( dir , filePath ) )
require . NoError ( t , err )
wantJSON , err := os . ReadFile ( filepath . Join ( "testdata" , "golden" , filepath . Base ( filePath ) ) )
require . NoError ( t , err )
assert . JSONEq ( t , string ( wantJSON ) , string ( gotJSON ) )
}
} )
}
}