Beispiel #1
0
 def test_simple(self):
     reader = OFReader("abcdefg")
     self.assertEquals(reader.read('2s')[0], "ab")
     self.assertEquals(reader.read('2s')[0], "cd")
     self.assertEquals(reader.read('3s')[0], "efg")
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.read('s')
Beispiel #2
0
 def test_empty(self):
     reader = OFReader("abcdefg")
     self.assertEquals(reader.is_empty(), False)
     reader.skip(6)
     self.assertEquals(reader.is_empty(), False)
     reader.skip(1)
     self.assertEquals(reader.is_empty(), True)
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.skip(1)
Beispiel #3
0
 def test_peek(self):
     reader = OFReader(b"abcdefg")
     self.assertEqual(reader.peek('2s')[0], b"ab")
     self.assertEqual(reader.peek('2s')[0], b"ab")
     self.assertEqual(reader.read('2s')[0], b"ab")
     self.assertEqual(reader.peek('2s')[0], b"cd")
     reader.skip(2)
     self.assertEqual(reader.read('3s')[0], b"efg")
     with self.assertRaisesRegex(loxi.ProtocolError, "Buffer too short"):
         reader.peek('s')
Beispiel #4
0
    def test_invalid_action_length(self):
        buf = '\x00' * 8
        with self.assertRaisesRegexp(ofp.ProtocolError, 'Buffer too short'):
            ofp.action.unpack_list(OFReader(buf))

        buf = '\x00\x00\x00\x04'
        with self.assertRaisesRegexp(ofp.ProtocolError, 'Buffer too short'):
            ofp.action.unpack_list(OFReader(buf))

        buf = '\x00\x00\x00\x10\x00\x00\x00\x00'
        with self.assertRaisesRegexp(ofp.ProtocolError, 'Buffer too short'):
            ofp.action.unpack_list(OFReader(buf))
Beispiel #5
0
 def test_skip_align(self):
     reader = OFReader("abcd" + "efgh" + "ijkl" + "mnop" + "qrst")
     reader.skip_align()
     self.assertEquals(reader.peek("2s")[0], "ab")
     self.assertEquals(reader.read("2s")[0], "ab")
     reader.skip_align()
     self.assertEquals(reader.peek("2s")[0], "ij")
     self.assertEquals(reader.read("2s")[0], "ij")
     child = reader.slice(10)
     self.assertEquals(child.read("2s")[0], "kl")
     child.skip_align()
     self.assertEquals(child.peek("2s")[0], "st")
Beispiel #6
0
 def test_skip_align(self):
     reader = OFReader("abcd" + "efgh" + "ijkl" + "mnop" + "qr")
     reader.skip_align()
     self.assertEquals(reader.peek('2s')[0], 'ab')
     self.assertEquals(reader.read('2s')[0], "ab")
     reader.skip_align()
     self.assertEquals(reader.peek('2s')[0], 'ij')
     self.assertEquals(reader.read('2s')[0], 'ij')
     child = reader.slice(8)
     self.assertEquals(child.peek('2s')[0], 'kl')
     child.skip_align()
     self.assertEquals(child.peek('2s')[0], 'qr')
Beispiel #7
0
 def test_peek(self):
     reader = OFReader("abcdefg")
     self.assertEquals(reader.peek("2s")[0], "ab")
     self.assertEquals(reader.peek("2s")[0], "ab")
     self.assertEquals(reader.read("2s")[0], "ab")
     self.assertEquals(reader.peek("2s")[0], "cd")
     reader.skip(2)
     self.assertEquals(reader.read("3s")[0], "efg")
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.peek("s")
Beispiel #8
0
 def test_exception_effect(self):
     reader = OFReader(b"abcdefg")
     with self.assertRaisesRegex(loxi.ProtocolError, "Buffer too short"):
         reader.skip(8)
     self.assertEqual(reader.is_empty(), False)
     reader.skip(7)
     self.assertEqual(reader.is_empty(), True)
Beispiel #9
0
    def test_invalid_action_length(self):
        buf = b'\x00' * 8
        with self.assertRaisesRegex(ofp.ProtocolError, 'Buffer too short'):
            loxi.generic_util.unpack_list(OFReader(buf),
                                          ofp.action.action.unpack)

        buf = b'\x00\x00\x00\x04'
        with self.assertRaisesRegex(ofp.ProtocolError, 'Buffer too short'):
            loxi.generic_util.unpack_list(OFReader(buf),
                                          ofp.action.action.unpack)

        buf = b'\x00\x00\x00\x10\x00\x00\x00\x00'
        with self.assertRaisesRegex(ofp.ProtocolError, 'Buffer too short'):
            loxi.generic_util.unpack_list(OFReader(buf),
                                          ofp.action.action.unpack)
