code.vegaprotocol.io/vega@v0.79.0/datanode/entities/data_source_definition_test.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package entities_test
    17  
    18  import (
    19  	"testing"
    20  	"time"
    21  
    22  	dstypes "code.vegaprotocol.io/vega/core/datasource/common"
    23  	"code.vegaprotocol.io/vega/datanode/entities"
    24  	"code.vegaprotocol.io/vega/protos/vega"
    25  	vegapb "code.vegaprotocol.io/vega/protos/vega"
    26  	datapb "code.vegaprotocol.io/vega/protos/vega/data/v1"
    27  	v1 "code.vegaprotocol.io/vega/protos/vega/data/v1"
    28  
    29  	"github.com/stretchr/testify/assert"
    30  	"google.golang.org/protobuf/types/known/structpb"
    31  )
    32  
    33  func TestDataSourceDefinitionGetOracle(t *testing.T) {
    34  	t.Run("nil source definition", func(t *testing.T) {
    35  		ds := &entities.DataSourceDefinition{}
    36  		r, err := ds.GetOracle()
    37  
    38  		assert.Nil(t, err)
    39  		assert.IsType(t, r, &entities.DataSourceSpecConfiguration{})
    40  		assert.NotNil(t, r)
    41  		assert.Equal(t, 0, len(r.Signers))
    42  		assert.Equal(t, 0, len(r.Filters))
    43  	})
    44  
    45  	t.Run("empty source definition", func(t *testing.T) {
    46  		ds := &entities.DataSourceDefinition{&vega.DataSourceDefinition{}}
    47  		r, err := ds.GetOracle()
    48  
    49  		assert.Nil(t, err)
    50  		assert.IsType(t, r, &entities.DataSourceSpecConfiguration{})
    51  		assert.NotNil(t, r)
    52  		assert.Equal(t, 0, len(r.Signers))
    53  		assert.Equal(t, 0, len(r.Filters))
    54  	})
    55  
    56  	t.Run("non-empty external data source definition", func(t *testing.T) {
    57  		t.Run("data source oracle", func(t *testing.T) {
    58  			ds := &entities.DataSourceDefinition{
    59  				vega.NewDataSourceDefinition(
    60  					vegapb.DataSourceContentTypeOracle,
    61  				).SetOracleConfig(
    62  					&vega.DataSourceDefinitionExternal_Oracle{
    63  						Oracle: &vegapb.DataSourceSpecConfiguration{
    64  							Signers: dstypes.SignersIntoProto(
    65  								[]*dstypes.Signer{dstypes.CreateSignerFromString("0xTESTSIGN", dstypes.SignerTypePubKey)},
    66  							),
    67  							Filters: []*datapb.Filter{
    68  								{
    69  									Key: &datapb.PropertyKey{
    70  										Name: "trading.terminated",
    71  										Type: datapb.PropertyKey_TYPE_BOOLEAN,
    72  									},
    73  									Conditions: []*datapb.Condition{
    74  										{
    75  											Operator: datapb.Condition_OPERATOR_EQUALS,
    76  											Value:    "12",
    77  										},
    78  									},
    79  								},
    80  							},
    81  						},
    82  					},
    83  				),
    84  			}
    85  
    86  			r, err := ds.GetOracle()
    87  			assert.Nil(t, err)
    88  			assert.IsType(t, r, &entities.DataSourceSpecConfiguration{})
    89  			assert.NotNil(t, r)
    90  			assert.Equal(t, 1, len(r.Signers))
    91  			assert.Equal(t, "\x00TESTSIGN", string(r.Signers[0]))
    92  
    93  			assert.Equal(t, 1, len(r.Filters))
    94  			filters := r.Filters
    95  			assert.Equal(t, 1, len(filters))
    96  			assert.Equal(t, 1, len(filters[0].Conditions))
    97  			assert.Equal(t, datapb.Condition_Operator(1), filters[0].Conditions[0].Operator)
    98  			assert.Equal(t, "12", filters[0].Conditions[0].Value)
    99  			assert.Equal(t, "trading.terminated", filters[0].Key.Name)
   100  			assert.Equal(t, datapb.PropertyKey_TYPE_BOOLEAN, filters[0].Key.Type)
   101  		})
   102  
   103  		t.Run("data source ethereum oracle", func(t *testing.T) {
   104  			timeNow := uint64(time.Now().UnixNano())
   105  			ds := &entities.DataSourceDefinition{
   106  				vega.NewDataSourceDefinition(
   107  					vegapb.DataSourceContentTypeEthOracle,
   108  				).SetOracleConfig(
   109  					&vega.DataSourceDefinitionExternal_EthOracle{
   110  						EthOracle: &vegapb.EthCallSpec{
   111  							Address: "test-eth-address",
   112  							Abi:     "5",
   113  							Method:  "test-method",
   114  							Args: []*structpb.Value{
   115  								structpb.NewStringValue("test-arg-value"),
   116  							},
   117  							Trigger: &vegapb.EthCallTrigger{
   118  								Trigger: &vegapb.EthCallTrigger_TimeTrigger{
   119  									TimeTrigger: &vegapb.EthTimeTrigger{
   120  										Initial: &timeNow,
   121  									},
   122  								},
   123  							},
   124  							Filters: []*v1.Filter{
   125  								{
   126  									Key: &v1.PropertyKey{
   127  										Name: "test-key",
   128  										Type: v1.PropertyKey_Type(1),
   129  									},
   130  									Conditions: []*datapb.Condition{
   131  										{
   132  											Operator: datapb.Condition_OPERATOR_EQUALS,
   133  											Value:    "12",
   134  										},
   135  									},
   136  								},
   137  							},
   138  							Normalisers: []*vegapb.Normaliser{
   139  								{
   140  									Name:       "test-normaliser-name",
   141  									Expression: "test-normaliser-expression",
   142  								},
   143  							},
   144  						},
   145  					},
   146  				),
   147  			}
   148  
   149  			r, err := ds.GetEthOracle()
   150  			assert.Nil(t, err)
   151  			assert.IsType(t, r, &entities.EthCallSpec{})
   152  			assert.NotNil(t, r)
   153  			assert.Equal(t, "test-eth-address", r.Address)
   154  			assert.Equal(t, []byte("5"), r.Abi)
   155  			assert.Equal(t, "test-method", r.Method)
   156  			assert.Equal(t, []string{"\"test-arg-value\""}, r.ArgsJson)
   157  			assert.Equal(t, 1, len(r.Filters))
   158  			filters := r.Filters
   159  			assert.Equal(t, 1, len(filters))
   160  			assert.Equal(t, 1, len(filters[0].Conditions))
   161  			assert.Equal(t, "test-key", filters[0].Key.Name)
   162  			assert.Equal(t, 1, len(r.Normalisers))
   163  			assert.Equal(t, "test-normaliser-name", r.Normalisers[0].Name)
   164  			assert.Equal(t, "test-normaliser-expression", r.Normalisers[0].Expression)
   165  		})
   166  	})
   167  
   168  	t.Run("non-empty internal data source definition", func(t *testing.T) {
   169  		ds := &entities.DataSourceDefinition{
   170  			vega.NewDataSourceDefinition(
   171  				vegapb.DataSourceContentTypeInternalTimeTermination,
   172  			).SetTimeTriggerConditionConfig(
   173  				[]*datapb.Condition{
   174  					{
   175  						Operator: datapb.Condition_OPERATOR_GREATER_THAN,
   176  						Value:    "12",
   177  					},
   178  				},
   179  			),
   180  		}
   181  
   182  		r, err := ds.GetOracle()
   183  		assert.Nil(t, err)
   184  		assert.IsType(t, r, &entities.DataSourceSpecConfiguration{})
   185  		assert.NotNil(t, r)
   186  		assert.Equal(t, 0, len(r.Signers))
   187  		assert.Equal(t, 0, len(r.Filters))
   188  	})
   189  }
   190  
   191  func TestDataSourceDefinitionGetInternalTimeTrigger(t *testing.T) {
   192  	t.Run("nil source definition", func(t *testing.T) {
   193  		ds := &entities.DataSourceDefinition{}
   194  		r := ds.GetInternalTimeTrigger()
   195  
   196  		assert.IsType(t, r, &entities.DataSourceSpecConfigurationTime{})
   197  		assert.NotNil(t, r)
   198  		assert.Equal(t, 0, len(r.Conditions))
   199  	})
   200  
   201  	t.Run("empty source definition", func(t *testing.T) {
   202  		ds := &entities.DataSourceDefinition{&vega.DataSourceDefinition{}}
   203  		r := ds.GetInternalTimeTrigger()
   204  
   205  		assert.IsType(t, r, &entities.DataSourceSpecConfigurationTime{})
   206  		assert.NotNil(t, r)
   207  		assert.Equal(t, 0, len(r.Conditions))
   208  	})
   209  
   210  	t.Run("non-empty external data source definition", func(t *testing.T) {
   211  		ds := &entities.DataSourceDefinition{
   212  			vega.NewDataSourceDefinition(
   213  				vegapb.DataSourceContentTypeOracle,
   214  			).SetOracleConfig(
   215  				&vega.DataSourceDefinitionExternal_Oracle{
   216  					Oracle: &vegapb.DataSourceSpecConfiguration{
   217  						Signers: dstypes.SignersIntoProto(
   218  							[]*dstypes.Signer{dstypes.CreateSignerFromString("0xTESTSIGN", dstypes.SignerTypePubKey)},
   219  						),
   220  						Filters: []*datapb.Filter{
   221  							{
   222  								Key: &datapb.PropertyKey{
   223  									Name: "trading.terminated",
   224  									Type: datapb.PropertyKey_TYPE_BOOLEAN,
   225  								},
   226  								Conditions: []*datapb.Condition{
   227  									{
   228  										Operator: datapb.Condition_OPERATOR_EQUALS,
   229  										Value:    "12",
   230  									},
   231  								},
   232  							},
   233  						},
   234  					},
   235  				},
   236  			),
   237  		}
   238  
   239  		r := ds.GetInternalTimeTrigger()
   240  		assert.IsType(t, r, &entities.DataSourceSpecConfigurationTime{})
   241  		assert.NotNil(t, r)
   242  
   243  		assert.Equal(t, 0, len(r.Conditions))
   244  	})
   245  
   246  	t.Run("non-empry internal data source definition", func(t *testing.T) {
   247  		ds := &entities.DataSourceDefinition{
   248  			vega.NewDataSourceDefinition(
   249  				vegapb.DataSourceContentTypeInternalTimeTermination,
   250  			).SetTimeTriggerConditionConfig(
   251  				[]*datapb.Condition{
   252  					{
   253  						Operator: datapb.Condition_OPERATOR_GREATER_THAN,
   254  						Value:    "12",
   255  					},
   256  				},
   257  			),
   258  		}
   259  
   260  		r := ds.GetInternalTimeTrigger()
   261  		assert.IsType(t, r, &entities.DataSourceSpecConfigurationTime{})
   262  		assert.NotNil(t, r)
   263  
   264  		assert.Equal(t, 1, len(r.Conditions))
   265  		assert.Equal(t, datapb.Condition_Operator(2), r.Conditions[0].Operator)
   266  		assert.Equal(t, "12", r.Conditions[0].Value)
   267  	})
   268  }
   269  
   270  func TestDataSourceDefinitionGetSigners(t *testing.T) {
   271  	t.Run("nil source definition", func(t *testing.T) {
   272  		ds := &entities.DataSourceDefinition{}
   273  		r, err := ds.GetSigners()
   274  
   275  		assert.Nil(t, err)
   276  		assert.IsType(t, r, entities.Signers{})
   277  		assert.NotNil(t, r)
   278  		assert.Equal(t, 0, len(r))
   279  	})
   280  
   281  	t.Run("empty source definition", func(t *testing.T) {
   282  		ds := &entities.DataSourceDefinition{&vega.DataSourceDefinition{}}
   283  		r, err := ds.GetSigners()
   284  
   285  		assert.Nil(t, err)
   286  		assert.IsType(t, r, entities.Signers{})
   287  		assert.NotNil(t, r)
   288  		assert.Equal(t, 0, len(r))
   289  	})
   290  
   291  	t.Run("non-empty external data source definition", func(t *testing.T) {
   292  		ds := &entities.DataSourceDefinition{
   293  			vega.NewDataSourceDefinition(
   294  				vegapb.DataSourceContentTypeOracle,
   295  			).SetOracleConfig(
   296  				&vega.DataSourceDefinitionExternal_Oracle{
   297  					Oracle: &vegapb.DataSourceSpecConfiguration{
   298  						Signers: dstypes.SignersIntoProto(
   299  							[]*dstypes.Signer{dstypes.CreateSignerFromString("0xTESTSIGN", dstypes.SignerTypePubKey)},
   300  						),
   301  						Filters: []*datapb.Filter{
   302  							{
   303  								Key: &datapb.PropertyKey{
   304  									Name: "trading.terminated",
   305  									Type: datapb.PropertyKey_TYPE_BOOLEAN,
   306  								},
   307  								Conditions: []*datapb.Condition{
   308  									{
   309  										Operator: datapb.Condition_OPERATOR_EQUALS,
   310  										Value:    "12",
   311  									},
   312  								},
   313  							},
   314  						},
   315  					},
   316  				},
   317  			),
   318  		}
   319  
   320  		r, err := ds.GetSigners()
   321  
   322  		assert.Nil(t, err)
   323  		assert.IsType(t, r, entities.Signers{})
   324  		assert.NotNil(t, r)
   325  		assert.Equal(t, 1, len(r))
   326  		assert.Equal(t, "\x00TESTSIGN", string(r[0]))
   327  	})
   328  
   329  	t.Run("non-empry internal data source definition", func(t *testing.T) {
   330  		ds := &entities.DataSourceDefinition{
   331  			vega.NewDataSourceDefinition(
   332  				vegapb.DataSourceContentTypeInternalTimeTermination,
   333  			).SetTimeTriggerConditionConfig(
   334  				[]*datapb.Condition{
   335  					{
   336  						Operator: datapb.Condition_OPERATOR_GREATER_THAN,
   337  						Value:    "12",
   338  					},
   339  				},
   340  			),
   341  		}
   342  
   343  		r, err := ds.GetSigners()
   344  		assert.Nil(t, err)
   345  		assert.IsType(t, r, entities.Signers{})
   346  		assert.NotNil(t, r)
   347  		assert.Equal(t, 0, len(r))
   348  	})
   349  }
   350  
   351  func TestDataSourceDefinitionGetFilters(t *testing.T) {
   352  	t.Run("nil source definition", func(t *testing.T) {
   353  		ds := &entities.DataSourceDefinition{}
   354  		r := ds.GetFilters()
   355  
   356  		assert.IsType(t, r, []entities.Filter{})
   357  		assert.NotNil(t, r)
   358  		assert.Equal(t, 0, len(r))
   359  	})
   360  
   361  	t.Run("empty source definition", func(t *testing.T) {
   362  		ds := &entities.DataSourceDefinition{&vega.DataSourceDefinition{}}
   363  		r := ds.GetFilters()
   364  
   365  		assert.IsType(t, r, []entities.Filter{})
   366  		assert.NotNil(t, r)
   367  		assert.Equal(t, 0, len(r))
   368  	})
   369  
   370  	t.Run("non-empty external data source definition", func(t *testing.T) {
   371  		ds := &entities.DataSourceDefinition{
   372  			vega.NewDataSourceDefinition(
   373  				vegapb.DataSourceContentTypeOracle,
   374  			).SetOracleConfig(
   375  				&vega.DataSourceDefinitionExternal_Oracle{
   376  					Oracle: &vegapb.DataSourceSpecConfiguration{
   377  						Signers: dstypes.SignersIntoProto(
   378  							[]*dstypes.Signer{dstypes.CreateSignerFromString("0xTESTSIGN", dstypes.SignerTypePubKey)},
   379  						),
   380  						Filters: []*datapb.Filter{
   381  							{
   382  								Key: &datapb.PropertyKey{
   383  									Name: "trading.terminated",
   384  									Type: datapb.PropertyKey_TYPE_BOOLEAN,
   385  								},
   386  								Conditions: []*datapb.Condition{
   387  									{
   388  										Operator: datapb.Condition_OPERATOR_EQUALS,
   389  										Value:    "12",
   390  									},
   391  								},
   392  							},
   393  						},
   394  					},
   395  				},
   396  			),
   397  		}
   398  
   399  		r := ds.GetFilters()
   400  
   401  		assert.IsType(t, r, []entities.Filter{})
   402  		assert.NotNil(t, r)
   403  		assert.Equal(t, 1, len(r))
   404  		assert.Equal(t, 1, len(r[0].Conditions))
   405  		assert.Equal(t, datapb.Condition_Operator(1), r[0].Conditions[0].Operator)
   406  		assert.Equal(t, "12", r[0].Conditions[0].Value)
   407  		assert.Equal(t, "trading.terminated", r[0].Key.Name)
   408  		assert.Equal(t, datapb.PropertyKey_TYPE_BOOLEAN, r[0].Key.Type)
   409  	})
   410  
   411  	t.Run("non-empry internal data source definition", func(t *testing.T) {
   412  		ds := &entities.DataSourceDefinition{
   413  			vega.NewDataSourceDefinition(
   414  				vegapb.DataSourceContentTypeInternalTimeTermination,
   415  			).SetTimeTriggerConditionConfig(
   416  				[]*datapb.Condition{
   417  					{
   418  						Operator: datapb.Condition_OPERATOR_GREATER_THAN,
   419  						Value:    "12",
   420  					},
   421  				},
   422  			),
   423  		}
   424  
   425  		r := ds.GetFilters()
   426  		assert.IsType(t, r, []entities.Filter{})
   427  		assert.NotNil(t, r)
   428  		assert.Equal(t, 0, len(r))
   429  	})
   430  }
   431  
   432  func TestDataSourceDefinitionGetConditions(t *testing.T) {
   433  	t.Run("nil source definition", func(t *testing.T) {
   434  		ds := &entities.DataSourceDefinition{}
   435  		r := ds.GetConditions()
   436  
   437  		assert.IsType(t, r, []entities.Condition{})
   438  		assert.NotNil(t, r)
   439  		assert.Equal(t, 0, len(r))
   440  	})
   441  
   442  	t.Run("empty source definition", func(t *testing.T) {
   443  		ds := &entities.DataSourceDefinition{&vega.DataSourceDefinition{}}
   444  		r := ds.GetConditions()
   445  
   446  		assert.IsType(t, r, []entities.Condition{})
   447  		assert.NotNil(t, r)
   448  		assert.Equal(t, 0, len(r))
   449  	})
   450  
   451  	t.Run("non-empty external data source definition", func(t *testing.T) {
   452  		ds := &entities.DataSourceDefinition{
   453  			vega.NewDataSourceDefinition(
   454  				vegapb.DataSourceContentTypeOracle,
   455  			).SetOracleConfig(
   456  				&vega.DataSourceDefinitionExternal_Oracle{
   457  					Oracle: &vegapb.DataSourceSpecConfiguration{
   458  						Signers: dstypes.SignersIntoProto(
   459  							[]*dstypes.Signer{dstypes.CreateSignerFromString("0xTESTSIGN", dstypes.SignerTypePubKey)},
   460  						),
   461  						Filters: []*datapb.Filter{
   462  							{
   463  								Key: &datapb.PropertyKey{
   464  									Name: "trading.terminated",
   465  									Type: datapb.PropertyKey_TYPE_BOOLEAN,
   466  								},
   467  								Conditions: []*datapb.Condition{
   468  									{
   469  										Operator: datapb.Condition_OPERATOR_EQUALS,
   470  										Value:    "12",
   471  									},
   472  								},
   473  							},
   474  						},
   475  					},
   476  				},
   477  			),
   478  		}
   479  
   480  		r := ds.GetConditions()
   481  
   482  		assert.IsType(t, r, []entities.Condition{})
   483  		assert.NotNil(t, r)
   484  		assert.Equal(t, 1, len(r))
   485  		assert.Equal(t, "12", r[0].Value)
   486  		assert.Equal(t, datapb.Condition_OPERATOR_EQUALS, r[0].Operator)
   487  	})
   488  
   489  	t.Run("non-empry internal data source definition", func(t *testing.T) {
   490  		ds := &entities.DataSourceDefinition{
   491  			vega.NewDataSourceDefinition(
   492  				vegapb.DataSourceContentTypeInternalTimeTermination,
   493  			).SetTimeTriggerConditionConfig(
   494  				[]*datapb.Condition{
   495  					{
   496  						Operator: datapb.Condition_OPERATOR_GREATER_THAN,
   497  						Value:    "10",
   498  					},
   499  				},
   500  			),
   501  		}
   502  
   503  		r := ds.GetConditions()
   504  		assert.IsType(t, r, []entities.Condition{})
   505  		assert.NotNil(t, r)
   506  		assert.Equal(t, 1, len(r))
   507  		assert.Equal(t, datapb.Condition_Operator(2), r[0].Operator)
   508  		assert.Equal(t, "10", r[0].Value)
   509  	})
   510  }
   511  
   512  func TestDataSourceDefinitionFromProto(t *testing.T) {
   513  	t.Run("nil source definition", func(t *testing.T) {
   514  		ds := &entities.DataSourceDefinition{}
   515  		r := entities.DataSourceDefinitionFromProto(ds.DataSourceDefinition)
   516  
   517  		assert.IsType(t, r, entities.DataSourceDefinition{})
   518  		assert.NotNil(t, r)
   519  		assert.Nil(t, r.DataSourceDefinition)
   520  	})
   521  
   522  	t.Run("empty source definition", func(t *testing.T) {
   523  		ds := &entities.DataSourceDefinition{&vega.DataSourceDefinition{}}
   524  		r := entities.DataSourceDefinitionFromProto(ds.DataSourceDefinition)
   525  
   526  		assert.IsType(t, r, entities.DataSourceDefinition{})
   527  		assert.NotNil(t, r)
   528  		assert.NotNil(t, r.DataSourceDefinition)
   529  		assert.IsType(t, r.DataSourceDefinition, &vegapb.DataSourceDefinition{})
   530  	})
   531  
   532  	t.Run("non-empty external data source definition", func(t *testing.T) {
   533  		ds := &entities.DataSourceDefinition{
   534  			vega.NewDataSourceDefinition(
   535  				vegapb.DataSourceContentTypeOracle,
   536  			).SetOracleConfig(
   537  				&vega.DataSourceDefinitionExternal_Oracle{
   538  					Oracle: &vegapb.DataSourceSpecConfiguration{
   539  						Signers: dstypes.SignersIntoProto(
   540  							[]*dstypes.Signer{dstypes.CreateSignerFromString("0xTESTSIGN", dstypes.SignerTypePubKey)},
   541  						),
   542  						Filters: []*datapb.Filter{
   543  							{
   544  								Key: &datapb.PropertyKey{
   545  									Name: "trading.terminated",
   546  									Type: datapb.PropertyKey_TYPE_BOOLEAN,
   547  								},
   548  								Conditions: []*datapb.Condition{
   549  									{
   550  										Operator: datapb.Condition_OPERATOR_EQUALS,
   551  										Value:    "12",
   552  									},
   553  								},
   554  							},
   555  						},
   556  					},
   557  				},
   558  			),
   559  		}
   560  
   561  		r := entities.DataSourceDefinitionFromProto(ds.DataSourceDefinition)
   562  
   563  		assert.IsType(t, r, entities.DataSourceDefinition{})
   564  		assert.NotNil(t, r)
   565  
   566  		assert.Nil(t, r.DataSourceDefinition.GetInternal())
   567  		assert.NotNil(t, r.DataSourceDefinition.GetExternal())
   568  
   569  		o := r.DataSourceDefinition.GetExternal().GetOracle()
   570  		signers := o.Signers
   571  		assert.Equal(t, 1, len(signers))
   572  		assert.Equal(t, "0xTESTSIGN", signers[0].GetPubKey().Key)
   573  
   574  		filters := o.Filters
   575  		assert.Equal(t, 1, len(filters))
   576  		assert.Equal(t, 1, len(filters[0].Conditions))
   577  		assert.Equal(t, datapb.Condition_Operator(1), filters[0].Conditions[0].Operator)
   578  		assert.Equal(t, "12", filters[0].Conditions[0].Value)
   579  		assert.Equal(t, "trading.terminated", filters[0].Key.Name)
   580  		assert.Equal(t, datapb.PropertyKey_TYPE_BOOLEAN, filters[0].Key.Type)
   581  	})
   582  
   583  	t.Run("non-empry internal data source definition", func(t *testing.T) {
   584  		ds := &entities.DataSourceDefinition{
   585  			vega.NewDataSourceDefinition(
   586  				vegapb.DataSourceContentTypeInternalTimeTermination,
   587  			).SetTimeTriggerConditionConfig(
   588  				[]*datapb.Condition{
   589  					{
   590  						Operator: datapb.Condition_OPERATOR_GREATER_THAN,
   591  						Value:    "10",
   592  					},
   593  				},
   594  			),
   595  		}
   596  
   597  		r := entities.DataSourceDefinitionFromProto(ds.DataSourceDefinition)
   598  		assert.IsType(t, r, entities.DataSourceDefinition{})
   599  		assert.NotNil(t, r)
   600  
   601  		assert.NotNil(t, r.DataSourceDefinition.GetInternal())
   602  		assert.Nil(t, r.DataSourceDefinition.GetExternal())
   603  		conditions := r.DataSourceDefinition.GetInternal().GetTime().Conditions
   604  		assert.Equal(t, 1, len(conditions))
   605  		assert.Equal(t, datapb.Condition_OPERATOR_GREATER_THAN, conditions[0].Operator)
   606  		assert.Equal(t, "10", conditions[0].Value)
   607  	})
   608  }