mirror of
https://github.com/openziti/ziti.git
synced 2026-09-10 16:55:41 +00:00
89 lines
3.2 KiB
Go
89 lines
3.2 KiB
Go
package model
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/openziti/ziti/v2/controller/storage/boltztest"
|
|
"github.com/openziti/ziti/v2/common/eid"
|
|
"github.com/openziti/ziti/v2/controller/change"
|
|
"github.com/openziti/ziti/v2/controller/db"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSessionManager(t *testing.T) {
|
|
ctx := NewTestContext(t)
|
|
defer ctx.Cleanup()
|
|
ctx.Init()
|
|
|
|
t.Run("test get edge routers for service and identity", ctx.testSessionIdempotency)
|
|
}
|
|
|
|
func (ctx *TestContext) testSessionIdempotency(t *testing.T) {
|
|
ctx.requireNewEdgeRouter()
|
|
identity := ctx.requireNewIdentity(false)
|
|
service := ctx.requireNewService()
|
|
service2 := ctx.requireNewService()
|
|
service.RoleAttributes = []string{eid.New()}
|
|
ctx.NoError(ctx.managers.EdgeService.Update(service, nil, change.New()))
|
|
|
|
ctx.requireNewServicePolicy(db.PolicyTypeDialName, ss("#all"), ss("#all"))
|
|
ctx.requireNewServicePolicy(db.PolicyTypeBindName, ss("#all"), ss("#all"))
|
|
ctx.requireNewEdgeRouterPolicy(ss("#all"), ss("#all"))
|
|
ctx.requireNewServiceNewEdgeRouterPolicy(ss("#all"), ss("#all"))
|
|
|
|
apiSession := ctx.requireNewApiSession(identity)
|
|
sessSvc1Dial := ctx.requireNewSession(apiSession, service.Id, db.SessionTypeDial)
|
|
sessSvc1Bind := ctx.requireNewSession(apiSession, service.Id, db.SessionTypeBind)
|
|
|
|
req := require.New(t)
|
|
req.NotEqual(sessSvc1Dial.Id, sessSvc1Bind.Id)
|
|
|
|
sessSvc1Dial2 := ctx.requireNewSession(apiSession, service.Id, db.SessionTypeDial)
|
|
sessSvc1Bind2 := ctx.requireNewSession(apiSession, service.Id, db.SessionTypeBind)
|
|
|
|
req.Equal(sessSvc1Dial.Id, sessSvc1Dial2.Id)
|
|
req.Equal(sessSvc1Bind.Id, sessSvc1Bind2.Id)
|
|
|
|
sessSvc2Dial1 := ctx.requireNewSession(apiSession, service2.Id, db.SessionTypeDial)
|
|
sessSvc2Bind1 := ctx.requireNewSession(apiSession, service2.Id, db.SessionTypeBind)
|
|
|
|
req.NotEqual(sessSvc1Dial2.Id, sessSvc1Bind2.Id)
|
|
req.NotEqual(sessSvc1Dial.Id, sessSvc2Dial1.Id)
|
|
req.NotEqual(sessSvc1Dial.Id, sessSvc2Bind1.Id)
|
|
req.NotEqual(sessSvc1Dial2.Id, sessSvc2Dial1.Id)
|
|
req.NotEqual(sessSvc1Dial2.Id, sessSvc2Bind1.Id)
|
|
req.NotEqual(sessSvc1Bind.Id, sessSvc2Dial1.Id)
|
|
req.NotEqual(sessSvc1Bind.Id, sessSvc2Bind1.Id)
|
|
req.NotEqual(sessSvc1Bind2.Id, sessSvc2Dial1.Id)
|
|
req.NotEqual(sessSvc1Bind2.Id, sessSvc2Bind1.Id)
|
|
|
|
sessSvc2Dial2 := ctx.requireNewSession(apiSession, service2.Id, db.SessionTypeDial)
|
|
sessSvc2Bind2 := ctx.requireNewSession(apiSession, service2.Id, db.SessionTypeBind)
|
|
|
|
req.Equal(sessSvc2Dial1.Id, sessSvc2Dial2.Id)
|
|
req.Equal(sessSvc2Bind1.Id, sessSvc2Bind2.Id)
|
|
|
|
sessSvc1Dial3 := ctx.requireNewSession(apiSession, service.Id, db.SessionTypeDial)
|
|
sessSvc1Bind3 := ctx.requireNewSession(apiSession, service.Id, db.SessionTypeBind)
|
|
|
|
req.Equal(sessSvc1Dial.Id, sessSvc1Dial3.Id)
|
|
req.Equal(sessSvc1Bind.Id, sessSvc1Bind3.Id)
|
|
|
|
req.NoError(ctx.managers.ApiSession.Delete(apiSession.Id, change.New()))
|
|
done, err := ctx.GetStores().EventualEventer.Trigger()
|
|
ctx.NoError(err)
|
|
|
|
select {
|
|
case <-done:
|
|
case <-time.After(5 * time.Second):
|
|
ctx.Fail("did not receive done notification from eventual eventer")
|
|
}
|
|
|
|
boltztest.ValidateDeleted(ctx, apiSession.Id)
|
|
boltztest.ValidateDeleted(ctx, sessSvc1Dial.Id)
|
|
boltztest.ValidateDeleted(ctx, sessSvc1Dial2.Id)
|
|
boltztest.ValidateDeleted(ctx, sessSvc1Bind.Id)
|
|
boltztest.ValidateDeleted(ctx, sessSvc1Bind2.Id)
|
|
}
|