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 }