Beispiel #10
0
 def test_match(self):
     match = ofp.match()
     self.assertEquals(match.wildcards, ofp.OFPFW_ALL)
     self.assertEquals(match.tcp_src, 0)
     buf = match.pack()
     match2 = ofp.match.unpack(OFReader(buf))
     self.assertEquals(match, match2)
Beispiel #11
0
 def test_list_hello_elem_unpack(self):
     buf = ''.join([
         '\x00\x01\x00\x04', # versionbitmap
         '\x00\x00\x00\x04', # unknown type
         '\x00\x01\x00\x04', # versionbitmap
     ])
     l = ofp.unpack_list_hello_elem(OFReader(buf))
     self.assertEquals(len(l), 2)
     self.assertTrue(isinstance(l[0], ofp.hello_elem_versionbitmap))
     self.assertTrue(isinstance(l[1], ofp.hello_elem_versionbitmap))
Beispiel #12
0
 def test_simple(self):
     reader = OFReader("abcdefg")
     self.assertEquals(reader.read('2s')[0], "ab")
     self.assertEquals(reader.read('2s')[0], "cd")
     self.assertEquals(reader.read('3s')[0], "efg")
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.read('s')
Beispiel #13
0
    def test_normal(self):
        expected = []
        bufs = []

        def add(action):
            expected.append(action)
            bufs.append(action.pack())

        add(ofp.action.output(port=1, max_len=0xffff))
        add(ofp.action.output(port=2, max_len=0xffff))
        add(ofp.action.output(port=ofp.OFPP_IN_PORT, max_len=0xffff))
        add(ofp.action.bsn_set_tunnel_dst(dst=0x12345678))
        add(ofp.action.nicira_dec_ttl())

        actions = ofp.action.unpack_list(OFReader(''.join(bufs)))
        self.assertEquals(actions, expected)
Beispiel #14
0
def test_serialization(obj, buf):
    packed = obj.pack()
    if packed != buf:
        a = format_binary(buf)
        b = format_binary(packed)
        raise AssertionError("Serialization of %s failed\nExpected:\n%s\nActual:\n%s\nDiff:\n%s" % \
                             (type(obj).__name__, a, b, diff(a, b)))
    unpacked = type(obj).unpack(OFReader(buf))
    if obj != unpacked:
        a = obj.show()
        b = unpacked.show()
        raise AssertionError("Deserialization of %s failed\nExpected:\n%s\nActual:\n%s\nDiff:\n%s" % \
            (type(obj).__name__, a, b, diff(a, b)))
    packed = unpacked.pack()
    if packed != buf:
        a = format_binary(buf)
        b = format_binary(packed)
        raise AssertionError("Reserialization of %s failed\nExpected:\n%s\nActual:\n%s\nDiff:\n%s" % \
                             (type(obj).__name__, a, b, diff(a, b)))
Beispiel #15
0
    def test_normal(self):
        expected = []
        bufs = []

        def add(action):
            expected.append(action)
            bufs.append(action.pack())

        add(ofp.action.output(port=1, max_len=0xffff))
        add(ofp.action.output(port=2, max_len=0xffff))
        add(ofp.action.output(port=ofp.OFPP_IN_PORT, max_len=0xffff))
        add(ofp.action.bsn_set_tunnel_dst(dst=0x12345678))
        add(ofp.action.nicira_dec_ttl())

        buf = functools.reduce(lambda x, y: x + y, bufs)

        actions = loxi.generic_util.unpack_list(OFReader(buf),
                                                ofp.action.action.unpack)
        self.assertEqual(actions, expected)
Beispiel #16
0
 def test_slice(self):
     reader = OFReader("abcdefg")
     reader.skip(2)
     self.assertEquals(reader.slice(3).read_all(), "cde")
     self.assertEquals(reader.slice(2).read_all(), "fg")
     self.assertEquals(reader.is_empty(), True)
Beispiel #17
0
 def test_read_all(self):
     reader = OFReader("abcdefg")
     reader.skip(2)
     self.assertEquals(reader.read_all(), "cdefg")
     self.assertEquals(reader.read_all(), "")
Beispiel #18
0
 def fn():
     obj = klass()
     if hasattr(obj, "xid"): obj.xid = 42
     buf = obj.pack()
     obj2 = klass.unpack(OFReader(buf))
     self.assertEqual(obj, obj2)
