Files
VoCat/internal/update/asset_test.go
T

54 lines
1.5 KiB
Go

package update
import (
"bytes"
"context"
"io"
"log/slog"
"net/http"
"net/http/httptest"
"reflect"
"testing"
)
func TestAssetNamesFor(t *testing.T) {
tests := []struct {
goos string
goarch string
want []string
}{
{"linux", "amd64", []string{"vocat-linux-amd64"}},
{"linux", "386", []string{"vocat-linux-386"}},
{"linux", "arm64", []string{"vocat-linux-arm64", "vocat-linux-aarch64"}},
{"linux", "arm", []string{"vocat-linux-armv7", "vocat-linux-arm"}},
}
for _, item := range tests {
if got := assetNamesFor(item.goos, item.goarch); !reflect.DeepEqual(got, item.want) {
t.Errorf("assetNamesFor(%q, %q) = %#v, want %#v", item.goos, item.goarch, got, item.want)
}
}
}
func TestDownloadAssetWithProgressVerifiesPublishedSize(t *testing.T) {
payload := bytes.Repeat([]byte("vocat"), 4096)
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
_, _ = w.Write(payload)
}))
defer server.Close()
logger := slog.New(slog.NewTextHandler(io.Discard, nil))
var destination bytes.Buffer
asset := &Asset{Name: "vocat-test", BrowserDownloadURL: server.URL, Size: int64(len(payload))}
if err := downloadAssetWithProgress(context.Background(), logger, asset, "", &destination); err != nil {
t.Fatal(err)
}
if !bytes.Equal(destination.Bytes(), payload) {
t.Fatal("downloaded asset content differs")
}
asset.Size++
if err := downloadAssetWithProgress(context.Background(), logger, asset, "", io.Discard); err == nil {
t.Fatal("download with a mismatched published size succeeded")
}
}