mukan-ibc/modules/core/api/router_test.go
Mukan Erkin Törük 88dd97a9f8
Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:22 +03:00

135 lines
4 KiB
Go

package api_test
import (
"git.cw.tr/mukan-network/mukan-ibc/modules/core/api"
mockv2 "git.cw.tr/mukan-network/mukan-ibc/testing/mock/v2"
)
func (suite *APITestSuite) TestRouter() {
var router *api.Router
testCases := []struct {
name string
malleate func()
assertionFn func()
}{
{
name: "success",
malleate: func() {
router.AddRoute("port01", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().True(router.HasRoute("port01"))
},
},
{
name: "success: multiple modules",
malleate: func() {
router.AddRoute("port01", &mockv2.IBCModule{})
router.AddRoute("port02", &mockv2.IBCModule{})
router.AddRoute("port03", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().True(router.HasRoute("port01"))
suite.Require().True(router.HasRoute("port02"))
suite.Require().True(router.HasRoute("port03"))
},
},
{
name: "success: prefix based routing works",
malleate: func() {
router.AddPrefixRoute("somemodule", &mockv2.IBCModule{})
router.AddRoute("port01", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().True(router.HasRoute("somemodule"))
suite.Require().True(router.HasRoute("somemoduleport01"))
suite.Require().NotNil(router.Route("somemoduleport01"))
suite.Require().True(router.HasRoute("port01"))
},
},
{
name: "failure: panics on adding direct route after overlapping prefix route",
malleate: func() {
router.AddPrefixRoute("someModule", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().PanicsWithError("route someModuleWithSpecificPath is already matched by registered prefix route: someModule", func() {
router.AddRoute("someModuleWithSpecificPath", &mockv2.IBCModule{})
})
},
},
{
name: "failure: panics on adding prefix route after overlapping direct route",
malleate: func() {
router.AddRoute("someModuleWithSpecificPath", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().PanicsWithError("route prefix someModule is a prefix for already registered route: someModuleWithSpecificPath", func() {
router.AddPrefixRoute("someModule", &mockv2.IBCModule{})
})
},
},
{
name: "failure: panics on duplicate route",
malleate: func() {
router.AddRoute("port01", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().PanicsWithError("route port01 has already been registered", func() {
router.AddRoute("port01", &mockv2.IBCModule{})
})
},
},
{
name: "failure: panics on duplicate route / prefix route",
malleate: func() {
router.AddRoute("port01", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().PanicsWithError("route prefix port01 is a prefix for already registered route: port01", func() {
router.AddPrefixRoute("port01", &mockv2.IBCModule{})
})
},
},
{
name: "failure: panics on duplicate prefix route",
malleate: func() {
router.AddPrefixRoute("port01", &mockv2.IBCModule{})
},
assertionFn: func() {
suite.Require().PanicsWithError("route prefix port01 has already been covered by registered prefix: port01", func() {
router.AddPrefixRoute("port01", &mockv2.IBCModule{})
})
},
},
{
name: "failure: panics invalid-name",
malleate: func() {},
assertionFn: func() {
suite.Require().PanicsWithError("route expressions can only contain alphanumeric characters", func() {
router.AddRoute("port-02", &mockv2.IBCModule{})
})
},
},
{
name: "failure: panics conflicting prefix routes registered, when shorter prefix is added",
malleate: func() {},
assertionFn: func() {
suite.Require().PanicsWithError("route prefix someLonger is a prefix for already registered prefix: someLongerPrefixModule", func() {
router.AddPrefixRoute("someLongerPrefixModule", &mockv2.IBCModule{})
router.AddPrefixRoute("someLonger", &mockv2.IBCModule{})
})
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
router = api.NewRouter()
tc.malleate()
tc.assertionFn()
})
}
}