Fix test pipeline
All checks were successful
Build Docker and Deploy / Build Docker Container (push) Successful in 1m17s
Build Docker and Deploy / Run Unit-Tests (push) Successful in 2m38s
Build Docker and Deploy / Deploy to Server (push) Successful in 9s

This commit is contained in:
Mike Schwörer 2024-09-20 20:56:22 +02:00
parent d21d775764
commit 7546c2a1a4
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
10 changed files with 68 additions and 45 deletions

View File

@ -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()

View File

@ -65,6 +65,8 @@ class _AppBarFilterDialogState extends State<AppBarFilterDialog> {
_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<AppBarFilterDialog> {
void _showTimeModal(BuildContext context) {
showDialog<void>(context: context, builder: (BuildContext context) => FilterModalTime());
}
void _showPlainSearchModal(BuildContext context) {
//TODO showDialog<void>(context: context, builder: (BuildContext context) => FilterModalSearchPlain());
}
}

View File

@ -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)
}

View File

@ -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())
}

View File

@ -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) {

View File

@ -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))

View File

@ -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 {

View File

@ -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...)
}
}
}

View File

@ -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)
}
}
}

View File

@ -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<main>: " + dbfile1)
TPrintln("DatabaseFile<requests>: " + dbfile2)
TPrintln("DatabaseFile<logs>: " + dbfile3)
TPrintln(zerolog.InfoLevel, "DatabaseFile<main>: "+dbfile1)
TPrintln(zerolog.InfoLevel, "DatabaseFile<requests>: "+dbfile2)
TPrintln(zerolog.InfoLevel, "DatabaseFile<logs>: "+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<main>: " + dbfile1)
TPrintln("DatabaseFile<requests>: " + dbfile2)
TPrintln("DatabaseFile<logs>: " + dbfile3)
TPrintln(zerolog.InfoLevel, "DatabaseFile<main>: "+dbfile1)
TPrintln(zerolog.InfoLevel, "DatabaseFile<requests>: "+dbfile2)
TPrintln(zerolog.InfoLevel, "DatabaseFile<logs>: "+dbfile3)
scn.Conf = CreateTestConfig(t, dbfile1, dbfile2, dbfile3)