Skip to content

Commit

Permalink
Merge branch 'rc/spica-patch-relayedv3' into merge-rc-spica-patch-rel…
Browse files Browse the repository at this point in the history
…ayedv3-into-feat-state-changes
  • Loading branch information
ssd04 committed Dec 17, 2024
2 parents e7c81c9 + c5f7e5a commit a1f3c1d
Show file tree
Hide file tree
Showing 9 changed files with 150 additions and 45 deletions.
6 changes: 3 additions & 3 deletions common/reflectcommon/structFieldsUpdate.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func trySetTheNewValue(value *reflect.Value, newValue interface{}) error {
case reflect.Map:
mapValue := reflect.ValueOf(newValue)

return tryUpdateMapValue(value, mapValue)
return trySetMapValue(value, mapValue)
default:
return fmt.Errorf("unsupported type <%s> when trying to set the value '%v' of type <%s>", valueKind, newValue, reflect.TypeOf(newValue))
}
Expand All @@ -141,7 +141,7 @@ func trySetSliceValue(value *reflect.Value, newValue interface{}) error {
item := sliceVal.Index(i)
newItem := reflect.New(value.Type().Elem()).Elem()

err := trySetStructValue(&newItem, item)
err := trySetTheNewValue(&newItem, item.Interface())
if err != nil {
return err
}
Expand All @@ -167,7 +167,7 @@ func trySetStructValue(value *reflect.Value, newValue reflect.Value) error {
}
}

func tryUpdateMapValue(value *reflect.Value, newValue reflect.Value) error {
func trySetMapValue(value *reflect.Value, newValue reflect.Value) error {
if value.IsNil() {
value.Set(reflect.MakeMap(value.Type()))
}
Expand Down
73 changes: 73 additions & 0 deletions common/reflectcommon/structFieldsUpdate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1204,6 +1204,79 @@ func TestAdaptStructureValueBasedOnPath(t *testing.T) {
require.Equal(t, "unsupported type <int> when trying to add value in type <map>", err.Error())
})

t.Run("should work and override string array", func(t *testing.T) {
t.Parallel()

testConfig, err := loadTestConfig("../../testscommon/toml/config.toml")
require.NoError(t, err)

expectedArray := []string{"x", "y", "z"}

err = AdaptStructureValueBasedOnPath(testConfig, "TestArray.Strings", expectedArray)
require.NoError(t, err)
require.Equal(t, expectedArray, testConfig.TestArray.Strings)
})

t.Run("should work and override int array", func(t *testing.T) {
t.Parallel()

testConfig, err := loadTestConfig("../../testscommon/toml/config.toml")
require.NoError(t, err)

expectedArray := []int{10, 20, 30}

err = AdaptStructureValueBasedOnPath(testConfig, "TestArray.Ints", expectedArray)
require.NoError(t, err)
require.Equal(t, expectedArray, testConfig.TestArray.Ints)
})

t.Run("should work and override string array from toml", func(t *testing.T) {
t.Parallel()

testConfig, err := loadTestConfig("../../testscommon/toml/config.toml")
require.NoError(t, err)

overrideConfig, err := loadOverrideConfig("../../testscommon/toml/overwrite.toml")
require.NoError(t, err)

err = AdaptStructureValueBasedOnPath(testConfig, overrideConfig.OverridableConfigTomlValues[38].Path, overrideConfig.OverridableConfigTomlValues[38].Value)
require.NoError(t, err)
expectedArray := []string{"x", "y", "z"}
require.Equal(t, expectedArray, testConfig.TestArray.Strings)
})

t.Run("should work and override int array from toml", func(t *testing.T) {
t.Parallel()

testConfig, err := loadTestConfig("../../testscommon/toml/config.toml")
require.NoError(t, err)

overrideConfig, err := loadOverrideConfig("../../testscommon/toml/overwrite.toml")
require.NoError(t, err)

err = AdaptStructureValueBasedOnPath(testConfig, overrideConfig.OverridableConfigTomlValues[39].Path, overrideConfig.OverridableConfigTomlValues[39].Value)
require.NoError(t, err)
expectedArray := []int{10, 20, 30}
require.Equal(t, expectedArray, testConfig.TestArray.Ints)
})

t.Run("should work and override struct of arrays from toml", func(t *testing.T) {
t.Parallel()

testConfig, err := loadTestConfig("../../testscommon/toml/config.toml")
require.NoError(t, err)

overrideConfig, err := loadOverrideConfig("../../testscommon/toml/overwrite.toml")
require.NoError(t, err)
expectedStringsArray := []string{"x", "y", "z"}
expectedIntsArray := []int{10, 20, 30}

err = AdaptStructureValueBasedOnPath(testConfig, overrideConfig.OverridableConfigTomlValues[40].Path, overrideConfig.OverridableConfigTomlValues[40].Value)
require.NoError(t, err)
require.Equal(t, expectedStringsArray, testConfig.TestArray.Strings)
require.Equal(t, expectedIntsArray, testConfig.TestArray.Ints)
})

}

