[VOL-2938]Failure seen when parsing adapter config
Change-Id: Ie044eb110c36fc4b7597457fa6b1f6c94cd1baff
diff --git a/pkg/model/device.go b/pkg/model/device.go
index 716cbc9..e307308 100644
--- a/pkg/model/device.go
+++ b/pkg/model/device.go
@@ -115,10 +115,23 @@
d.ProxyAddress.ChannelTermination = v.(string)
}
}
- d.AdminState = GetEnumValue(val, "admin_state")
- d.OperStatus = GetEnumValue(val, "oper_status")
+
+ var err error
+ d.AdminState, err = GetEnumValue(val, "admin_state")
+ if err != nil {
+ d.AdminState = "UNKNOWN"
+ }
+
+ d.OperStatus, err = GetEnumValue(val, "oper_status")
+ if err != nil {
+ d.OperStatus = "UNKNOWN"
+ }
+
d.Reason = val.GetFieldByName("reason").(string)
- d.ConnectStatus = GetEnumValue(val, "connect_status")
+ d.ConnectStatus, err = GetEnumValue(val, "connect_status")
+ if err != nil {
+ d.ConnectStatus = "UNKNOWN"
+ }
ports := val.GetFieldByName("ports").([]interface{})
d.Ports = make([]DevicePort, len(ports))
@@ -138,11 +151,22 @@
}
func (port *DevicePort) PopulateFrom(val *dynamic.Message) {
+ var err error
port.PortNo = val.GetFieldByName("port_no").(uint32)
- port.Type = GetEnumValue(val, "type")
+ port.Type, err = GetEnumValue(val, "type")
+ if err != nil {
+ port.Type = "UNKNOWN"
+ }
port.Label = val.GetFieldByName("label").(string)
- port.AdminState = GetEnumValue(val, "admin_state")
- port.OperStatus = GetEnumValue(val, "oper_status")
+ port.AdminState, err = GetEnumValue(val, "admin_state")
+ if err != nil {
+ port.AdminState = "UNKNOWN"
+ }
+
+ port.OperStatus, err = GetEnumValue(val, "oper_status")
+ if err != nil {
+ port.OperStatus = "UNKNOWN"
+ }
port.DeviceId = val.GetFieldByName("device_id").(string)
peers := val.GetFieldByName("peers").([]interface{})
port.Peers = make([]PeerPort, len(peers))
diff --git a/pkg/model/utils.go b/pkg/model/utils.go
index 15ef51f..682b8d1 100644
--- a/pkg/model/utils.go
+++ b/pkg/model/utils.go
@@ -16,23 +16,68 @@
package model
import (
+ "errors"
"github.com/jhump/protoreflect/dynamic"
)
-func GetEnumValue(val *dynamic.Message, name string) string {
- return val.FindFieldDescriptorByName(name).GetEnumType().
- FindValueByNumber(val.GetFieldByName(name).(int32)).GetName()
-}
-
-func SetEnumValue(msg *dynamic.Message, name string, value string) {
- eValue := msg.FindFieldDescriptorByName(name).GetEnumType().FindValueByName(value)
- msg.SetFieldByName(name, eValue.GetNumber())
-}
-
-func GetEnumString(msg *dynamic.Message, name string, value int32) string {
- eValue := msg.FindFieldDescriptorByName(name).GetEnumType().FindValueByNumber(value)
- if eValue == nil {
- panic("eValue is nil")
+func GetEnumValue(val *dynamic.Message, name string) (string, error) {
+ fd := val.FindFieldDescriptorByName(name)
+ if fd == nil {
+ return "", errors.New("fieldDescriptor is nil for " + name)
}
- return eValue.GetName()
+
+ enumType := fd.GetEnumType()
+ if enumType == nil {
+ return "", errors.New("enumType is nil for " + name)
+ }
+
+ field, ok := val.GetFieldByName(name).(int32)
+ if !ok {
+ return "", errors.New("Enum integer value not found for " + name)
+ }
+
+ eValue := enumType.FindValueByNumber(field)
+ if eValue == nil {
+ return "", errors.New("Value not found for " + name)
+ }
+
+ return eValue.GetName(), nil
+}
+
+func SetEnumValue(msg *dynamic.Message, name string, value string) error {
+ fd := msg.FindFieldDescriptorByName(name)
+ if fd == nil {
+ return errors.New("fieldDescriptor is nil for " + name)
+ }
+
+ enumType := fd.GetEnumType()
+ if enumType == nil {
+ return errors.New("enumType is nil for " + name)
+ }
+
+ eValue := enumType.FindValueByName(value)
+ if eValue == nil {
+ return errors.New("Value not found for " + name)
+ }
+
+ msg.SetFieldByName(name, eValue.GetNumber())
+ return nil
+}
+
+func GetEnumString(msg *dynamic.Message, name string, value int32) (string, error) {
+ fd := msg.FindFieldDescriptorByName(name)
+ if fd == nil {
+ return "", errors.New("fieldDescriptor is nil for " + name)
+ }
+
+ enumType := fd.GetEnumType()
+ if enumType == nil {
+ return "", errors.New("enumType is nil for " + name)
+ }
+
+ eValue := enumType.FindValueByNumber(value)
+ if eValue == nil {
+ return "", errors.New("Value not found for " + name)
+ }
+ return eValue.GetName(), nil
}