清理代码 & 支持 ignore
This commit is contained in:
@@ -19,7 +19,7 @@ type ProviderDummy struct {
|
||||
}
|
||||
|
||||
func NewDummy() (*ProviderDummy, error) {
|
||||
temp, err := os.MkdirTemp("", "dummy")
|
||||
temp, err := os.MkdirTemp("", "dummy-*")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"go.uber.org/zap"
|
||||
"gopkg.d7z.net/gitea-pages/pkg"
|
||||
)
|
||||
@@ -20,7 +21,9 @@ type TestServer struct {
|
||||
type SvcOpts func(options *pkg.ServerOptions)
|
||||
|
||||
func NewDefaultTestServer() *TestServer {
|
||||
return NewTestServer("example.com")
|
||||
return NewTestServer("example.com", func(options *pkg.ServerOptions) {
|
||||
options.MetaTTL = 0
|
||||
})
|
||||
}
|
||||
|
||||
func NewTestServer(domain string, opts ...SvcOpts) *TestServer {
|
||||
@@ -47,13 +50,13 @@ func NewTestServer(domain string, opts ...SvcOpts) *TestServer {
|
||||
}
|
||||
}
|
||||
|
||||
func (t *TestServer) AddFile(path, data string) {
|
||||
func (t *TestServer) AddFile(path, data string, args ...interface{}) {
|
||||
join := filepath.Join(t.dummy.BaseDir, path)
|
||||
err := os.MkdirAll(filepath.Dir(join), 0o755)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = os.WriteFile(join, []byte(data), 0o644)
|
||||
err = os.WriteFile(join, []byte(fmt.Sprintf(data, args...)), 0o644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@@ -67,7 +70,7 @@ func (t *TestServer) OpenFile(url string) ([]byte, *http.Response, error) {
|
||||
defer response.Body.Close()
|
||||
}
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return nil, response, fmt.Errorf(response.Status)
|
||||
return nil, response, errors.New(response.Status)
|
||||
}
|
||||
all, _ := io.ReadAll(response.Body)
|
||||
return all, response, nil
|
||||
|
||||
46
tests/core/vhserver.go
Normal file
46
tests/core/vhserver.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type VServer struct {
|
||||
URL string
|
||||
mux *http.ServeMux
|
||||
listener net.Listener
|
||||
}
|
||||
|
||||
func NewServer() *VServer {
|
||||
listener, err := net.Listen("tcp", ":0") // ":0" 表示让系统自动选择一个可用的端口
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
port := listener.Addr().(*net.TCPAddr).Port
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
zap.L().Debug("ServeHTTP", zap.String("url", r.URL.String()))
|
||||
})
|
||||
go func() {
|
||||
_ = http.Serve(listener, mux)
|
||||
}()
|
||||
|
||||
return &VServer{
|
||||
listener: listener,
|
||||
URL: fmt.Sprintf("http://127.0.0.1:%d", port),
|
||||
mux: mux,
|
||||
}
|
||||
}
|
||||
|
||||
func (v *VServer) Add(path, data string) {
|
||||
v.mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
|
||||
_, _ = w.Write([]byte(data))
|
||||
})
|
||||
}
|
||||
|
||||
func (v *VServer) Close() error {
|
||||
return v.listener.Close()
|
||||
}
|
||||
93
tests/pages_core_test.go
Normal file
93
tests/pages_core_test.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"gopkg.d7z.net/gitea-pages/tests/core"
|
||||
)
|
||||
|
||||
func Test_get_simple_html(t *testing.T) {
|
||||
server := core.NewDefaultTestServer()
|
||||
defer server.Close()
|
||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
|
||||
_, resp, err := server.OpenFile("https://org1.example.com/repo1/404")
|
||||
assert.NotNil(t, resp)
|
||||
assert.Equal(t, resp.StatusCode, 404)
|
||||
}
|
||||
|
||||
func Test_get_alias(t *testing.T) {
|
||||
server := core.NewDefaultTestServer()
|
||||
defer server.Close()
|
||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
alias:
|
||||
- www.example.org
|
||||
`)
|
||||
data, resp, err := server.OpenFile("https://www.example.org")
|
||||
assert.Equal(t, resp.StatusCode, 404)
|
||||
|
||||
data, resp, err = server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.Equal(t, resp.StatusCode, 302)
|
||||
assert.Equal(t, resp.Header.Get("Location"), "https://www.example.org/index.html")
|
||||
data, resp, err = server.OpenFile("https://www.example.org")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
alias:
|
||||
- zzz.example.top
|
||||
`)
|
||||
data, resp, err = server.OpenFile("https://www.example.org")
|
||||
assert.Equal(t, resp.StatusCode, 302)
|
||||
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/index.html")
|
||||
|
||||
data, resp, err = server.OpenFile("https://www.example.org")
|
||||
assert.Equal(t, resp.StatusCode, 404)
|
||||
|
||||
data, resp, err = server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.Equal(t, resp.StatusCode, 302)
|
||||
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/index.html")
|
||||
}
|
||||
|
||||
func Test_get_v_route(t *testing.T) {
|
||||
server := core.NewDefaultTestServer()
|
||||
defer server.Close()
|
||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
v-route: true
|
||||
`)
|
||||
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
|
||||
data, _, err = server.OpenFile("https://org1.example.com/repo1/404")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
}
|
||||
|
||||
func Test_get_v_ignore(t *testing.T) {
|
||||
server := core.NewDefaultTestServer()
|
||||
defer server.Close()
|
||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||
server.AddFile("org1/repo1/gh-pages/bad.html", "hello world")
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
ignore: .pages.yaml
|
||||
`)
|
||||
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
|
||||
data, _, err = server.OpenFile("https://org1.example.com/repo1/bad.html")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
ignore: bad.*
|
||||
`)
|
||||
_, resp, _ := server.OpenFile("https://org1.example.com/repo1/bad.html")
|
||||
assert.Equal(t, 404, resp.StatusCode)
|
||||
}
|
||||
@@ -7,12 +7,23 @@ import (
|
||||
"gopkg.d7z.net/gitea-pages/tests/core"
|
||||
)
|
||||
|
||||
func Test_get_simple_html(t *testing.T) {
|
||||
func Test_proxy(t *testing.T) {
|
||||
server := core.NewDefaultTestServer()
|
||||
hs := core.NewServer()
|
||||
defer server.Close()
|
||||
defer hs.Close()
|
||||
hs.Add("/test/", "hello proxy")
|
||||
|
||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
proxy:
|
||||
/api: %s/test
|
||||
`, hs.URL)
|
||||
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
|
||||
data, _, err = server.OpenFile("https://org1.example.com/repo1/api")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello proxy", string(data))
|
||||
}
|
||||
26
tests/pages_render_test.go
Normal file
26
tests/pages_render_test.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"gopkg.d7z.net/gitea-pages/tests/core"
|
||||
)
|
||||
|
||||
func Test_get_render(t *testing.T) {
|
||||
server := core.NewDefaultTestServer()
|
||||
defer server.Close()
|
||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||
server.AddFile("org1/repo1/gh-pages/tmpl/index.html", "hello world,{{ .Request.Host }}")
|
||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||
templates:
|
||||
gotemplate: tmpl/*.html
|
||||
`)
|
||||
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world", string(data))
|
||||
|
||||
data, _, err = server.OpenFile("https://org1.example.com/repo1/tmpl/index.html")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "hello world,org1.example.com", string(data))
|
||||
}
|
||||
Reference in New Issue
Block a user