mirror of
https://github.com/portainer/portainer.git
synced 2026-06-23 06:20:12 +00:00
107 lines
1.9 KiB
Go
107 lines
1.9 KiB
Go
package logoutcontext
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetContext_ReturnsActiveContext(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
token := "token-get-context-active"
|
|
defer Cancel(token)
|
|
|
|
ctx := GetContext(token)
|
|
require.NoError(t, ctx.Err())
|
|
}
|
|
|
|
func TestCancel_CancelsContext(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
token := "token-cancel"
|
|
|
|
ctx := GetContext(token)
|
|
require.NoError(t, ctx.Err())
|
|
|
|
Cancel(token)
|
|
|
|
require.ErrorIs(t, ctx.Err(), context.Canceled)
|
|
}
|
|
|
|
func TestCancel_RemovesService(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
token := "token-cancel-removes"
|
|
|
|
first := GetContext(token)
|
|
Cancel(token)
|
|
|
|
second := GetContext(token)
|
|
defer Cancel(token)
|
|
|
|
require.ErrorIs(t, first.Err(), context.Canceled)
|
|
require.NoError(t, second.Err())
|
|
require.NotEqual(t, first, second)
|
|
}
|
|
|
|
func TestGetService_ReturnsSameServiceForSameToken(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
token := logoutToken("token-same-service")
|
|
defer RemoveService(token)
|
|
|
|
s1 := GetService(token)
|
|
s2 := GetService(token)
|
|
|
|
require.Same(t, s1, s2)
|
|
}
|
|
|
|
func TestGetService_ReturnsDistinctServicesForDifferentTokens(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tokenA := logoutToken("token-distinct-a")
|
|
tokenB := logoutToken("token-distinct-b")
|
|
defer RemoveService(tokenA)
|
|
defer RemoveService(tokenB)
|
|
|
|
sA := GetService(tokenA)
|
|
sB := GetService(tokenB)
|
|
|
|
require.NotSame(t, sA, sB)
|
|
}
|
|
|
|
func TestGetService_ConcurrentAccess(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
const goroutines = 50
|
|
token := logoutToken("token-concurrent")
|
|
defer RemoveService(token)
|
|
|
|
var wg sync.WaitGroup
|
|
services := make([]*Service, goroutines)
|
|
|
|
for i := range goroutines {
|
|
wg.Add(1)
|
|
go func(i int) {
|
|
defer wg.Done()
|
|
services[i] = GetService(token)
|
|
}(i)
|
|
}
|
|
|
|
wg.Wait()
|
|
|
|
for i := 1; i < goroutines; i++ {
|
|
require.Same(t, services[0], services[i])
|
|
}
|
|
}
|
|
|
|
func TestLogoutToken_AddsPrefix(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
result := logoutToken("abc123")
|
|
require.Equal(t, LogoutPrefix+"abc123", result)
|
|
}
|