code.vegaprotocol.io/vega@v0.79.0/core/events/oracle_spec_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 events_test
    17  
    18  import (
    19  	"context"
    20  	"testing"
    21  
    22  	dstypes "code.vegaprotocol.io/vega/core/datasource/common"
    23  	"code.vegaprotocol.io/vega/core/events"
    24  	vegapb "code.vegaprotocol.io/vega/protos/vega"
    25  	datapb "code.vegaprotocol.io/vega/protos/vega/data/v1"
    26  
    27  	"github.com/stretchr/testify/assert"
    28  	"google.golang.org/protobuf/proto"
    29  )
    30  
    31  func TestOracleSpecDeepClone(t *testing.T) {
    32  	ctx := context.Background()
    33  	pubKeys := []*dstypes.Signer{
    34  		dstypes.CreateSignerFromString("PubKey1", dstypes.SignerTypePubKey),
    35  		dstypes.CreateSignerFromString("PubKey1", dstypes.SignerTypePubKey),
    36  	}
    37  
    38  	os := vegapb.OracleSpec{
    39  		ExternalDataSourceSpec: &vegapb.ExternalDataSourceSpec{
    40  			Spec: &vegapb.DataSourceSpec{
    41  				Id:        "Id",
    42  				CreatedAt: 10000,
    43  				UpdatedAt: 20000,
    44  				Data: &vegapb.DataSourceDefinition{
    45  					SourceType: &vegapb.DataSourceDefinition_External{
    46  						External: &vegapb.DataSourceDefinitionExternal{
    47  							SourceType: &vegapb.DataSourceDefinitionExternal_Oracle{
    48  								Oracle: &vegapb.DataSourceSpecConfiguration{
    49  									Signers: dstypes.SignersIntoProto(pubKeys),
    50  									Filters: []*datapb.Filter{
    51  										{
    52  											Key: &datapb.PropertyKey{
    53  												Name: "Name",
    54  												Type: datapb.PropertyKey_TYPE_BOOLEAN,
    55  											},
    56  											Conditions: []*datapb.Condition{
    57  												{
    58  													Operator: datapb.Condition_OPERATOR_EQUALS,
    59  													Value:    "Value",
    60  												},
    61  											},
    62  										},
    63  									},
    64  								},
    65  							},
    66  						},
    67  					},
    68  				},
    69  				Status: vegapb.DataSourceSpec_STATUS_ACTIVE,
    70  			},
    71  		},
    72  	}
    73  
    74  	osEvent := events.NewOracleSpecEvent(ctx, &os)
    75  	os2 := proto.Clone(osEvent.OracleSpec()).(*vegapb.OracleSpec)
    76  
    77  	// Change the original values
    78  	pk1 := dstypes.CreateSignerFromString("Changed1", dstypes.SignerTypePubKey)
    79  	pk2 := dstypes.CreateSignerFromString("Changed2", dstypes.SignerTypePubKey)
    80  
    81  	os.ExternalDataSourceSpec.Spec.Id = "Changed"
    82  	os.ExternalDataSourceSpec.Spec.CreatedAt = 999
    83  	os.ExternalDataSourceSpec.Spec.UpdatedAt = 999
    84  	os.ExternalDataSourceSpec.Spec.Status = vegapb.DataSourceSpec_STATUS_UNSPECIFIED
    85  
    86  	signers := []*datapb.Signer{
    87  		pk1.IntoProto(), pk2.IntoProto(),
    88  	}
    89  
    90  	filters := []*datapb.Filter{
    91  		{
    92  			Key: &datapb.PropertyKey{
    93  				Name: "Changed",
    94  				Type: datapb.PropertyKey_TYPE_EMPTY,
    95  			},
    96  			Conditions: []*datapb.Condition{
    97  				{
    98  					Operator: datapb.Condition_OPERATOR_GREATER_THAN_OR_EQUAL,
    99  					Value:    "Changed",
   100  				},
   101  			},
   102  		},
   103  	}
   104  
   105  	os.ExternalDataSourceSpec.Spec.Data.SetOracleConfig(
   106  		&vegapb.DataSourceDefinitionExternal_Oracle{
   107  			Oracle: &vegapb.DataSourceSpecConfiguration{
   108  				Signers: signers,
   109  				Filters: filters,
   110  			},
   111  		},
   112  	)
   113  
   114  	// Check things have changed
   115  	os2DataSourceSpec := os2.ExternalDataSourceSpec.Spec
   116  	osDataSourceSpec := os.ExternalDataSourceSpec.Spec
   117  	assert.NotEqual(t, osDataSourceSpec.Id, os2DataSourceSpec.Id)
   118  	assert.NotEqual(t, osDataSourceSpec.CreatedAt, os2DataSourceSpec.CreatedAt)
   119  	assert.NotEqual(t, osDataSourceSpec.UpdatedAt, os2DataSourceSpec.UpdatedAt)
   120  	assert.NotEqual(t, osDataSourceSpec.Data.GetSigners()[0], os2DataSourceSpec.Data.GetSigners()[0])
   121  	assert.NotEqual(t, osDataSourceSpec.Data.GetSigners()[1], os2DataSourceSpec.Data.GetSigners()[1])
   122  	assert.NotEqual(t, osDataSourceSpec.Data.GetFilters()[0].Key.Name, os2DataSourceSpec.Data.GetFilters()[0].Key.Name)
   123  	assert.NotEqual(t, osDataSourceSpec.Data.GetFilters()[0].Key.Type, os2DataSourceSpec.Data.GetFilters()[0].Key.Type)
   124  	assert.NotEqual(t, osDataSourceSpec.Data.GetFilters()[0].Conditions[0].Operator, os2DataSourceSpec.Data.GetFilters()[0].Conditions[0].Operator)
   125  	assert.NotEqual(t, osDataSourceSpec.Data.GetFilters()[0].Conditions[0].Value, os2DataSourceSpec.Data.GetFilters()[0].Conditions[0].Value)
   126  	assert.NotEqual(t, osDataSourceSpec.Status, os2DataSourceSpec.Status)
   127  }