CI: move grabpl e2e tests from grabpl to grafana (#53075)

* move grabpl e2e tests
This commit is contained in:
Kevin Minehart
2022-09-02 11:02:10 -04:00
committed by GitHub
parent 8be3ea269d
commit a76ce1f567
6 changed files with 165 additions and 26 deletions
+49
View File
@@ -0,0 +1,49 @@
package main
import (
"fmt"
"log"
"os"
"os/exec"
"github.com/grafana/grafana/pkg/build/e2eutil"
"github.com/urfave/cli/v2"
)
func EndToEndTests(c *cli.Context) error {
var (
tries = c.Int("tries")
suite = c.String("suite")
host = c.String("host")
)
log.Printf("Running Grafana e2e tests")
port := c.Int("port")
env := append(os.Environ(), fmt.Sprintf("PORT=%d", port))
grafanaServer := e2eutil.Server(host, port)
// TODO implement grafanaServer.Start()
grafanaServer.Wait()
var err error
for i := 0; i < tries; i++ {
log.Printf("Running e2e test suite attempt #%d", i+1)
//nolint:gosec
cmd := exec.Command("./e2e/run-suite", suite)
cmd.Env = env
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err == nil {
break
}
log.Printf("Running the test suite failed: %s", err)
}
if err != nil {
return cli.Exit(fmt.Sprintf("e2e tests failed: %s", err), 1)
}
return nil
}
+5
View File
@@ -20,6 +20,11 @@ var (
Name: "variants",
Usage: "Comma-separated list of variants to build",
}
triesFlag = cli.IntFlag{
Name: "tries",
Usage: "Specify number of tries before failing",
Value: 1,
}
noInstallDepsFlag = cli.BoolFlag{
Name: "no-install-deps",
Usage: "Don't install dependencies",
+22
View File
@@ -25,6 +25,28 @@ func main() {
&buildIDFlag,
},
},
{
Name: "e2e-tests",
Usage: "Run Grafana e2e tests",
Action: EndToEndTests,
Flags: []cli.Flag{
&triesFlag,
&cli.IntFlag{
Name: "port",
Value: 3001,
Usage: "Specify the server port",
},
&cli.StringFlag{
Name: "suite",
Usage: "Specify the end-to-end tests suite to be used",
},
&cli.StringFlag{
Name: "host",
Value: "grafana-server",
Usage: "Specify the server host",
},
},
},
{
Name: "build-frontend",
Usage: "Build front-end artifacts",
+63
View File
@@ -0,0 +1,63 @@
package e2eutil
import (
"fmt"
"io"
"log"
"net/http"
"os"
"time"
)
const timeout = 60
type GrafanaServer struct {
Port int
Host string
}
func Server(host string, port int) *GrafanaServer {
return &GrafanaServer{
Host: host,
Port: port,
}
}
func (g *GrafanaServer) Wait() {
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
timeoutExceeded := time.After(timeout * time.Second)
for {
select {
case <-timeoutExceeded:
log.Printf("grafana server failed to start after %d second(s) timeout", timeout)
os.Exit(1)
case <-ticker.C:
url := fmt.Sprintf("http://%s:%d", g.Host, g.Port)
//nolint:gosec
resp, err := http.Get(url)
if err == nil {
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Printf("failed to read response body: %q", err)
return
}
log.Println("connected to grafana-server!")
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
log.Printf("status code: %d, body: %s, exiting...", resp.StatusCode, string(body))
os.Exit(1)
}
err = resp.Body.Close()
if err != nil {
log.Printf("error closing response body, body: %s", string(body))
return
}
return
}
log.Printf("failed attempt to connect to grafana-server on url %s, retrying...", url)
}
}
}