Mark Bergsma has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/355795 )

Change subject: Add BGP.parseOpen unit test cases
......................................................................

Add BGP.parseOpen unit test cases

Change-Id: I3209fa9fe7b6ac7df18794e8dd8d8209c9419031
---
M pybal/bgp/test/test_bgp.py
1 file changed, 38 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/debs/pybal 
refs/changes/95/355795/1

diff --git a/pybal/bgp/test/test_bgp.py b/pybal/bgp/test/test_bgp.py
index f7e4b02..4b77ba4 100644
--- a/pybal/bgp/test/test_bgp.py
+++ b/pybal/bgp/test/test_bgp.py
@@ -9,7 +9,7 @@
 
 from .. import ip, bgp
 
-import unittest, mock
+import unittest, mock, struct
 
 from twisted.test import proto_helpers
 from twisted.python.failure import Failure
@@ -86,6 +86,10 @@
         self.assertEquals(self.msg.freeSpace(), bgp.MAX_LEN-len(self.msg))
 
 class BGPTestCase(unittest.TestCase):
+    MSG_DATA_OPEN = 
(b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' +
+                     
b'\x00+\x01\x04\xfcX\x00\xb4\x7f\x7f\x7f\x7f\x0e\x02\x0c\x01\x04' +
+                     b'\x00\x01\x00\x01\x01\x04\x00\x02\x00\x01')
+
     def setUp(self):
         self.factory = bgp.BGPPeering(myASN=64600, peerAddr='127.0.0.1')
         # FIXME: Should configure this in a better way in bgp.FSM
@@ -137,10 +141,7 @@
 
     def testSendOpen(self):
         self.proto.sendOpen()
-        self.assertEqual(self.tr.value(),
-            
b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' +
-            b'\x00+\x01\x04\xfcX\x00\xb4\x7f\x7f\x7f\x7f\x0e\x02\x0c\x01\x04' +
-            b'\x00\x01\x00\x01\x01\x04\x00\x02\x00\x01')
+        self.assertEqual(self.tr.value(), self.MSG_DATA_OPEN)
 
     def testSendUpdate(self):
         withdrawals = [ip.IPPrefix('192.168.99.0/24')]
@@ -165,3 +166,35 @@
         self.assertEqual(self.tr.value(),
             
b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' +
             b'\x00#\x03\x03\x0bArbitrary data')
+
+    def testParseOpen(self):
+        # parseOpen rejects our own bgpId
+        msgdata = bytearray(self.MSG_DATA_OPEN[bgp.HDR_LEN:])
+        msgdata[5:9] = [1,2,3,4]
+        bgpId = ip.IPv4IP('1.2.3.4').ipToInt()
+        struct.pack_into('!I', msgdata, 5, bgpId)
+        t = self.proto.parseOpen(str(msgdata))
+        self.assertEquals(t, (bgp.VERSION, self.factory.myASN, 
self.proto.fsm.holdTime, bgpId))
+
+        self.assertRaises(bgp.BadMessageLength, self.proto.parseOpen, 
str(msgdata[:3]))
+
+        with mock.patch.object(self.proto.fsm, 'openMessageError') as 
mock_method:
+            msgdata[0] = 66
+            self.proto.parseOpen(str(msgdata))
+            mock_method.assert_called_with(bgp.ERR_MSG_OPEN_UNSUP_VERSION, 
chr(bgp.VERSION))
+
+            mock_method.reset_mock()
+            msgdata[0] = bgp.VERSION
+            msgdata[1:3] = [0, 0]
+            self.proto.parseOpen(str(msgdata))
+            mock_method.assert_called_with(bgp.ERR_MSG_OPEN_BAD_PEER_AS)
+
+            mock_method.reset_mock()
+            msgdata[1:3] = [2, 3]
+            msgdata[5:9] = [0]*4
+            self.proto.parseOpen(str(msgdata))
+            mock_method.assert_called_with(bgp.ERR_MSG_OPEN_BAD_BGP_ID)
+
+            mock_method.reset_mock()
+            self.proto.parseOpen(self.MSG_DATA_OPEN[bgp.HDR_LEN:])
+            mock_method.assert_called_with(bgp.ERR_MSG_OPEN_BAD_BGP_ID)

-- 
To view, visit https://gerrit.wikimedia.org/r/355795
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3209fa9fe7b6ac7df18794e8dd8d8209c9419031
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/pybal
Gerrit-Branch: master
Gerrit-Owner: Mark Bergsma <m...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to