From d993e430ef0d71c88234e216eb74117afa73bf3b Mon Sep 17 00:00:00 2001 From: IWASE Yusuke Date: Fri, 25 Nov 2016 17:02:56 +0900 Subject: [PATCH] test_mrtlib: Add unit tests for MRT paser Signed-off-by: IWASE Yusuke Signed-off-by: FUJITA Tomonori --- .../mrt/rib.20161101.0000_pick.bz2 | Bin 0 -> 271 bytes .../packet_data/mrt/updates.20161101.0000.bz2 | Bin 0 -> 20939 bytes ryu/tests/unit/lib/test_mrtlib.py | 765 ++++++++++++++++++ 3 files changed, 765 insertions(+) create mode 100644 ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 create mode 100644 ryu/tests/packet_data/mrt/updates.20161101.0000.bz2 create mode 100644 ryu/tests/unit/lib/test_mrtlib.py diff --git a/ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 b/ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..0e02ef2d3f35da9bb1656939530f293786a8e692 GIT binary patch literal 271 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