openmeter / pkg /framework /transaction /context_test.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 9)
fea99b3 verified
Raw
History Blame Contribute Delete
1.25 kB
package transaction
import (
"context"
"testing"
"github.com/stretchr/testify/require"
)
type testContextKey struct{}
func TestRunInNewTransactionShadowsParentTransaction(t *testing.T) {
parent := context.WithValue(t.Context(), testContextKey{}, "kept")
parent, err := SetDriverOnContext(parent, noopDriver{})
require.NoError(t, err)
createdDriver := &noopDriver{}
creator := &noopCreator{driver: createdDriver}
_, err = RunInNewTransaction(parent, creator, func(ctx context.Context) (interface{}, error) {
require.Equal(t, "kept", ctx.Value(testContextKey{}))
driver, err := GetDriverFromContext(ctx)
require.NoError(t, err)
require.Same(t, createdDriver, driver)
return nil, nil
})
require.NoError(t, err)
require.True(t, creator.called)
driver, err := GetDriverFromContext(parent)
require.NoError(t, err)
require.NotEqual(t, createdDriver, driver)
}
type noopDriver struct{}
func (noopDriver) Commit() error {
return nil
}
func (noopDriver) Rollback() error {
return nil
}
func (noopDriver) SavePoint() error {
return nil
}
type noopCreator struct {
called bool
driver Driver
}
func (n *noopCreator) Tx(ctx context.Context) (context.Context, Driver, error) {
n.called = true
return ctx, n.driver, nil
}