github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/iextengine/builtin/impl_test.go (about) 1 /* 2 - Copyright (c) 2023-present unTill Software Development Group B.V. 3 @author Michael Saigachenko 4 */ 5 package iextenginebuiltin 6 7 import ( 8 "context" 9 "errors" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/voedger/voedger/pkg/appdef" 15 "github.com/voedger/voedger/pkg/iextengine" 16 "github.com/voedger/voedger/pkg/istructs" 17 ) 18 19 func Test_BasicUsage(t *testing.T) { 20 21 require := require.New(t) 22 counter := 0 23 24 ext1name := appdef.NewFullQName("test", "ext1") 25 ext2name := appdef.NewFullQName("test", "ext2") 26 ext1func := func(ctx context.Context, io iextengine.IExtensionIO) error { 27 counter++ 28 if counter == 3 { 29 return errors.New("test error") 30 } 31 return nil 32 } 33 ext2func := func(ctx context.Context, io iextengine.IExtensionIO) error { 34 counter-- 35 return nil 36 } 37 38 factory := ProvideExtensionEngineFactory(iextengine.BuiltInExtFuncs{ 39 istructs.AppQName_test1_app1: iextengine.BuiltInAppExtFuncs{ 40 ext1name: ext1func, 41 ext2name: ext2func, 42 }, 43 }) 44 45 engines, err := factory.New(context.Background(), istructs.AppQName_test1_app1, nil, nil, 5) 46 require.NoError(err) 47 require.Len(engines, 5) 48 49 require.NoError(engines[0].Invoke(context.Background(), ext1name, nil)) 50 require.NoError(engines[1].Invoke(context.Background(), ext1name, nil)) 51 require.ErrorContains(engines[2].Invoke(context.Background(), ext1name, nil), "test error") 52 require.NoError(engines[3].Invoke(context.Background(), ext2name, nil)) 53 require.NoError(engines[4].Invoke(context.Background(), ext2name, nil)) 54 require.ErrorContains(engines[2].Invoke(context.Background(), appdef.NewFullQName("test", "ext3"), nil), "undefined extension: test.ext3") 55 56 require.Equal(1, counter) 57 } 58 59 func Test_Panics(t *testing.T) { 60 61 require := require.New(t) 62 63 ext1name := appdef.NewFullQName("test", "ext1") 64 ext1func := func(ctx context.Context, io iextengine.IExtensionIO) error { 65 panic("boom") 66 } 67 68 factory := ProvideExtensionEngineFactory(iextengine.BuiltInExtFuncs{ 69 istructs.AppQName_test1_app1: iextengine.BuiltInAppExtFuncs{ 70 ext1name: ext1func, 71 }, 72 }) 73 74 engines, err := factory.New(context.Background(), istructs.AppQName_test1_app1, nil, nil, 5) 75 require.NoError(err) 76 require.Len(engines, 5) 77 78 require.ErrorContains(engines[0].Invoke(context.Background(), ext1name, nil), "extension panic: boom") 79 80 }