mirror of
https://github.com/gomods/athens
synced 2026-02-03 07:30:32 +00:00
Upgrades the AWS SDK to v2. AWS S3 bucket urls will now error if they are not prefixed with a schema (example: https://).
155 lines
3.4 KiB
Go
155 lines
3.4 KiB
Go
package mode
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
var testCases = []struct {
|
|
name string
|
|
file *DownloadFile
|
|
input string
|
|
expectedMode Mode
|
|
expectedURL string
|
|
}{
|
|
{
|
|
name: "sync",
|
|
file: &DownloadFile{Mode: Sync},
|
|
input: "github.com/gomods/athens",
|
|
expectedMode: Sync,
|
|
},
|
|
{
|
|
name: "redirect",
|
|
file: &DownloadFile{Mode: Redirect, DownloadURL: "gomods.io"},
|
|
input: "github.com/gomods/athens",
|
|
expectedMode: Redirect,
|
|
expectedURL: "gomods.io",
|
|
},
|
|
{
|
|
name: "redirect with download url suffix",
|
|
file: &DownloadFile{Mode: Redirect, DownloadURL: "internal.domain/repository/gonexus"},
|
|
input: "github.com/gomods/athens",
|
|
expectedMode: Redirect,
|
|
expectedURL: "internal.domain/repository/gonexus",
|
|
},
|
|
{
|
|
name: "pattern match",
|
|
file: &DownloadFile{
|
|
Mode: Sync,
|
|
Paths: []*DownloadPath{
|
|
{Pattern: "github.com/gomods/*", Mode: None},
|
|
},
|
|
},
|
|
input: "github.com/gomods/athens",
|
|
expectedMode: None,
|
|
},
|
|
{
|
|
name: "multiple depth pattern match",
|
|
file: &DownloadFile{
|
|
Mode: Sync,
|
|
Paths: []*DownloadPath{
|
|
{Pattern: "github.com/*", Mode: None},
|
|
},
|
|
},
|
|
input: "github.com/gomods/athens/pkg/mode",
|
|
expectedMode: None,
|
|
},
|
|
{
|
|
name: "subdomain pattern match",
|
|
file: &DownloadFile{
|
|
Mode: Sync,
|
|
Paths: []*DownloadPath{
|
|
{Pattern: "*.github.com/gomods/*", Mode: None},
|
|
},
|
|
},
|
|
input: "athens.github.com/gomods/pkg/mode",
|
|
expectedMode: None,
|
|
},
|
|
{
|
|
name: "pattern fallback",
|
|
file: &DownloadFile{
|
|
Mode: Sync,
|
|
Paths: []*DownloadPath{
|
|
{Pattern: "github.com/gomods/*", Mode: None},
|
|
},
|
|
},
|
|
input: "github.com/athens-artifacts/maturelib",
|
|
expectedMode: Sync,
|
|
},
|
|
{
|
|
name: "pattern redirect",
|
|
file: &DownloadFile{
|
|
Mode: Sync,
|
|
Paths: []*DownloadPath{
|
|
{
|
|
Pattern: "github.com/gomods/*",
|
|
Mode: AsyncRedirect,
|
|
DownloadURL: "gomods.io",
|
|
},
|
|
},
|
|
},
|
|
input: "github.com/gomods/athens",
|
|
expectedMode: AsyncRedirect,
|
|
expectedURL: "gomods.io",
|
|
},
|
|
{
|
|
name: "redirect fallback",
|
|
file: &DownloadFile{
|
|
Mode: Redirect,
|
|
DownloadURL: "proxy.golang.org",
|
|
Paths: []*DownloadPath{
|
|
{
|
|
Pattern: "github.com/gomods/*",
|
|
Mode: AsyncRedirect,
|
|
DownloadURL: "gomods.io",
|
|
},
|
|
},
|
|
},
|
|
input: "github.com/athens-artifacts/maturelib",
|
|
expectedMode: Redirect,
|
|
expectedURL: "proxy.golang.org",
|
|
},
|
|
}
|
|
|
|
func TestMode(t *testing.T) {
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
givenMode := tc.file.Match(tc.input)
|
|
if givenMode != tc.expectedMode {
|
|
t.Fatalf("expected matched mode to be %q but got %q", tc.expectedMode, givenMode)
|
|
}
|
|
givenURL := tc.file.URL(tc.input)
|
|
if givenURL != tc.expectedURL {
|
|
t.Fatalf("expected matched DownloadURL to be %q but got %q", tc.expectedURL, givenURL)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNewFile_err(t *testing.T) {
|
|
tc := []struct {
|
|
name string
|
|
mode Mode
|
|
expected string
|
|
}{
|
|
{
|
|
name: "empty mode",
|
|
mode: "",
|
|
expected: downloadModeErr,
|
|
},
|
|
{
|
|
name: "invalid mode",
|
|
mode: "invalidMode",
|
|
expected: fmt.Sprintf(invalidModeErr, "invalidMode"),
|
|
},
|
|
}
|
|
for _, c := range tc {
|
|
t.Run(c.name, func(subT *testing.T) {
|
|
_, err := NewFile(c.mode, "github.com/gomods/athens")
|
|
if err.Error() != c.expected {
|
|
t.Fatalf("expected error %s from NewFile, got %s", c.expected, err.Error())
|
|
}
|
|
})
|
|
}
|
|
}
|