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')
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)
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')
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))
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")
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')
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")
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)
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)
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)
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))
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)
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)))
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)
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)
def test_read_all(self): reader = OFReader("abcdefg") reader.skip(2) self.assertEquals(reader.read_all(), "cdefg") self.assertEquals(reader.read_all(), "")
def fn(): obj = klass() if hasattr(obj, "xid"): obj.xid = 42 buf = obj.pack() obj2 = klass.unpack(OFReader(buf)) self.assertEqual(obj, obj2)
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))
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')
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))
def test_empty(self): reader = OFReader("") self.assertEquals(str(reader.read('')), "") with self.assertRaisesRegexp(loxi.ProtocolError, "Buffer too short"): reader.read_buf(1)
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)
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))
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)
def test_empty_list(self): self.assertEquals( loxi.generic_util.unpack_list(OFReader(''), ofp.action.action.unpack), [])
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)])
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)
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"")
def test_empty_list(self): self.assertEquals(ofp.action.unpack_list(OFReader('')), [])