From a961655d2cdd0c388729c49fc7a53d7abb8bcaf6 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 10 Jun 2022 19:26:06 +0200 Subject: [PATCH] start server for integration tests in code --- .woodpecker.yml | 10 ----- integration/get_test.go | 69 +++++++++++++++++++++++++++++ integration/main_test.go | 96 ++++++++++++++-------------------------- 3 files changed, 102 insertions(+), 73 deletions(-) create mode 100644 integration/get_test.go diff --git a/.woodpecker.yml b/.woodpecker.yml index 72157fc..e240f6a 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -30,14 +30,4 @@ pipeline: image: golang:1.18 detach: true commands: - - go run . --verbose & - - pid=$! - - sleep 10s - go test -tags integration codeberg.org/codeberg/pages/integration/... - - kill $pid - environment: - - ACME_API=https://acme.mock.directory - - ACME_ACCEPT_TERMS=true - - PAGES_DOMAIN=localhost.mock.directory - - RAW_DOMAIN=raw.localhost.mock.directory - - PORT=4430 diff --git a/integration/get_test.go b/integration/get_test.go new file mode 100644 index 0000000..b17caf4 --- /dev/null +++ b/integration/get_test.go @@ -0,0 +1,69 @@ +//go:build integration +// +build integration + +package integration + +import ( + "bytes" + "crypto/tls" + "io" + "log" + "net/http" + "net/http/cookiejar" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetRedirect(t *testing.T) { + log.Println("== TestGetRedirect ==") + // test custom domain redirect + resp, err := getTestHTTPSClient().Get("https://calciumdibromid.localhost.mock.directory:4430") + assert.NoError(t, err) + if !assert.EqualValues(t, http.StatusTemporaryRedirect, resp.StatusCode) { + t.FailNow() + } + assert.EqualValues(t, "https://www.cabr2.de/", resp.Header["Location"][0]) + assert.EqualValues(t, 0, getSize(resp.Body)) +} + +func TestGetContent(t *testing.T) { + log.Println("== TestGetContent ==") + // test get image + resp, err := getTestHTTPSClient().Get("https://magiclike.localhost.mock.directory:4430/images/827679288a.jpg") + assert.NoError(t, err) + if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) { + t.FailNow() + } + assert.EqualValues(t, "image/jpeg", resp.Header["Content-Type"][0]) + assert.EqualValues(t, "124635", resp.Header["Content-Length"][0]) + assert.EqualValues(t, 124635, getSize(resp.Body)) + + // specify branch + resp, err = getTestHTTPSClient().Get("https://momar.localhost.mock.directory:4430/pag/@master/") + assert.NoError(t, err) + if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) { + t.FailNow() + } + assert.EqualValues(t, "text/html; charset=utf-8", resp.Header["Content-Type"][0]) + assert.True(t, getSize(resp.Body) > 1000) +} + +func getTestHTTPSClient() *http.Client { + cookieJar, _ := cookiejar.New(nil) + return &http.Client{ + Jar: cookieJar, + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { + return http.ErrUseLastResponse + }, + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + } +} + +func getSize(stream io.Reader) int { + buf := new(bytes.Buffer) + buf.ReadFrom(stream) + return buf.Len() +} diff --git a/integration/main_test.go b/integration/main_test.go index e0ec8f2..0ad4712 100644 --- a/integration/main_test.go +++ b/integration/main_test.go @@ -1,78 +1,48 @@ -//go:build integration -// +build integration - package integration import ( - "bytes" - "crypto/tls" - "io" - "net/http" - "net/http/cookiejar" + "context" + "log" "testing" + "time" - "github.com/stretchr/testify/assert" + "codeberg.org/codeberg/pages/cmd" + "github.com/urfave/cli/v2" ) -func TestMain(t *testing.T) { - // if enableRunGitea() { - // p, err := runGitea() - // if err != nil { - // log.Fatal(err) - // return - // } - // defer func() { - // p.Kill() - // }() - // } - // log.Printf("testing with %v, %v, %v\n", getGiteaURL(), getGiteaUsername(), getGiteaPassword()) - // exitCode := m.Run() - // os.Exit(exitCode) - - // test custom domain redirect - resp, err := getTestHTTPSClient().Get("https://calciumdibromid.localhost.mock.directory:4430") - assert.NoError(t, err) - if !assert.EqualValues(t, http.StatusTemporaryRedirect, resp.StatusCode) { - t.FailNow() +func TestMain(m *testing.M) { + log.Println("=== TestMain: START Server ==") + serverCtx, serverCancel := context.WithCancel(context.Background()) + if err := startServer(serverCtx); err != nil { + log.Fatalf("could not start server: %v", err) } - assert.EqualValues(t, "https://www.cabr2.de/", resp.Header["Location"][0]) - assert.EqualValues(t, 0, getSize(resp.Body)) + defer func() { + serverCancel() + log.Println("=== TestMain: Server STOPED ==") + }() - // test get image - resp, err = getTestHTTPSClient().Get("https://magiclike.localhost.mock.directory:4430/images/827679288a.jpg") - assert.NoError(t, err) - if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) { - t.FailNow() - } - assert.EqualValues(t, "image/jpeg", resp.Header["Content-Type"][0]) - assert.EqualValues(t, "124635", resp.Header["Content-Length"][0]) - assert.EqualValues(t, 124635, getSize(resp.Body)) + time.Sleep(30 * time.Second) + + m.Run() - // specify branch - resp, err = getTestHTTPSClient().Get("https://momar.localhost.mock.directory:4430/pag/@master/") - assert.NoError(t, err) - if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) { - t.FailNow() - } - assert.EqualValues(t, "text/html; charset=utf-8", resp.Header["Content-Type"][0]) - assert.True(t, getSize(resp.Body) > 1000) } -func getTestHTTPSClient() *http.Client { - cookieJar, _ := cookiejar.New(nil) - return &http.Client{ - Jar: cookieJar, - CheckRedirect: func(_ *http.Request, _ []*http.Request) error { - return http.ErrUseLastResponse - }, - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - }, +func startServer(ctx context.Context) error { + args := []string{ + "--verbose", + "--acme-accept-terms", "true", + "--acme-api-endpoint", "https://acme.mock.directory", + "--pages-domain", "localhost.mock.directory", + "--raw-domain", "raw.localhost.mock.directory", + "--port", "4430", } -} -func getSize(stream io.Reader) int { - buf := new(bytes.Buffer) - buf.ReadFrom(stream) - return buf.Len() + app := cli.NewApp() + app.Name = "pages-server" + app.Action = cmd.Serve + app.Flags = cmd.ServeFlags + + go app.RunContext(ctx, args) + + return nil }