github.com/crowdsecurity/crowdsec@v1.6.1/pkg/cwhub/dataset_test.go (about) 1 package cwhub 2 3 import ( 4 "io" 5 "net/http" 6 "net/http/httptest" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 14 "github.com/crowdsecurity/go-cs-lib/cstest" 15 ) 16 17 func TestDownloadFile(t *testing.T) { 18 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 19 switch r.URL.Path { 20 case "/xx": 21 w.WriteHeader(http.StatusOK) 22 _, _ = io.WriteString(w, "example content oneoneone") 23 default: 24 w.WriteHeader(http.StatusNotFound) 25 _, _ = io.WriteString(w, "not found") 26 } 27 })) 28 defer ts.Close() 29 30 dest := filepath.Join(t.TempDir(), "example.txt") 31 defer os.Remove(dest) 32 33 err := downloadFile(ts.URL+"/xx", dest) 34 require.NoError(t, err) 35 36 content, err := os.ReadFile(dest) 37 assert.Equal(t, "example content oneoneone", string(content)) 38 require.NoError(t, err) 39 40 // bad uri 41 err = downloadFile("https://zz.com", dest) 42 cstest.RequireErrorContains(t, err, "lookup zz.com") 43 cstest.RequireErrorContains(t, err, "no such host") 44 45 // 404 46 err = downloadFile(ts.URL+"/x", dest) 47 cstest.RequireErrorContains(t, err, "bad http code 404") 48 49 // bad target 50 err = downloadFile(ts.URL+"/xx", "") 51 cstest.RequireErrorContains(t, err, cstest.PathNotFoundMessage) 52 53 // destination directory does not exist 54 err = downloadFile(ts.URL+"/xx", filepath.Join(t.TempDir(), "missing/example.txt")) 55 cstest.RequireErrorContains(t, err, cstest.PathNotFoundMessage) 56 }