87 lines
1.7 KiB
Go
87 lines
1.7 KiB
Go
package util_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"allaboutapps.dev/aw/go-starter/internal/util"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type contextKey string
|
|
|
|
func TestDetachContextWithCancel(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(t.Context())
|
|
|
|
var key contextKey = "test"
|
|
val := 42
|
|
ctx2 := context.WithValue(ctx, key, val)
|
|
detachedContext := util.DetachContext(ctx2)
|
|
|
|
cancel()
|
|
|
|
select {
|
|
case <-ctx.Done():
|
|
t.Log("Context cancelled")
|
|
default:
|
|
t.Error("Context is not canceled")
|
|
}
|
|
|
|
select {
|
|
case <-ctx2.Done():
|
|
t.Log("Context with value cancelled")
|
|
default:
|
|
t.Error("Context with value is not canceled")
|
|
}
|
|
|
|
select {
|
|
case <-detachedContext.Done():
|
|
t.Error("Detached context is cancelled")
|
|
default:
|
|
t.Log("Detached context is not cancelled")
|
|
}
|
|
|
|
res, ok := detachedContext.Value(key).(int)
|
|
require.True(t, ok)
|
|
assert.Equal(t, val, res)
|
|
}
|
|
|
|
func TestDetachContextWithDeadline(t *testing.T) {
|
|
ctx, cancel := context.WithTimeout(t.Context(), time.Second*1)
|
|
defer cancel()
|
|
|
|
var key contextKey = "test"
|
|
val := 42
|
|
ctx2 := context.WithValue(ctx, key, val)
|
|
detachedContext := util.DetachContext(ctx2)
|
|
|
|
time.Sleep(time.Second * 2)
|
|
|
|
select {
|
|
case <-ctx.Done():
|
|
t.Log("Context cancelled")
|
|
default:
|
|
t.Error("Context is not canceled")
|
|
}
|
|
|
|
select {
|
|
case <-ctx2.Done():
|
|
t.Log("Context with value cancelled")
|
|
default:
|
|
t.Error("Context with value is not canceled")
|
|
}
|
|
|
|
select {
|
|
case <-detachedContext.Done():
|
|
t.Error("Detached context is cancelled")
|
|
default:
|
|
t.Log("Detached context is not cancelled")
|
|
}
|
|
|
|
res, ok := detachedContext.Value(key).(int)
|
|
require.True(t, ok)
|
|
assert.Equal(t, val, res)
|
|
}
|