Beispiel #19
0
 def check_bitmap_512(self, value, data):
     self.assertEqual(data, ofp.util.pack_bitmap_512(set(value)))
     self.assertEqual(ofp.util.unpack_bitmap_512(OFReader(data)),
                      set(value))
Beispiel #20
0
 def test_skip_align(self):
     reader = OFReader(b"abcd" + b"efgh" + b"ijkl" + b"mnop" + b"qrst")
     reader.skip_align()
     self.assertEqual(reader.peek('2s')[0], b'ab')
     self.assertEqual(reader.read('2s')[0], b"ab")
     reader.skip_align()
     self.assertEqual(reader.peek('2s')[0], b'ij')
     self.assertEqual(reader.read('2s')[0], b'ij')
     child = reader.slice(10)
     self.assertEqual(child.read('2s')[0], b'kl')
     child.skip_align()
     self.assertEqual(child.peek('2s')[0], b'st')
Beispiel #21
0
 def test_echo_request_invalid_length(self):
     buf = "\x01\x02\x00\x07\x12\x34\x56"
     with self.assertRaisesRegexp(ofp.ProtocolError, "Buffer too short"):
         ofp.message.echo_request.unpack(OFReader(buf))
Beispiel #22
0
 def test_empty(self):
     reader = OFReader("")
     self.assertEquals(str(reader.read('')), "")
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.read_buf(1)
Beispiel #23
0
 def test_empty(self):
     reader = OFReader("abcdefg")
     self.assertEquals(reader.is_empty(), False)
     reader.skip(6)
     self.assertEquals(reader.is_empty(), False)
     reader.skip(1)
     self.assertEquals(reader.is_empty(), True)
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.skip(1)
Beispiel #24
0
 def test_skip(self):
     reader = OFReader("abcdefg")
     reader.skip(4)
     self.assertEquals(reader.read('s')[0], "e")
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.skip(3)
Beispiel #25
0
 def test_invalid_action_type(self):
     buf = '\xff\xfe\x00\x08\x00\x00\x00\x00'
     with self.assertRaisesRegexp(ofp.ProtocolError, 'unknown action type'):
         ofp.action.unpack_list(OFReader(buf))
Beispiel #26
0
 def test_slice(self):
     reader = OFReader(b"abcdefg")
     reader.skip(2)
     self.assertEqual(reader.slice(3).read_all(), b"cde")
     self.assertEqual(reader.slice(2).read_all(), b"fg")
     self.assertEqual(reader.is_empty(), True)
Beispiel #27
0
 def test_skip_align(self):
     reader = OFReader("abcd" + "efgh" + "ijkl" + "mnop" + "qr")
     reader.skip_align()
     self.assertEquals(reader.peek('2s')[0], 'ab')
     self.assertEquals(reader.read('2s')[0], "ab")
     reader.skip_align()
     self.assertEquals(reader.peek('2s')[0], 'ij')
     self.assertEquals(reader.read('2s')[0], 'ij')
     child = reader.slice(8)
     self.assertEquals(child.peek('2s')[0], 'kl')
     child.skip_align()
     self.assertEquals(child.peek('2s')[0], 'qr')
Beispiel #28
0
 def test_empty(self):
     reader = OFReader("")
     self.assertEquals(str(reader.read('')), "")
     with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"):
         reader.read_buf(1)
Beispiel #29
0
 def test_empty_list(self):
     self.assertEquals(
         loxi.generic_util.unpack_list(OFReader(''),
                                       ofp.action.action.unpack), [])
Beispiel #30
0
 def test_unknown_action_type(self):
     buf = '\xff\xfe\x00\x08\x00\x00\x00\x00'
     result = loxi.generic_util.unpack_list(OFReader(buf),
                                            ofp.action.action.unpack)
     self.assertEquals(result, [ofp.action.action(type=0xfffe)])
Beispiel #31
0
 def test_skip(self):
     reader = OFReader(b"abcdefg")
     reader.skip(4)
     self.assertEqual(reader.read('s')[0], b"e")
     with self.assertRaisesRegex(loxi.ProtocolError, "Buffer too short"):
         reader.skip(3)
Beispiel #32
0
 def test_read_all(self):
     reader = OFReader(b"abcdefg")
     reader.skip(2)
     self.assertEqual(reader.read_all(), b"cdefg")
     self.assertEqual(reader.read_all(), b"")
Beispiel #33
0
 def test_empty_list(self):
     self.assertEquals(ofp.action.unpack_list(OFReader('')), [])