Fix: Connection settings route and address data types

This commit is contained in:
Christian Müller 2022-11-22 14:27:06 +01:00
parent 8fe336a60b
commit 58824d8cc3
2 changed files with 37 additions and 30 deletions

View file

@ -125,32 +125,39 @@ func decodeSettings(input map[string]map[string]dbus.Variant) (settings Connecti
func decode(input interface{}) (value interface{}) {
if variant, isVariant := input.(dbus.Variant); isVariant {
return decode(variant.Value())
} else if inputMap, isMap := input.(map[string]dbus.Variant); isMap {
return decodeMap(inputMap)
} else if inputArray, isArray := input.([]dbus.Variant); isArray {
return decodeArray(inputArray)
} else if inputArray, isArray := input.([]map[string]dbus.Variant); isArray {
return decodeMapArray(inputArray)
} else {
if inputMap, isMap := input.(map[string]dbus.Variant); isMap {
valueMap := map[string]interface{}{}
for key, data := range inputMap {
valueMap[key] = decode(data)
}
return valueMap
} else if inputArray, isArray := input.([]interface{}); isArray {
var valueArray []interface{}
for _, data := range inputArray {
valueArray = append(valueArray, decode(data))
}
return valueArray
} else if inputArray, isArray := input.([]map[string]dbus.Variant); isArray {
var valueArray []interface{}
for _, data := range inputArray {
valueArray = append(valueArray, decode(data))
}
return valueArray
} else {
return input
}
return input
}
}
func decodeArray(input []dbus.Variant) (value []interface{}) {
for _, data := range input {
value = append(value, decode(data))
}
return
}
func decodeMapArray(input []map[string]dbus.Variant) (value []map[string]interface{}) {
for _, data := range input {
value = append(value, decodeMap(data))
}
return
}
func decodeMap(input map[string]dbus.Variant) (value map[string]interface{}) {
value = map[string]interface{}{}
for key, data := range input {
value[key] = decode(data)
}
return
}
func (c *connection) ClearSecrets() error {
return c.call(ConnectionClearSecrets)
}

View file

@ -63,15 +63,15 @@ func TestDecodeSettings(t *testing.T) {
expected := ConnectionSettings{
"ipv4": {
"address-data": []interface{}{
map[string]interface{}{
"address-data": []map[string]interface{}{
{
"address": "192.168.1.156",
"prefix": 24,
},
},
"dns-search": []string{},
"method": "manual",
"route-data": []interface{}(nil),
"route-data": []map[string]interface{}(nil),
"routes": [][]uint32{},
"addresses": [][]uint32{
{
@ -86,11 +86,11 @@ func TestDecodeSettings(t *testing.T) {
},
"ipv6": {
"addr-gen-mode": 3,
"address-data": []interface{}(nil),
"address-data": []map[string]interface{}(nil),
"routes": [][]interface{}{},
"dns-search": []string{},
"method": "auto",
"route-data": []interface{}(nil),
"route-data": []map[string]interface{}(nil),
"dhcp-timeout": 45,
"route-metric": 100,
"addresses": [][]interface{}{},
@ -145,15 +145,15 @@ func TestDecode(t *testing.T) {
result := decode(ipSettings)
expected := map[string]interface{}{
"address-data": []interface{}{
map[string]interface{}{
"address-data": []map[string]interface{}{
{
"address": "192.168.1.156",
"prefix": 24,
},
},
"dns-search": []string{},
"method": "manual",
"route-data": []interface{}(nil),
"route-data": []map[string]interface{}(nil),
"routes": [][]uint32{},
"addresses": [][]uint32{
{