chore: add tests for dl #34

Merged
xpamych merged 4 commits from Maks1mS/ALR:chore/add-tests into master 2025-01-31 16:33:16 +00:00
2 changed files with 88 additions and 51 deletions
Showing only changes of commit 1fcb88976c - Show all commits

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