func loadTestConfig(filepath string) (*toml.Config, error) {
Expand Down
4 changes: 2 additions & 2 deletions node/external/transactionAPI/apiTransactionProcessor.go
Original file line number Diff line number Diff line change
Expand Up @@ -394,8 +394,8 @@ func (atp *apiTransactionProcessor) getFieldGettersForTx(wrappedTx *txcache.Wrap
rcvUsernameField: wrappedTx.Tx.GetRcvUserName(),
dataField: wrappedTx.Tx.GetData(),
valueField: getTxValue(wrappedTx),
senderShardID: wrappedTx.SenderShardID,
receiverShardID: wrappedTx.ReceiverShardID,
senderShardID: atp.shardCoordinator.ComputeId(wrappedTx.Tx.GetSndAddr()),
receiverShardID: atp.shardCoordinator.ComputeId(wrappedTx.Tx.GetRcvAddr()),
}

guardedTx, isGuardedTx := wrappedTx.Tx.(data.GuardedTransactionHandler)
Expand Down
15 changes: 14 additions & 1 deletion node/external/transactionAPI/apiTransactionProcessor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,9 @@ func TestApiTransactionProcessor_GetTransactionsPoolForSender(t *testing.T) {
NumberOfShardsCalled: func() uint32 {
return 1
},
ComputeIdCalled: func(address []byte) uint32 {
return 1 // force to return different from 0
},
}
atp, err := NewAPITransactionProcessor(args)
require.NoError(t, err)
Expand All @@ -948,7 +951,17 @@ func TestApiTransactionProcessor_GetTransactionsPoolForSender(t *testing.T) {
for i, tx := range res.Transactions {
require.Equal(t, expectedHashes[i], tx.TxFields[hashField])
require.Equal(t, expectedValues[i], tx.TxFields[valueField])
require.Equal(t, sender, tx.TxFields["sender"])
require.Equal(t, sender, tx.TxFields[senderField])
require.Equal(t, uint32(1), tx.TxFields[senderShardID])
require.Equal(t, uint32(1), tx.TxFields[senderShardID])
}

res, err = atp.GetTransactionsPoolForSender(sender, "sender,value") // no hash, should be by default
require.NoError(t, err)
for i, tx := range res.Transactions {
require.Equal(t, expectedHashes[i], tx.TxFields[hashField])
require.Equal(t, expectedValues[i], tx.TxFields[valueField])
require.Equal(t, sender, tx.TxFields[senderField])
}

// if no tx is found in pool for a sender, it isn't an error, but return empty slice
Expand Down
5 changes: 4 additions & 1 deletion node/external/transactionAPI/fieldsHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,11 @@ func newFieldsHandler(parameters string) fieldsHandler {
}

parameters = strings.ToLower(parameters)
fieldsMap := sliceToMap(strings.Split(parameters, separator))
fieldsMap[hashField] = struct{}{} // hashField should always be returned

return fieldsHandler{
fieldsMap: sliceToMap(strings.Split(parameters, separator)),
fieldsMap: fieldsMap,
}
}

Expand Down
2 changes: 2 additions & 0 deletions node/external/transactionAPI/fieldsHandler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ func Test_newFieldsHandler(t *testing.T) {
for _, field := range splitFields {
require.True(t, fh.IsFieldSet(field), fmt.Sprintf("field %s is not set", field))
}
require.True(t, fh.IsFieldSet(hashField), "hashField should have been returned by default")

fh = newFieldsHandler("*")
for _, field := range splitFields {
require.True(t, fh.IsFieldSet(field))
}
require.True(t, fh.IsFieldSet(hashField), "hashField should have been returned by default")
}
7 changes: 7 additions & 0 deletions testscommon/toml/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type Config struct {
TestConfigNestedStruct
TestMap
TestInterface
TestArray
}

// TestConfigI8 will hold an int8 value for testing
Expand Down Expand Up @@ -180,3 +181,9 @@ type MapValues struct {
type TestInterface struct {
Value interface{}
}

// TestArray will hold an array of strings and integers
type TestArray struct {
Strings []string
Ints []int
}
4 changes: 4 additions & 0 deletions testscommon/toml/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@
[Map]
[Map.Key1]
Number = 999

[TestArray]
Strings = ["a", "b", "c"]
Ints = [0, 1, 2]
79 changes: 41 additions & 38 deletions testscommon/toml/overwrite.toml
Original file line number Diff line number Diff line change
@@ -1,40 +1,43 @@
OverridableConfigTomlValues = [
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = 127 },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = 128 },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = -128 },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = -129 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = 32767 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = 32768 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = -32768 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = -32769 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = 2147483647 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = 2147483648 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = -2147483648 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = -2147483649 },
{ File = "config.toml", Path = "TestConfigI64.Int64.Number", Value = 9223372036854775807 },
{ File = "config.toml", Path = "TestConfigI64.Int64.Number", Value = -9223372036854775808 },
{ File = "config.toml", Path = "TestConfigU8.Uint8.Number", Value = 255 },
{ File = "config.toml", Path = "TestConfigU8.Uint8.Number", Value = 256 },
{ File = "config.toml", Path = "TestConfigU8.Uint8.Number", Value = -256 },
{ File = "config.toml", Path = "TestConfigU16.Uint16.Number", Value = 65535 },
{ File = "config.toml", Path = "TestConfigU16.Uint16.Number", Value = 65536 },
{ File = "config.toml", Path = "TestConfigU16.Uint16.Number", Value = -65536 },
{ File = "config.toml", Path = "TestConfigU32.Uint32.Number", Value = 4294967295 },
{ File = "config.toml", Path = "TestConfigU32.Uint32.Number", Value = 4294967296 },
{ File = "config.toml", Path = "TestConfigU32.Uint32.Number", Value = -4294967296 },
{ File = "config.toml", Path = "TestConfigU64.Uint64.Number", Value = 9223372036854775807 },
{ File = "config.toml", Path = "TestConfigU64.Uint64.Number", Value = -9223372036854775808 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = 3.4 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = 3.4e+39 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = -3.4 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = -3.4e+40 },
{ File = "config.toml", Path = "TestConfigF64.Float64.Number", Value = 1.7e+308 },
{ File = "config.toml", Path = "TestConfigF64.Float64.Number", Value = -1.7e+308 },
{ File = "config.toml", Path = "TestConfigStruct.ConfigStruct.Description", Value = { Number = 11 } },
{ File = "config.toml", Path = "TestConfigStruct.ConfigStruct.Description", Value = { Nr = 222 } },
{ File = "config.toml", Path = "TestConfigStruct.ConfigStruct.Description", Value = { Number = "11" } },
{ File = "config.toml", Path = "TestConfigNestedStruct.ConfigNestedStruct", Value = { Text = "Overwritten text", Message = { Public = false, MessageDescription = [{ Text = "Overwritten Text1" }] } } },
{ File = "config.toml", Path = "TestConfigNestedStruct.ConfigNestedStruct.Message.MessageDescription", Value = [{ Text = "Overwritten Text1" }, { Text = "Overwritten Text2" }] },
{ File = "config.toml", Path = "TestMap.Map", Value = { "Key1" = { Number = 10 }, "Key2" = { Number = 11 } } },
{ File = "config.toml", Path = "TestMap.Map", Value = { "Key2" = { Number = 2 }, "Key3" = { Number = 3 } } },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = 127 },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = 128 },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = -128 },
{ File = "config.toml", Path = "TestConfigI8.Int8.Number", Value = -129 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = 32767 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = 32768 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = -32768 },
{ File = "config.toml", Path = "TestConfigI16.Int16.Number", Value = -32769 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = 2147483647 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = 2147483648 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = -2147483648 },
{ File = "config.toml", Path = "TestConfigI32.Int32.Number", Value = -2147483649 },
{ File = "config.toml", Path = "TestConfigI64.Int64.Number", Value = 9223372036854775807 },
{ File = "config.toml", Path = "TestConfigI64.Int64.Number", Value = -9223372036854775808 },
{ File = "config.toml", Path = "TestConfigU8.Uint8.Number", Value = 255 },
{ File = "config.toml", Path = "TestConfigU8.Uint8.Number", Value = 256 },
{ File = "config.toml", Path = "TestConfigU8.Uint8.Number", Value = -256 },
{ File = "config.toml", Path = "TestConfigU16.Uint16.Number", Value = 65535 },
{ File = "config.toml", Path = "TestConfigU16.Uint16.Number", Value = 65536 },
{ File = "config.toml", Path = "TestConfigU16.Uint16.Number", Value = -65536 },
{ File = "config.toml", Path = "TestConfigU32.Uint32.Number", Value = 4294967295 },
{ File = "config.toml", Path = "TestConfigU32.Uint32.Number", Value = 4294967296 },
{ File = "config.toml", Path = "TestConfigU32.Uint32.Number", Value = -4294967296 },
{ File = "config.toml", Path = "TestConfigU64.Uint64.Number", Value = 9223372036854775807 },
{ File = "config.toml", Path = "TestConfigU64.Uint64.Number", Value = -9223372036854775808 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = 3.4 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = 3.4e+39 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = -3.4 },
{ File = "config.toml", Path = "TestConfigF32.Float32.Number", Value = -3.4e+40 },
{ File = "config.toml", Path = "TestConfigF64.Float64.Number", Value = 1.7e+308 },
{ File = "config.toml", Path = "TestConfigF64.Float64.Number", Value = -1.7e+308 },
{ File = "config.toml", Path = "TestConfigStruct.ConfigStruct.Description", Value = { Number = 11 } },
{ File = "config.toml", Path = "TestConfigStruct.ConfigStruct.Description", Value = { Nr = 222 } },
{ File = "config.toml", Path = "TestConfigStruct.ConfigStruct.Description", Value = { Number = "11" } },
{ File = "config.toml", Path = "TestConfigNestedStruct.ConfigNestedStruct", Value = { Text = "Overwritten text", Message = { Public = false, MessageDescription = [{ Text = "Overwritten Text1" }] } } },
{ File = "config.toml", Path = "TestConfigNestedStruct.ConfigNestedStruct.Message.MessageDescription", Value = [{ Text = "Overwritten Text1" }, { Text = "Overwritten Text2" }] },
{ File = "config.toml", Path = "TestMap.Map", Value = { "Key1" = { Number = 10 }, "Key2" = { Number = 11 } } },
{ File = "config.toml", Path = "TestMap.Map", Value = { "Key2" = { Number = 2 }, "Key3" = { Number = 3 } } },
{ File = "config.toml", Path = "TestArray.Strings", Value = ["x", "y", "z"] },
{ File = "config.toml", Path = "TestArray.Ints", Value = [10, 20, 30] },
{ File = "config.toml", Path = "TestArray", Value = { Strings = ["x", "y", "z"], Ints = [10, 20, 30] } },
]

0 comments on commit a1f3c1d

Please sign in to comment.