Files
upstream-corteza/server/pkg/apigw/service_test.go
upstream-mirror 7e385fc126
Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
snapshot of https://github.com/cortezaproject/corteza.git (2024.9.x, 2026-09-18; blobs > 131072B omitted)
2026-09-18 01:22:23 +05:00

250 lines
5.5 KiB
Go

package apigw
import (
"context"
"fmt"
"testing"
"github.com/cortezaproject/corteza/server/pkg/apigw/registry"
"github.com/cortezaproject/corteza/server/pkg/apigw/types"
st "github.com/cortezaproject/corteza/server/system/types"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)
type (
// overriding types.MockHandler with only
// the merge function
mockExistingHandler struct {
*types.MockHandler
merge func(params []byte) (types.Handler, error)
}
)
func Test_serviceLoadRoutes(t *testing.T) {
var (
ctx = context.Background()
req = require.New(t)
)
mockStorer := &types.MockStorer{
R: func(c context.Context, arf st.ApigwRouteFilter) (s st.ApigwRouteSet, f st.ApigwRouteFilter, err error) {
s = st.ApigwRouteSet{
{ID: 1, Endpoint: "/endpoint", Method: "GET", Enabled: true, Group: 0},
{ID: 2, Endpoint: "/endpoint2", Method: "POST", Enabled: true, Group: 0},
}
return
},
}
service := &apigw{
storer: mockStorer,
}
r, err := service.loadRoutes(ctx)
req.NoError(err)
req.Len(r, 2)
}
func Test_serviceLoadFunctions(t *testing.T) {
var (
ctx = context.Background()
req = require.New(t)
)
mockStorer := &types.MockStorer{
F: func(c context.Context, aff st.ApigwFilterFilter) (s st.ApigwFilterSet, f st.ApigwFilterFilter, err error) {
s = st.ApigwFilterSet{
{ID: 1, Route: 1},
{ID: 2, Route: 2},
}
return
},
}
service := &apigw{
storer: mockStorer,
}
r, err := service.loadFilters(ctx, 2)
req.NoError(err)
req.Len(r, 2)
}
func Test_serviceInit(t *testing.T) {
type (
tf struct {
name string
expLen int
st types.MockStorer
reg map[string]types.Handler
}
)
var (
tcc = []tf{
{
name: "could not register 1 function for route",
st: types.MockStorer{
R: func(c context.Context, arf st.ApigwRouteFilter) (s st.ApigwRouteSet, f st.ApigwRouteFilter, err error) {
s = st.ApigwRouteSet{
{ID: 1, Endpoint: "/endpoint", Method: "GET", Enabled: true, Group: 0},
}
return
},
F: func(c context.Context, aff st.ApigwFilterFilter) (s st.ApigwFilterSet, f st.ApigwFilterFilter, err error) {
s = st.ApigwFilterSet{
{ID: 1, Route: 1, Ref: "testExistingFilter"},
{ID: 2, Route: 1, Ref: "testNotExistingFunction"},
}
return
},
},
reg: map[string]types.Handler{"testExistingFilter": &types.MockHandler{}},
expLen: 1,
},
{
name: "successful register of 2 functions for route",
st: types.MockStorer{
R: func(c context.Context, arf st.ApigwRouteFilter) (s st.ApigwRouteSet, f st.ApigwRouteFilter, err error) {
s = st.ApigwRouteSet{
{ID: 1, Endpoint: "/endpoint", Method: "GET", Enabled: true, Group: 0},
}
return
},
F: func(c context.Context, aff st.ApigwFilterFilter) (s st.ApigwFilterSet, f st.ApigwFilterFilter, err error) {
s = st.ApigwFilterSet{
{ID: 1, Route: 1, Ref: "testExistingFilter"},
{ID: 2, Route: 1, Ref: "testExistingFilter"},
}
return
},
},
reg: map[string]types.Handler{"testExistingFilter": &types.MockHandler{}},
expLen: 2,
},
{
name: "could not merge params for function",
st: types.MockStorer{
R: func(c context.Context, arf st.ApigwRouteFilter) (s st.ApigwRouteSet, f st.ApigwRouteFilter, err error) {
s = st.ApigwRouteSet{
{ID: 1, Endpoint: "/endpoint", Method: "GET", Enabled: true, Group: 0},
}
return
},
F: func(c context.Context, aff st.ApigwFilterFilter) (s st.ApigwFilterSet, f st.ApigwFilterFilter, err error) {
s = st.ApigwFilterSet{
{ID: 1, Route: 1, Ref: "testExistingFilter", Params: st.ApigwFilterParams{}},
}
return
},
},
reg: map[string]types.Handler{"testExistingFilter": &mockExistingHandler{
MockHandler: &types.MockHandler{},
merge: func(params []byte) (types.Handler, error) {
return nil, fmt.Errorf("testttt")
},
}},
expLen: 0,
},
}
)
for _, tc := range tcc {
t.Run(tc.name, func(t *testing.T) {
var (
req = require.New(t)
ctx = context.Background()
)
reg := registry.NewRegistry(types.Config{})
for hn, h := range tc.reg {
reg.Add(hn, h)
}
service := &apigw{
log: zap.NewNop(),
storer: tc.st,
reg: reg,
}
rr, err := service.loadRoutes(ctx)
req.NoError(err)
service.Init(ctx, rr...)
req.NotEmpty(service.routes)
})
}
}
func (h mockExistingHandler) Merge(params []byte, cfg types.Config) (types.Handler, error) {
return h.merge(params)
}
func Test_serviceAppendRoutes(t *testing.T) {
var (
req = require.New(t)
routes = func(rr ...*route) []*route {
return rr
}
r1 = &route{
method: "GET",
endpoint: "/test",
}
r2 = &route{
method: "POST",
endpoint: "/test",
}
r3 = &route{
method: "PUT",
endpoint: "/test",
}
r4 = &route{
method: "DELETE",
endpoint: "/test",
}
r5 = &route{
endpoint: "GET",
method: "/test2",
}
tests = []struct {
name string
ag apigw
routes []*route
expected []*route
}{
{
name: "add new",
ag: apigw{
routes: routes(r1, r2, r3),
},
routes: routes(r4),
expected: routes(r1, r2, r3, r4),
},
{
name: "no duplicates",
ag: apigw{
routes: routes(r1, r2, r3, r4, r5),
},
routes: routes(r1, r5),
expected: routes(r1, r2, r3, r4, r5),
},
}
)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.ag.AppendRoutes(tt.routes...)
req.Equal(tt.expected, tt.ag.routes)
})
}
}