feat: add queue adapter tests
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
This commit is contained in:
99
internal/proxy/director/layer/queue/testsuite/adapter.go
Normal file
99
internal/proxy/director/layer/queue/testsuite/adapter.go
Normal file
@ -0,0 +1,99 @@
|
||||
package testsuite
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/proxy/director/layer/queue"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type adapterTestCase struct {
|
||||
Name string
|
||||
Do func(adapter queue.Adapter) error
|
||||
}
|
||||
|
||||
var adapterTestCases = []adapterTestCase{
|
||||
{
|
||||
Name: "Test queue ranking",
|
||||
Do: func(adapter queue.Adapter) error {
|
||||
ctx := context.Background()
|
||||
queueName := "test_queue_ranking"
|
||||
|
||||
sessionIdPattern := "session-%d"
|
||||
totalSessions := int64(100)
|
||||
|
||||
for idx := int64(0); idx < totalSessions; idx++ {
|
||||
sessionId := fmt.Sprintf(sessionIdPattern, idx)
|
||||
rank, err := adapter.Touch(ctx, queueName, sessionId)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "could not touch session '%s' (index: %d, rank: %d)", sessionId, idx, rank)
|
||||
}
|
||||
|
||||
if e, g := int64(idx), rank; e != g {
|
||||
return errors.Errorf("rank('%s'): expected '%v', got '%v'", sessionId, e, g)
|
||||
}
|
||||
}
|
||||
|
||||
status, err := adapter.Status(ctx, queueName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not retrieve queue status")
|
||||
}
|
||||
|
||||
if e, g := totalSessions, status.Sessions; e != g {
|
||||
return errors.Errorf("status.Sessions: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Test session expiration",
|
||||
Do: func(adapter queue.Adapter) error {
|
||||
ctx := context.Background()
|
||||
queueName := "test_session_expiration"
|
||||
|
||||
sessionId := "session-1"
|
||||
|
||||
rank, err := adapter.Touch(ctx, queueName, sessionId)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "could not touch session '%s'", sessionId)
|
||||
}
|
||||
|
||||
if e, g := int64(0), rank; e != g {
|
||||
return errors.Errorf("rank('%s'): expected '%v', got '%v'", sessionId, e, g)
|
||||
}
|
||||
|
||||
<-time.After(time.Second)
|
||||
|
||||
if err := adapter.Refresh(ctx, queueName, time.Second); err != nil {
|
||||
return errors.Wrap(err, "could not refresh queue")
|
||||
}
|
||||
|
||||
status, err := adapter.Status(ctx, queueName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not retrieve queue status")
|
||||
}
|
||||
|
||||
if e, g := int64(0), status.Sessions; e != g {
|
||||
return errors.Errorf("status.Sessions: expected '%v', got '%v'", e, g)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
func TestAdapter(t *testing.T, adapter queue.Adapter) {
|
||||
for _, tc := range adapterTestCases {
|
||||
func(tc adapterTestCase) {
|
||||
t.Run(tc.Name, func(t *testing.T) {
|
||||
if err := tc.Do(adapter); err != nil {
|
||||
t.Fatalf("%+v", errors.WithStack(err))
|
||||
}
|
||||
})
|
||||
}(tc)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user