Make BGPError operate on Uint8 17/85117/8
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 15 Oct 2019 10:06:48 +0000 (12:06 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 15 Oct 2019 13:58:21 +0000 (15:58 +0200)
Error codes are unsigned bytes, use the proper encapsulation.

Change-Id: I8706fdcd3b87ac45609a08ce6acdf634ddbe90b4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BGPError.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/FSMTest.java

index 0638df957b44f73e1ef9b9ebcdf828049c8cf790..278518d27db7b5c9a8266665d85854dd187fcb0d 100644 (file)
@@ -8,11 +8,14 @@
 package org.opendaylight.protocol.bgp.parser;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import java.io.Serializable;
 import java.util.Arrays;
+import java.util.Objects;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
 /**
@@ -25,135 +28,135 @@ public enum BGPError {
     /**
      * Unspecific header error. 1/0, <a href="https://www.rfc-editor.org/errata_search.php?eid=4493">Errata 4493</a>.
      */
-    UNSPECIFIC_HEADER_ERROR((short) 1, (short) 0),
+    UNSPECIFIC_HEADER_ERROR(1, 0),
         /**
      * Connection Not Synchronized. 1/1
      */
-    CONNECTION_NOT_SYNC((short) 1, (short) 1),
+    CONNECTION_NOT_SYNC(1, 1),
     /**
      * Bad Message Length. 1/2
      */
-    BAD_MSG_LENGTH((short) 1, (short) 2),
+    BAD_MSG_LENGTH(1, 2),
     /**
      * Bad Message Type. 1/3
      */
-    BAD_MSG_TYPE((short) 1, (short) 3),
+    BAD_MSG_TYPE(1, 3),
     /**
      * Unspecific Open Message error, <a href="https://www.rfc-editor.org/errata_search.php?eid=4493">Errata 4493</a>.
      */
-    UNSPECIFIC_OPEN_ERROR((short) 2, (short) 0),
+    UNSPECIFIC_OPEN_ERROR(2, 0),
     /**
      * Unsupported Version Number. 2/1
      */
-    VERSION_NOT_SUPPORTED((short) 2, (short) 1),
+    VERSION_NOT_SUPPORTED(2, 1),
     /**
      * Bad Peer AS. 2/2
      */
-    BAD_PEER_AS((short) 2, (short) 2),
+    BAD_PEER_AS(2, 2),
     /**
      * Bad BGP Identifier. 2/3
      */
-    BAD_BGP_ID((short) 2, (short) 3),
+    BAD_BGP_ID(2, 3),
     /**
      * Unsupported Optional Parameter. 2/4
      */
-    OPT_PARAM_NOT_SUPPORTED((short) 2, (short) 4),
+    OPT_PARAM_NOT_SUPPORTED(2, 4),
     /**
      * Unacceptable Hold Time. 2/6
      */
-    HOLD_TIME_NOT_ACC((short) 2, (short) 6),
+    HOLD_TIME_NOT_ACC(2, 6),
     /**
      * Unspecific UPDATE error. 3/0, <a href="https://www.rfc-editor.org/errata_search.php?eid=4493">Errata 4493</a>.
      */
-    UNSPECIFIC_UPDATE_ERROR((short) 3, (short) 0),
+    UNSPECIFIC_UPDATE_ERROR(3, 0),
     /**
      * Malformed Attribute List. 3/1
      */
-    MALFORMED_ATTR_LIST((short) 3, (short) 1),
+    MALFORMED_ATTR_LIST(3, 1),
     /**
      * Unrecognized Well-known Attribute. 3/2
      */
-    WELL_KNOWN_ATTR_NOT_RECOGNIZED((short) 3, (short) 2),
+    WELL_KNOWN_ATTR_NOT_RECOGNIZED(3, 2),
     /**
      * Missing Well-known Attribute. 3/3
      */
-    WELL_KNOWN_ATTR_MISSING((short) 3, (short) 3),
+    WELL_KNOWN_ATTR_MISSING(3, 3),
     /**
      * Attribute Flags Error. 3/4
      */
-    ATTR_FLAGS_MISSING((short) 3, (short) 4),
+    ATTR_FLAGS_MISSING(3, 4),
     /**
      * Attribute Length Error. 3/5
      */
-    ATTR_LENGTH_ERROR((short) 3, (short) 5),
+    ATTR_LENGTH_ERROR(3, 5),
     /**
      * Invalid ORIGIN Attribute. 3/6
      */
-    ORIGIN_ATTR_NOT_VALID((short) 3, (short) 6),
+    ORIGIN_ATTR_NOT_VALID(3, 6),
     /**
      * Invalid NEXT_HOP Attribute. 3/8
      */
-    NEXT_HOP_NOT_VALID((short) 3, (short) 8),
+    NEXT_HOP_NOT_VALID(3, 8),
     /**
      * Optional Attribute Error. 3/9
      */
-    OPT_ATTR_ERROR((short) 3, (short) 9),
+    OPT_ATTR_ERROR(3, 9),
     /**
      * Invalid Network Field. 3/10
      */
-    NETWORK_NOT_VALID((short) 3, (short) 10),
+    NETWORK_NOT_VALID(3, 10),
     /**
      * Malformed AS_PATH. 3/11
      */
-    AS_PATH_MALFORMED((short) 3, (short) 11),
+    AS_PATH_MALFORMED(3, 11),
     /**
      * Hold Timer Expired. 4/0
      */
-    HOLD_TIMER_EXPIRED((short) 4, (short) 0),
+    HOLD_TIMER_EXPIRED(4, 0),
     /**
      * Finite State Machine Error. 5/0
      */
-    FSM_ERROR((short) 5, (short) 0),
+    FSM_ERROR(5, 0),
     /**
      * Cease. 6/0
      */
-    CEASE((short) 6, (short) 0),
+    CEASE(6, 0),
     /**
      * Maximum Number of Prefixes Reached. 6/1
      */
-    MAX_NUMBER_OF_PREFIXES_REACHED((short) 6, (short) 1),
+    MAX_NUMBER_OF_PREFIXES_REACHED(6, 1),
     /**
      * Administrative Shutdown. 6/2
      */
-    ADMINISTRATIVE_SHUTDOWN((short) 6, (short) 2),
+    ADMINISTRATIVE_SHUTDOWN(6, 2),
     /**
      * Peer De-configured. 6/3
      */
-    PEER_DECONFIGURED((short) 6, (short) 3),
+    PEER_DECONFIGURED(6, 3),
     /**
      * Administrative Reset. 6/4
      */
-    ADMINISTRATIVE_RESTART((short) 6, (short) 4),
+    ADMINISTRATIVE_RESTART(6, 4),
     /**
      * Connection Rejected. 6/5
      */
-    CONNECTION_REJECTED((short) 6, (short) 5),
+    CONNECTION_REJECTED(6, 5),
     /**
      * Other Configuration Change. 6/6
      */
-    OTHER_CONFIGURATION_CHANGE((short) 6, (short) 6),
+    OTHER_CONFIGURATION_CHANGE(6, 6),
     /**
      * Connection Collision Resolution. 6/7
      */
-    CONNECTION_COLLISION_RESOLUTION((short) 6, (short) 7),
+    CONNECTION_COLLISION_RESOLUTION(6, 7),
     /**
      * Out of Resources. 6/8
      */
-    OUT_OF_RESOURCES((short) 6, (short) 8),
+    OUT_OF_RESOURCES(6, 8),
     /**
      * Unsupported Capability. 2/7
      */
-    UNSUPPORTED_CAPABILITY((short) 2, (short) 7);
+    UNSUPPORTED_CAPABILITY(2, 7);
 
     public static final String MANDATORY_ATTR_MISSING_MSG = "Well known mandatory attribute missing: ";
 
@@ -162,23 +165,21 @@ public enum BGPError {
 
     private final BGPErrorIdentifier errorId;
 
-    BGPError(final short code, final short subcode) {
-        this.errorId = new BGPErrorIdentifier(code, subcode);
+    BGPError(final int code, final int subcode) {
+        this.errorId = new BGPErrorIdentifier(Uint8.valueOf(code), Uint8.valueOf(subcode));
     }
 
     public static BGPError forValue(final Uint8 code, final Uint8 subcode) {
-        final BGPError e = VALUE_MAP.get(new BGPErrorIdentifier(code.toJava(), subcode.toJava()));
+        final BGPError e = VALUE_MAP.get(new BGPErrorIdentifier(code, subcode));
         checkArgument(e != null, "BGP Error code %s and subcode %s not recognized.", code, subcode);
         return e;
     }
 
-    // FIXME: Use Uint8 for this
-    public short getCode() {
+    public @NonNull Uint8 getCode() {
         return this.errorId.code;
     }
 
-    // FIXME: Use Uint8 for this
-    public short getSubcode() {
+    public @NonNull Uint8 getSubcode() {
         return this.errorId.subcode;
     }
 
@@ -189,25 +190,20 @@ public enum BGPError {
     /**
      * Caret for combination of Error-type and Error-value.
      */
-    private static class BGPErrorIdentifier implements Serializable {
+    private static final class BGPErrorIdentifier implements Serializable {
         private static final long serialVersionUID = 5722575354944165734L;
 
-        // FIXME: Use Uint8 for these
-        final short code;
-        final short subcode;
+        final @NonNull Uint8 code;
+        final @NonNull Uint8 subcode;
 
-        BGPErrorIdentifier(final short code, final short subcode) {
-            this.code = code;
-            this.subcode = subcode;
+        BGPErrorIdentifier(final Uint8 code, final Uint8 subcode) {
+            this.code = requireNonNull(code);
+            this.subcode = requireNonNull(subcode);
         }
 
         @Override
         public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + this.code;
-            result = prime * result + this.subcode;
-            return result;
+            return Objects.hash(code, subcode);
         }
 
         @Override
@@ -215,16 +211,16 @@ public enum BGPError {
             if (this == obj) {
                 return true;
             }
-            if (obj == null || this.getClass() != obj.getClass()) {
+            if (!(obj instanceof BGPErrorIdentifier)) {
                 return false;
             }
             final BGPErrorIdentifier other = (BGPErrorIdentifier) obj;
-            return this.code == other.code && this.subcode == other.subcode;
+            return code.equals(other.code) && subcode.equals(other.subcode);
         }
 
         @Override
         public String toString() {
-            return "type " + this.code + " value " + this.subcode;
+            return "type " + code + " value " + subcode;
         }
     }
 }
index 7139e77aeba5ed0c63ef6672fe9f24ae457463c2..56b13a369040be7cef815971f6c49aca32519e6f 100644 (file)
@@ -181,8 +181,8 @@ public class BGPSessionImplTest {
         assertEquals(1, this.receivedMsgs.size());
         assertTrue(this.receivedMsgs.get(0) instanceof Notify);
         final Notify error = (Notify) this.receivedMsgs.get(0);
-        assertEquals(BGPError.CEASE.getCode(), error.getErrorCode().shortValue());
-        assertEquals(BGPError.CEASE.getSubcode(), error.getErrorSubcode().shortValue());
+        assertEquals(BGPError.CEASE.getCode(), error.getErrorCode());
+        assertEquals(BGPError.CEASE.getSubcode(), error.getErrorSubcode());
         verify(this.speakerListener).close();
     }
 
@@ -193,8 +193,8 @@ public class BGPSessionImplTest {
         assertEquals(1, this.receivedMsgs.size());
         assertTrue(this.receivedMsgs.get(0) instanceof Notify);
         final Notify error = (Notify) this.receivedMsgs.get(0);
-        assertEquals(BGPError.FSM_ERROR.getCode(), error.getErrorCode().shortValue());
-        assertEquals(BGPError.FSM_ERROR.getSubcode(), error.getErrorSubcode().shortValue());
+        assertEquals(BGPError.FSM_ERROR.getCode(), error.getErrorCode());
+        assertEquals(BGPError.FSM_ERROR.getSubcode(), error.getErrorSubcode());
         verify(this.speakerListener).close();
     }
 
@@ -221,8 +221,8 @@ public class BGPSessionImplTest {
         assertEquals(3, this.receivedMsgs.size());
         assertTrue(this.receivedMsgs.get(2) instanceof Notify);
         final Notify error = (Notify) this.receivedMsgs.get(2);
-        assertEquals(BGPError.HOLD_TIMER_EXPIRED.getCode(), error.getErrorCode().shortValue());
-        assertEquals(BGPError.HOLD_TIMER_EXPIRED.getSubcode(), error.getErrorSubcode().shortValue());
+        assertEquals(BGPError.HOLD_TIMER_EXPIRED.getCode(), error.getErrorCode());
+        assertEquals(BGPError.HOLD_TIMER_EXPIRED.getSubcode(), error.getErrorSubcode());
         verify(this.speakerListener).close();
     }
 
index 30ef4fb7653552a9c5c7798471ded87b6abe5fd8..d67c38a5b00e56741d098880e0fd35c0934a83a5 100644 (file)
@@ -287,8 +287,8 @@ public class FSMTest {
         assertEquals(3, this.receivedMsgs.size());
         assertTrue(this.receivedMsgs.get(2) instanceof Notify);
         final Notification m = this.receivedMsgs.get(2);
-        assertEquals(BGPError.FSM_ERROR.getCode(), ((Notify) m).getErrorCode().shortValue());
-        assertEquals(BGPError.FSM_ERROR.getSubcode(), ((Notify) m).getErrorSubcode().shortValue());
+        assertEquals(BGPError.FSM_ERROR.getCode(), ((Notify) m).getErrorCode());
+        assertEquals(BGPError.FSM_ERROR.getSubcode(), ((Notify) m).getErrorSubcode());
     }
 
     @Test