Create a resolver to fetch the contents of a remote file which can be used at build time. The initial usecase for this resolver is to resolve remote gpgkeys but the resolver has been made more generic for general files.
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
package remotefile
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func makeTestServer() *httptest.Server {
|
|
// use a simple mock server to test the client
|
|
// and file content resolver
|
|
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path == "/key1" {
|
|
fmt.Fprintln(w, "key1")
|
|
}
|
|
if r.URL.Path == "/key2" {
|
|
fmt.Fprintln(w, "key2")
|
|
}
|
|
}))
|
|
}
|
|
|
|
func TestClientResolve(t *testing.T) {
|
|
server := makeTestServer()
|
|
|
|
url := server.URL + "/key1"
|
|
|
|
client := NewClient()
|
|
|
|
output, err := client.Resolve(url)
|
|
assert.NoError(t, err)
|
|
|
|
expectedOutput := "key1\n"
|
|
|
|
assert.Equal(t, expectedOutput, string(output))
|
|
}
|
|
|
|
func TestInputSpecValidation(t *testing.T) {
|
|
server := makeTestServer()
|
|
|
|
test := []struct {
|
|
name string
|
|
url string
|
|
want error
|
|
}{
|
|
{
|
|
name: "valid input spec",
|
|
url: server.URL + "/key1",
|
|
want: nil,
|
|
},
|
|
{
|
|
name: "missing url spec",
|
|
url: "",
|
|
want: fmt.Errorf("File resolver: url is required"),
|
|
},
|
|
}
|
|
|
|
client := NewClient()
|
|
|
|
for _, tt := range test {
|
|
url, err := client.validateURL(tt.url)
|
|
if tt.want == nil {
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, tt.url, url.String())
|
|
} else {
|
|
assert.EqualError(t, err, tt.want.Error())
|
|
assert.Nil(t, url)
|
|
}
|
|
}
|
|
|
|
}
|