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  }