From 7546c2a1a4dde4f6270e928e67b3d7823be1ec5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Fri, 20 Sep 2024 20:56:22 +0200 Subject: [PATCH] Fix test pipeline --- .gitea/workflows/build_and_deploy.yml | 4 +- .../layout/app_bar_filter_dialog.dart | 6 +++ scnserver/models/time.go | 2 +- scnserver/test/main_test.go | 1 + scnserver/test/message_test.go | 3 +- scnserver/test/subscription_test.go | 4 +- scnserver/test/util/init.go | 12 +++++- scnserver/test/util/log.go | 25 +++++++----- scnserver/test/util/requests.go | 39 ++++++++++--------- scnserver/test/util/webserver.go | 17 ++++---- 10 files changed, 68 insertions(+), 45 deletions(-) diff --git a/.gitea/workflows/build_and_deploy.yml b/.gitea/workflows/build_and_deploy.yml index d9f6451..7b0788e 100644 --- a/.gitea/workflows/build_and_deploy.yml +++ b/.gitea/workflows/build_and_deploy.yml @@ -41,14 +41,14 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version-file: '${{ gitea.workspace }}/go.mod' + go-version-file: '${{ gitea.workspace }}/scnserver/go.mod' cache: false - name: Print Go Version run: go version - name: Run tests - run: cd "${{ gitea.workspace }}/scnserver" && make dgi && make swagger && make test + run: cd "${{ gitea.workspace }}/scnserver" && make dgi && make swagger && SCN_TEST_LOGLEVEL=WARN make test - name: Send failure mail if: failure() diff --git a/flutter/lib/components/layout/app_bar_filter_dialog.dart b/flutter/lib/components/layout/app_bar_filter_dialog.dart index a2f8ee5..2b7489e 100644 --- a/flutter/lib/components/layout/app_bar_filter_dialog.dart +++ b/flutter/lib/components/layout/app_bar_filter_dialog.dart @@ -65,6 +65,8 @@ class _AppBarFilterDialogState extends State { _buildFilterItem(context, FontAwesomeIcons.bolt, 'Priority', _showPriorityModal), Divider(), _buildFilterItem(context, FontAwesomeIcons.gearCode, 'Key', _showKeytokenModal), + Divider(), + _buildFilterItem(context, FontAwesomeIcons.magnifyingGlassPlus, 'Search (Plain)', _showPlainSearchModal), SizedBox(height: 4), ], ), @@ -113,4 +115,8 @@ class _AppBarFilterDialogState extends State { void _showTimeModal(BuildContext context) { showDialog(context: context, builder: (BuildContext context) => FilterModalTime()); } + + void _showPlainSearchModal(BuildContext context) { + //TODO showDialog(context: context, builder: (BuildContext context) => FilterModalSearchPlain()); + } } diff --git a/scnserver/models/time.go b/scnserver/models/time.go index 3d956b8..8d9e4a3 100644 --- a/scnserver/models/time.go +++ b/scnserver/models/time.go @@ -35,7 +35,7 @@ func (t *SCNTime) UnmarshalJSON(data []byte) error { } func (t SCNTime) MarshalJSON() ([]byte, error) { - str := t.Time().Format(time.RFC3339Nano) + str := t.Time().In(time.UTC).Format(time.RFC3339Nano) return json.Marshal(str) } diff --git a/scnserver/test/main_test.go b/scnserver/test/main_test.go index 864b9fc..1fc6fd5 100644 --- a/scnserver/test/main_test.go +++ b/scnserver/test/main_test.go @@ -11,5 +11,6 @@ func TestMain(m *testing.M) { if !exerr.Initialized() { exerr.Init(exerr.ErrorPackageConfigInit{ZeroLogErrTraces: langext.PFalse, ZeroLogAllTraces: langext.PFalse}) } + os.Exit(m.Run()) } diff --git a/scnserver/test/message_test.go b/scnserver/test/message_test.go index 807bb24..ad53df9 100644 --- a/scnserver/test/message_test.go +++ b/scnserver/test/message_test.go @@ -7,7 +7,6 @@ import ( "fmt" "github.com/gin-gonic/gin" "gogs.mikescher.com/BlackForestBytes/goext/langext" - "gogs.mikescher.com/BlackForestBytes/goext/timeext" "net/url" "testing" "time" @@ -551,7 +550,7 @@ func TestGetMessageFull(t *testing.T) { tt.AssertEqual(t, "msg.msg_id", "580b5055-a9b5-4cee-b53c-28cf304d25b0", msgIn["usr_message_id"]) tt.AssertStrRepEqual(t, "msg.priority", 0, msgIn["priority"]) tt.AssertEqual(t, "msg.sender_name", "unit-test-[TestGetMessageFull]", msgIn["sender_name"]) - tt.AssertEqual(t, "msg.timestamp", time.Unix(ts, 0).In(timeext.TimezoneBerlin).Format(time.RFC3339Nano), msgIn["timestamp"]) + tt.AssertEqual(t, "msg.timestamp", time.Unix(ts, 0).In(time.UTC).Format(time.RFC3339Nano), msgIn["timestamp"]) } func TestListMessages(t *testing.T) { diff --git a/scnserver/test/subscription_test.go b/scnserver/test/subscription_test.go index ae424bd..41f5d68 100644 --- a/scnserver/test/subscription_test.go +++ b/scnserver/test/subscription_test.go @@ -599,8 +599,8 @@ func TestGetSubscriptionToForeignChannel(t *testing.T) { assertCount2 := func(u tt.Userdat, c int, dir string, conf string, ext string) { slist := tt.RequestAuthGet[sublist](t, u.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s&external=%s", u.UID, dir, conf, ext)) - fmt.Printf("assertCount2 := %d\n", len(slist.Subscriptions)) - //tt.AssertEqual(t, dir+"."+conf+"."+ext+".len", c, len(slist.Subscriptions)) + //fmt.Printf("assertCount2 := %d\n", len(slist.Subscriptions)) + tt.AssertEqual(t, dir+"."+conf+"."+ext+".len", c, len(slist.Subscriptions)) } clist := tt.RequestAuthGet[chanlist](t, data.User[16].AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels", data.User[16].UID)) diff --git a/scnserver/test/util/init.go b/scnserver/test/util/init.go index 7721168..40128e0 100644 --- a/scnserver/test/util/init.go +++ b/scnserver/test/util/init.go @@ -12,7 +12,17 @@ func InitTests() { log.Logger = createLogger(createConsoleWriter()) gin.SetMode(gin.TestMode) - zerolog.SetGlobalLevel(zerolog.DebugLevel) + + if llstr, ok := os.LookupEnv("SCN_TEST_LOGLEVEL"); ok { + ll, err := zerolog.ParseLevel(llstr) + if err != nil { + panic(err) + } + zerolog.SetGlobalLevel(ll) + } else { + zerolog.SetGlobalLevel(zerolog.DebugLevel) + } + } func createConsoleWriter() *zerolog.ConsoleWriter { diff --git a/scnserver/test/util/log.go b/scnserver/test/util/log.go index b757d43..cfec327 100644 --- a/scnserver/test/util/log.go +++ b/scnserver/test/util/log.go @@ -3,6 +3,7 @@ package util import ( "fmt" "github.com/gin-gonic/gin" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) @@ -27,18 +28,22 @@ func ClearBufLogger(dump bool) { } } -func TPrintf(format string, a ...any) { - if buflogger != nil { - buflogger.Printf(format, a...) - } else { - fmt.Printf(format, a...) +func TPrintf(lvl zerolog.Level, format string, a ...any) { + if zerolog.GlobalLevel() <= lvl { + if buflogger != nil { + buflogger.Printf(format, a...) + } else { + fmt.Printf(format, a...) + } } } -func TPrintln(a ...any) { - if buflogger != nil { - buflogger.Println(a...) - } else { - fmt.Println(a...) +func TPrintln(lvl zerolog.Level, a ...any) { + if zerolog.GlobalLevel() <= lvl { + if buflogger != nil { + buflogger.Println(a...) + } else { + fmt.Println(a...) + } } } diff --git a/scnserver/test/util/requests.go b/scnserver/test/util/requests.go index a74f228..5613c4c 100644 --- a/scnserver/test/util/requests.go +++ b/scnserver/test/util/requests.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" + "github.com/rs/zerolog" "gogs.mikescher.com/BlackForestBytes/goext/langext" "io" "mime/multipart" @@ -101,7 +102,7 @@ func RequestAuthDeleteShouldFail(t *testing.T, akey string, baseURL string, urlS func RequestAny[TResult any](t *testing.T, akey string, method string, baseURL string, urlSuffix string, body any, deserialize bool) TResult { client := http.Client{} - TPrintf("[-> REQUEST] (%s) %s%s [%s] [%s]\n", method, baseURL, urlSuffix, langext.Conditional(akey == "", "NO AUTH", "AUTH"), langext.Conditional(body == nil, "NO BODY", "BODY")) + TPrintf(zerolog.InfoLevel, "[-> REQUEST] (%s) %s%s [%s] [%s]\n", method, baseURL, urlSuffix, langext.Conditional(akey == "", "NO AUTH", "AUTH"), langext.Conditional(body == nil, "NO BODY", "BODY")) bytesbody := make([]byte, 0) contentType := "" @@ -159,16 +160,16 @@ func RequestAny[TResult any](t *testing.T, akey string, method string, baseURL s TestFailErr(t, err) } - TPrintln("") - TPrintf("---------------- RESPONSE (%d) ----------------\n", resp.StatusCode) + TPrintln(zerolog.DebugLevel, "") + TPrintf(zerolog.DebugLevel, "---------------- RESPONSE (%d) ----------------\n", resp.StatusCode) if len(respBodyBin) > 100_000 { - TPrintln("[[RESPONSE TOO LONG]]") + TPrintln(zerolog.DebugLevel, "[[RESPONSE TOO LONG]]") } else { - TPrintln(langext.TryPrettyPrintJson(string(respBodyBin))) + TPrintln(zerolog.DebugLevel, langext.TryPrettyPrintJson(string(respBodyBin))) } - TryPrintTraceObj("---------------- -------- ----------------", respBodyBin, "") - TPrintln("---------------- -------- ----------------") - TPrintln("") + TryPrintTraceObj(zerolog.DebugLevel, "---------------- -------- ----------------", respBodyBin, "") + TPrintln(zerolog.DebugLevel, "---------------- -------- ----------------") + TPrintln(zerolog.DebugLevel, "") if resp.StatusCode != 200 { TestFailFmt(t, "Statuscode != 200 (actual = %d)", resp.StatusCode) @@ -195,7 +196,7 @@ func RequestAny[TResult any](t *testing.T, akey string, method string, baseURL s func RequestAuthAnyShouldFail(t *testing.T, akey string, method string, baseURL string, urlSuffix string, body any, expectedStatusCode int, errcode apierr.APIError) { client := http.Client{} - TPrintf("[-> REQUEST] (%s) %s%s [%s] (should-fail with %d/%d)\n", method, baseURL, urlSuffix, langext.Conditional(akey == "", "NO AUTH", "AUTH"), expectedStatusCode, errcode) + TPrintf(zerolog.InfoLevel, "[-> REQUEST] (%s) %s%s [%s] (should-fail with %d/%d)\n", method, baseURL, urlSuffix, langext.Conditional(akey == "", "NO AUTH", "AUTH"), expectedStatusCode, errcode) bytesbody := make([]byte, 0) contentType := "" @@ -250,14 +251,14 @@ func RequestAuthAnyShouldFail(t *testing.T, akey string, method string, baseURL TestFailErr(t, err) } - TPrintln("") - TPrintf("---------------- RESPONSE (%d) ----------------\n", resp.StatusCode) - TPrintln(langext.TryPrettyPrintJson(string(respBodyBin))) + TPrintln(zerolog.DebugLevel, "") + TPrintf(zerolog.DebugLevel, "---------------- RESPONSE (%d) ----------------\n", resp.StatusCode) + TPrintln(zerolog.DebugLevel, langext.TryPrettyPrintJson(string(respBodyBin))) if (expectedStatusCode != 0 && resp.StatusCode != expectedStatusCode) || (expectedStatusCode == 0 && resp.StatusCode == 200) { - TryPrintTraceObj("---------------- -------- ----------------", respBodyBin, "") + TryPrintTraceObj(zerolog.DebugLevel, "---------------- -------- ----------------", respBodyBin, "") } - TPrintln("---------------- -------- ----------------") - TPrintln("") + TPrintln(zerolog.DebugLevel, "---------------- -------- ----------------") + TPrintln(zerolog.DebugLevel, "") if expectedStatusCode != 0 && resp.StatusCode != expectedStatusCode { TestFailFmt(t, "Statuscode != %d (expected failure, but got %d)", expectedStatusCode, resp.StatusCode) @@ -290,19 +291,19 @@ func RequestAuthAnyShouldFail(t *testing.T, akey string, method string, baseURL } } -func TryPrintTraceObj(prefix string, body []byte, suffix string) { +func TryPrintTraceObj(lvl zerolog.Level, prefix string, body []byte, suffix string) { v1 := gin.H{} if err := json.Unmarshal(body, &v1); err == nil { if v2, ok := v1["traceObj"]; ok { if v3, ok := v2.(string); ok { if prefix != "" { - TPrintln(prefix) + TPrintln(lvl, prefix) } - TPrintln(strings.TrimSpace(v3)) + TPrintln(lvl, strings.TrimSpace(v3)) if suffix != "" { - TPrintln(suffix) + TPrintln(lvl, suffix) } } } diff --git a/scnserver/test/util/webserver.go b/scnserver/test/util/webserver.go index 4a9ede0..f1868b9 100644 --- a/scnserver/test/util/webserver.go +++ b/scnserver/test/util/webserver.go @@ -7,6 +7,7 @@ import ( "blackforestbytes.com/simplecloudnotifier/jobs" "blackforestbytes.com/simplecloudnotifier/logic" "blackforestbytes.com/simplecloudnotifier/push" + "github.com/rs/zerolog" "gogs.mikescher.com/BlackForestBytes/goext/ginext" "gogs.mikescher.com/BlackForestBytes/goext/langext" "os" @@ -71,9 +72,9 @@ func StartSimpleWebserver(t *testing.T) (*logic.Application, string, func()) { TestFailErr(t, err) } - TPrintln("DatabaseFile
: " + dbfile1) - TPrintln("DatabaseFile: " + dbfile2) - TPrintln("DatabaseFile: " + dbfile3) + TPrintln(zerolog.InfoLevel, "DatabaseFile
: "+dbfile1) + TPrintln(zerolog.InfoLevel, "DatabaseFile: "+dbfile2) + TPrintln(zerolog.InfoLevel, "DatabaseFile: "+dbfile3) scn.Conf = CreateTestConfig(t, dbfile1, dbfile2, dbfile3) @@ -113,10 +114,10 @@ func StartSimpleWebserver(t *testing.T) (*logic.Application, string, func()) { } stop := func() { - t.Logf("Stopping App") + TPrintln(zerolog.InfoLevel, "Stopping App") app.Stop() _ = app.IsRunning.WaitWithTimeout(5*time.Second, false) - t.Logf("Stopped App") + TPrintln(zerolog.InfoLevel, "Stopped App") _ = os.Remove(dbfile1) _ = os.Remove(dbfile2) _ = os.Remove(dbfile3) @@ -186,9 +187,9 @@ func StartSimpleTestspace(t *testing.T) (string, string, string, scn.Config, fun TestFailErr(t, err) } - TPrintln("DatabaseFile
: " + dbfile1) - TPrintln("DatabaseFile: " + dbfile2) - TPrintln("DatabaseFile: " + dbfile3) + TPrintln(zerolog.InfoLevel, "DatabaseFile
: "+dbfile1) + TPrintln(zerolog.InfoLevel, "DatabaseFile: "+dbfile2) + TPrintln(zerolog.InfoLevel, "DatabaseFile: "+dbfile3) scn.Conf = CreateTestConfig(t, dbfile1, dbfile2, dbfile3)