tests: add more tests for dl
This commit is contained in:
parent
55feea9b25
commit
1fcb88976c
@ -11,7 +11,7 @@
|
|||||||
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||||
<text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
|
<text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
|
||||||
<text x="33.5" y="14">coverage</text>
|
<text x="33.5" y="14">coverage</text>
|
||||||
<text x="86" y="15" fill="#010101" fill-opacity=".3">18.3%</text>
|
<text x="86" y="15" fill="#010101" fill-opacity=".3">19.2%</text>
|
||||||
<text x="86" y="14">18.3%</text>
|
<text x="86" y="14">19.2%</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B |
@ -18,10 +18,15 @@ package dl_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"net/http/httputil"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -31,48 +36,6 @@ import (
|
|||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDownloadFileWithoutCache(t *testing.T) {
|
|
||||||
type testCase struct {
|
|
||||||
name string
|
|
||||||
expectedErr error
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tc := range []testCase{
|
|
||||||
{
|
|
||||||
name: "simple download",
|
|
||||||
expectedErr: nil,
|
|
||||||
},
|
|
||||||
} {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
switch {
|
|
||||||
case r.URL.Path == "/file":
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
w.Write([]byte("Hello, World!"))
|
|
||||||
default:
|
|
||||||
w.WriteHeader(http.StatusNotFound)
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
defer server.Close()
|
|
||||||
|
|
||||||
tmpdir, err := os.MkdirTemp("", "test-download")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
defer os.RemoveAll(tmpdir)
|
|
||||||
|
|
||||||
opts := dl.Options{
|
|
||||||
CacheDisabled: true,
|
|
||||||
URL: server.URL + "/file",
|
|
||||||
Destination: tmpdir,
|
|
||||||
}
|
|
||||||
|
|
||||||
err = dl.Download(context.Background(), opts)
|
|
||||||
assert.ErrorIs(t, err, tc.expectedErr)
|
|
||||||
_, err = os.Stat(path.Join(tmpdir, "file"))
|
|
||||||
assert.NoError(t, err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type TestALRConfig struct{}
|
type TestALRConfig struct{}
|
||||||
|
|
||||||
func (c *TestALRConfig) GetPaths(ctx context.Context) *config.Paths {
|
func (c *TestALRConfig) GetPaths(ctx context.Context) *config.Paths {
|
||||||
@ -81,21 +44,95 @@ func (c *TestALRConfig) GetPaths(ctx context.Context) *config.Paths {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDownloadWithoutCache(t *testing.T) {
|
||||||
|
type testCase struct {
|
||||||
|
name string
|
||||||
|
path string
|
||||||
|
expected func(*testing.T, error, string)
|
||||||
|
}
|
||||||
|
|
||||||
|
prepareServer := func() *httptest.Server {
|
||||||
|
// URL вашего Git-сервера
|
||||||
|
gitServerURL, err := url.Parse("https://gitea.plemya-x.ru")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to parse git server URL: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy := httputil.NewSingleHostReverseProxy(gitServerURL)
|
||||||
|
|
||||||
|
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
switch {
|
||||||
|
case r.URL.Path == "/file-downloader/file":
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
w.Write([]byte("Hello, World!"))
|
||||||
|
case strings.HasPrefix(r.URL.Path, "/git-downloader/git"):
|
||||||
|
r.URL.Host = gitServerURL.Host
|
||||||
|
r.URL.Scheme = gitServerURL.Scheme
|
||||||
|
r.Host = gitServerURL.Host
|
||||||
|
r.URL.Path, _ = strings.CutPrefix(r.URL.Path, "/git-downloader/git")
|
||||||
|
|
||||||
|
proxy.ServeHTTP(w, r)
|
||||||
|
default:
|
||||||
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range []testCase{
|
||||||
|
{
|
||||||
|
name: "simple file download",
|
||||||
|
path: "%s/file-downloader/file",
|
||||||
|
expected: func(t *testing.T, err error, tmpdir string) {
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = os.Stat(path.Join(tmpdir, "file"))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "git download",
|
||||||
|
path: "git+%s/git-downloader/git/Plemya-x/xpamych-alr-repo",
|
||||||
|
expected: func(t *testing.T, err error, tmpdir string) {
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = os.Stat(path.Join(tmpdir, "alr-repo.toml"))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
server := prepareServer()
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
tmpdir, err := os.MkdirTemp("", "test-download")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
|
opts := dl.Options{
|
||||||
|
CacheDisabled: true,
|
||||||
|
URL: fmt.Sprintf(tc.path, server.URL),
|
||||||
|
Destination: tmpdir,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dl.Download(context.Background(), opts)
|
||||||
|
|
||||||
|
tc.expected(t, err, tmpdir)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDownloadFileWithCache(t *testing.T) {
|
func TestDownloadFileWithCache(t *testing.T) {
|
||||||
type testCase struct {
|
type testCase struct {
|
||||||
name string
|
name string
|
||||||
expectedErr error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range []testCase{
|
for _, tc := range []testCase{
|
||||||
{
|
{
|
||||||
name: "simple download",
|
name: "simple download",
|
||||||
expectedErr: nil,
|
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
called := 0
|
called := 0
|
||||||
|
|
||||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
switch {
|
switch {
|
||||||
case r.URL.Path == "/file":
|
case r.URL.Path == "/file":
|
||||||
@ -124,7 +161,7 @@ func TestDownloadFileWithCache(t *testing.T) {
|
|||||||
outputFile := path.Join(tmpdir, "file")
|
outputFile := path.Join(tmpdir, "file")
|
||||||
|
|
||||||
err = dl.Download(context.Background(), opts)
|
err = dl.Download(context.Background(), opts)
|
||||||
assert.ErrorIs(t, err, tc.expectedErr)
|
assert.NoError(t, err)
|
||||||
_, err = os.Stat(outputFile)
|
_, err = os.Stat(outputFile)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user