61 lines
2.5 KiB
Go
61 lines
2.5 KiB
Go
package apigen
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestConfigurableBuiltinRoutesConsumer(t *testing.T) {
|
|
dir := filepath.Join(t.TempDir(), "endpoints")
|
|
api := filepath.Join(t.TempDir(), "service.api")
|
|
writeFile(t, api, "service healthApi {\n @handler customReady\n get /health/ready\n @handler customDoc\n get /openapi.json\n}\n")
|
|
_, err := Generate(Options{Dir: dir, API: api, Module: "example.com/endpoints", FrameworkDir: frameworkRoot(t)})
|
|
if err != nil {
|
|
t.Fatal("built-in paths must be permitted in API contracts", err)
|
|
}
|
|
writeFile(t, filepath.Join(dir, "endpoints_test.go"), `package main
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"strings"
|
|
"example.com/endpoints/internal/config"
|
|
"example.com/endpoints/internal/svc"
|
|
"example.com/endpoints/internal/handler"
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
)
|
|
func TestProjectOwnsDisabledBuiltinPaths(t *testing.T){
|
|
cfg:=config.Default();cfg.Server.Log.Writer=io.Discard
|
|
logger,_:=logx.New(cfg.Server.Log);defer logger.Close()
|
|
deps,err:=svc.New(context.Background(),logger,cfg);if err!=nil{t.Fatal(err)};defer deps.Close()
|
|
if _,err=handler.NewApp(deps);err==nil || !strings.Contains(err.Error(),"overlaps business"){t.Fatal("expected preflight collision",err)}
|
|
deps.Config.Server.Endpoints.Readiness.Enabled=false
|
|
deps.Config.Server.Endpoints.OpenAPI.Enabled=false
|
|
app,err:=handler.NewApp(deps);if err!=nil{t.Fatal(err)};defer app.Close()
|
|
for _,path:=range []string{"/health/ready","/openapi.json"}{
|
|
out:=httptest.NewRecorder();app.ServeHTTP(out,httptest.NewRequest("GET",path,nil))
|
|
if out.Code!=501{t.Fatal("expected generated business Logic stub",path,out.Code,out.Body.String())}
|
|
}
|
|
deps.Config.Server.Endpoints.Readiness.Enabled=true
|
|
deps.Config.Server.Endpoints.Readiness.Path="/readyz"
|
|
deps.Config.Server.Endpoints.OpenAPI.Enabled=true
|
|
deps.Config.Server.Endpoints.OpenAPI.Path="/spec.json"
|
|
app2,err:=handler.NewApp(deps);if err!=nil{t.Fatal(err)};defer app2.Close()
|
|
for _,path:=range []string{"/readyz","/spec.json"}{out:=httptest.NewRecorder();app2.ServeHTTP(out,httptest.NewRequest("GET",path,nil));if out.Code!=200{t.Fatal(path,out.Code)}}
|
|
}
|
|
`)
|
|
ctx, cancel := context.WithTimeout(context.Background(), 90*time.Second)
|
|
defer cancel()
|
|
cmd := exec.CommandContext(ctx, "go", "test", "-race", "-mod=mod", "-count=1", "./...")
|
|
cmd.Dir = dir
|
|
cmd.Env = append(os.Environ(), "GOWORK=off")
|
|
if output, err := cmd.CombinedOutput(); err != nil {
|
|
t.Fatal(err, string(output))
|
|
}
|
|
}
|