mirror of
https://github.com/hanzozt/zt.git
synced 2026-10-30 15:04:55 +00:00
- Repo names: ziti-* → zt-* - Go modules: github.com/hanzozt/ziti → github.com/hanzozt/zt - Docker images: hanzozt/ziti-* → hanzozt/zt-* - C/Java/JS symbols: ziti_* → zt_* - File and directory names updated
121 lines
2.9 KiB
Go
121 lines
2.9 KiB
Go
package network
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hanzozt/zt/v2/controller/model"
|
|
|
|
"github.com/michaelquigley/pfxlog"
|
|
"github.com/hanzozt/zt/v2/common/ctrl_msg"
|
|
"github.com/hanzozt/zt/v2/controller/xt"
|
|
"github.com/hanzozt/zt/v2/controller/xt_smartrouting"
|
|
)
|
|
|
|
func TestRouteSender_DestroysTerminatorWhenInvalidOnHandleRouteSendAndWeControl(t *testing.T) {
|
|
ctx := model.NewTestContext(t)
|
|
defer ctx.Cleanup()
|
|
|
|
config := newTestConfig(ctx)
|
|
defer close(config.closeNotify)
|
|
|
|
network, err := NewNetwork(config, ctx)
|
|
ctx.NoError(err)
|
|
|
|
entityHelper := newTestEntityHelper(ctx, network)
|
|
logger := pfxlog.ChannelLogger("test")
|
|
|
|
router1 := entityHelper.addTestRouter()
|
|
router2 := entityHelper.addTestRouter()
|
|
path := &model.Path{
|
|
Nodes: []*model.Router{router1, router2},
|
|
}
|
|
|
|
svc := entityHelper.addTestService("svc")
|
|
|
|
instanceId := "instanceId"
|
|
|
|
term := entityHelper.addTestTerminator(svc.Id, router1.Id, instanceId, true)
|
|
term.Binding = "edge"
|
|
|
|
errCode := byte(ctrl_msg.ErrorTypeInvalidTerminator)
|
|
|
|
rs := routeSender{
|
|
serviceCounters: network,
|
|
terminators: network.Terminator,
|
|
attendance: make(map[string]bool),
|
|
}
|
|
|
|
status := &RouteStatus{
|
|
Router: router1,
|
|
ErrorCode: &errCode,
|
|
Success: false,
|
|
Attempt: 1,
|
|
Err: "THIS IS A TEST",
|
|
}
|
|
|
|
peerData, cleanup, err := rs.handleRouteSend(1, path, xt_smartrouting.NewFactory().NewStrategy(), status, term, logger)
|
|
ctx.Error(err)
|
|
ctx.ErrorContains(err, status.Err)
|
|
ctx.Nil(peerData)
|
|
ctx.Empty(cleanup)
|
|
|
|
newTerm, err := network.Terminator.Read(term.Id)
|
|
ctx.Error(err)
|
|
ctx.Nil(newTerm)
|
|
}
|
|
|
|
func TestRouteSender_SetPrecidenceToNilTerminatorWhenInvalidOnHandleRouteSendAndWeDontControl(t *testing.T) {
|
|
ctx := model.NewTestContext(t)
|
|
defer ctx.Cleanup()
|
|
|
|
config := newTestConfig(ctx)
|
|
defer close(config.closeNotify)
|
|
|
|
network, err := NewNetwork(config, ctx)
|
|
ctx.NoError(err)
|
|
|
|
entityHelper := newTestEntityHelper(ctx, network)
|
|
logger := pfxlog.ChannelLogger("test")
|
|
|
|
router1 := entityHelper.addTestRouter()
|
|
router2 := entityHelper.addTestRouter()
|
|
path := &model.Path{
|
|
Nodes: []*model.Router{router1, router2},
|
|
}
|
|
|
|
svc := entityHelper.addTestService("svc")
|
|
|
|
identity := "identity"
|
|
|
|
term := entityHelper.addTestTerminator(svc.Id, router1.Id, identity, true)
|
|
term.Binding = "DNE"
|
|
|
|
errCode := byte(ctrl_msg.ErrorTypeInvalidTerminator)
|
|
|
|
rs := routeSender{
|
|
serviceCounters: network,
|
|
terminators: network.Terminator,
|
|
attendance: make(map[string]bool),
|
|
}
|
|
|
|
status := &RouteStatus{
|
|
Router: router1,
|
|
ErrorCode: &errCode,
|
|
Success: false,
|
|
Attempt: 1,
|
|
Err: "THIS IS A TEST",
|
|
}
|
|
|
|
peerData, cleanup, err := rs.handleRouteSend(1, path, xt_smartrouting.NewFactory().NewStrategy(), status, term, logger)
|
|
ctx.Error(err)
|
|
ctx.ErrorContains(err, status.Err)
|
|
ctx.Nil(peerData)
|
|
ctx.Empty(cleanup)
|
|
|
|
newTerm, err := network.Terminator.Read(term.Id)
|
|
ctx.NoError(err)
|
|
ctx.NotNil(newTerm)
|
|
|
|
ctx.Equal(xt.Precedences.Failed, newTerm.GetPrecedence())
|
|
}
|