mirror of
https://github.com/MengMengCode/VoCat.git
synced 2026-08-19 14:23:42 +08:00
54 lines
1.5 KiB
Go
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")
|
|
}
|
|
}
|