mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
* initial Db helper split - make SQL and datastore packages optional * abstracting log store * break out DB, MQ and log drivers as extensions * cleanup * fewer deps * fixing docker test * hmm dbness * updating db startup * Consolidate all your extensions into one convenient package * cleanup * clean up dep constraints
90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package tests
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/fnproject/fn/api/server"
|
|
_ "github.com/fnproject/fn/api/server/defaultexts"
|
|
)
|
|
|
|
func stopServer(done chan struct{}, stop func()) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
|
defer cancel()
|
|
|
|
stop()
|
|
|
|
select {
|
|
case <-done:
|
|
case <-ctx.Done():
|
|
log.Panic("Server Cleanup failed, timeout")
|
|
}
|
|
}
|
|
|
|
func startServer() (chan struct{}, func()) {
|
|
|
|
log.Print("Starting server")
|
|
|
|
ctx, srvCancel := context.WithCancel(context.Background())
|
|
srvDone := make(chan struct{})
|
|
|
|
timeString := time.Now().Format("2006_01_02_15_04_05")
|
|
dbURL := os.Getenv(server.EnvDBURL)
|
|
tmpDir := os.TempDir()
|
|
tmpMq := fmt.Sprintf("%s/fn_integration_test_%s_worker_mq.db", tmpDir, timeString)
|
|
tmpDb := fmt.Sprintf("%s/fn_integration_test_%s_fn.db", tmpDir, timeString)
|
|
mqURL := fmt.Sprintf("bolt://%s", tmpMq)
|
|
if dbURL == "" {
|
|
dbURL = fmt.Sprintf("sqlite3://%s", tmpDb)
|
|
}
|
|
|
|
srv := server.New(ctx,
|
|
server.WithLogLevel(getEnv(server.EnvLogLevel, server.DefaultLogLevel)),
|
|
server.WithDBURL(dbURL),
|
|
server.WithMQURL(mqURL),
|
|
server.WithFullAgent(),
|
|
)
|
|
|
|
go func() {
|
|
srv.Start(ctx)
|
|
log.Print("Stopped server")
|
|
os.Remove(tmpMq)
|
|
os.Remove(tmpDb)
|
|
close(srvDone)
|
|
}()
|
|
|
|
startCtx, startCancel := context.WithDeadline(ctx, time.Now().Add(time.Duration(10)*time.Second))
|
|
defer startCancel()
|
|
for {
|
|
err := checkServer(startCtx)
|
|
if err == nil {
|
|
break
|
|
}
|
|
select {
|
|
case <-time.After(time.Second * 1):
|
|
case <-ctx.Done():
|
|
}
|
|
if ctx.Err() != nil {
|
|
log.Panic("Server check failed, timeout")
|
|
}
|
|
}
|
|
|
|
return srvDone, srvCancel
|
|
}
|
|
|
|
func TestMain(m *testing.M) {
|
|
done, cancel := startServer()
|
|
// call flag.Parse() here if TestMain uses flags
|
|
result := m.Run()
|
|
stopServer(done, cancel)
|
|
|
|
if result == 0 {
|
|
fmt.Fprintln(os.Stdout, "😀 👍 🎗")
|
|
}
|
|
os.Exit(result)
|
|
}
|