summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/vppapi_errors.go14
-rw-r--r--api/vppapi_errors_test.go23
2 files changed, 35 insertions, 2 deletions
diff --git a/api/vppapi_errors.go b/api/vppapi_errors.go
index c921e14..18ab87f 100644
--- a/api/vppapi_errors.go
+++ b/api/vppapi_errors.go
@@ -5,16 +5,26 @@ import (
"strconv"
)
+// RetvalToVPPApiError returns error for retval value.
+// Retval 0 returns nil error.
+func RetvalToVPPApiError(retval int32) error {
+ if retval == 0 {
+ return nil
+ }
+ return VPPApiError(retval)
+}
+
// VPPApiError represents VPP's vnet API error that is usually
// returned as Retval field in replies from VPP binary API.
type VPPApiError int32
func (e VPPApiError) Error() string {
+ errid := int64(e)
var errstr string
if s, ok := vppApiErrors[e]; ok {
- errstr = s
+ errstr = fmt.Sprintf("%s (%d)", s, errid)
} else {
- errstr = strconv.Itoa(int(e))
+ errstr = strconv.FormatInt(errid, 10)
}
return fmt.Sprintf("VPPApiError: %s", errstr)
}
diff --git a/api/vppapi_errors_test.go b/api/vppapi_errors_test.go
new file mode 100644
index 0000000..78e1fbf
--- /dev/null
+++ b/api/vppapi_errors_test.go
@@ -0,0 +1,23 @@
+package api
+
+import (
+ "testing"
+
+ . "github.com/onsi/gomega"
+)
+
+func TestUnspecified(t *testing.T) {
+ RegisterTestingT(t)
+
+ var err error = VPPApiError(-1)
+ errstr := err.Error()
+ Expect(errstr).Should(BeEquivalentTo("VPPApiError: Unspecified Error (-1)"))
+}
+
+func TestUnknown(t *testing.T) {
+ RegisterTestingT(t)
+
+ var err error = VPPApiError(-999)
+ errstr := err.Error()
+ Expect(errstr).Should(BeEquivalentTo("VPPApiError: -999"))
+}