debian-forge-composer/internal/remotefile/client_test.go
Gianluca Zuccarelli b7e7bafb2e internal/remotefile: create a remote file resolver
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.
2023-03-16 09:55:39 +00:00

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)
}
}
}