diff --git a/py_gen/tests/of10.py b/py_gen/tests/of10.py
index c91c7b3..e593e0f 100644
--- a/py_gen/tests/of10.py
+++ b/py_gen/tests/of10.py
@@ -158,7 +158,6 @@
     def test_echo_request_equality(self):
         msg = ofp.message.echo_request(xid=0x12345678, data="abc")
         msg2 = ofp.message.echo_request(xid=0x12345678, data="abc")
-        #msg2 = ofp.message.echo_request.unpack(msg.pack())
         self.assertEquals(msg, msg2)
 
         msg2.xid = 1
@@ -169,468 +168,10 @@
         self.assertNotEquals(msg, msg2)
         msg2.data = msg.data
 
-    def test_flow_add(self):
-        match = ofp.match()
-        msg = ofp.message.flow_add(xid=1,
-                                   match=match,
-                                   cookie=1,
-                                   idle_timeout=5,
-                                   flags=ofp.OFPFF_CHECK_OVERLAP,
-                                   actions=[
-                                       ofp.action.output(port=1),
-                                       ofp.action.output(port=2),
-                                       ofp.action.output(port=ofp.OFPP_CONTROLLER,
-                                                         max_len=1024)])
-        buf = msg.pack()
-        msg2 = ofp.message.flow_add.unpack(buf)
-        self.assertEquals(msg, msg2)
-
-    def test_port_mod_pack(self):
-        msg = ofp.message.port_mod(xid=2,
-                                   port_no=ofp.OFPP_CONTROLLER,
-                                   hw_addr=[1,2,3,4,5,6],
-                                   config=0x90ABCDEF,
-                                   mask=0xFF11FF11,
-                                   advertise=0xCAFE6789)
-        expected = "\x01\x0f\x00\x20\x00\x00\x00\x02\xff\xfd\x01\x02\x03\x04\x05\x06\x90\xab\xcd\xef\xff\x11\xff\x11\xca\xfe\x67\x89\x00\x00\x00\x00"
-        self.assertEquals(expected, msg.pack())
-
-    def test_desc_stats_reply_pack(self):
-        msg = ofp.message.desc_stats_reply(xid=3,
-                                           flags=ofp.OFPSF_REPLY_MORE,
-                                           mfr_desc="The Indigo-2 Community",
-                                           hw_desc="Unknown server",
-                                           sw_desc="Indigo-2 LRI pre-release",
-                                           serial_num="11235813213455",
-                                           dp_desc="Indigo-2 LRI forwarding module")
-        expected = ''.join([
-            '\x01', '\x11', # version/type
-            '\x04\x2c', # length
-            '\x00\x00\x00\x03', # xid
-            '\x00\x00', # stats_type
-            '\x00\x01', # flags
-            'The Indigo-2 Community'.ljust(256, '\x00'), # mfr_desc
-            'Unknown server'.ljust(256, '\x00'), # hw_desc
-            'Indigo-2 LRI pre-release'.ljust(256, '\x00'), # sw_desc
-            '11235813213455'.ljust(32, '\x00'), # serial_num
-            'Indigo-2 LRI forwarding module'.ljust(256, '\x00'), # dp_desc
-        ])
-        self.assertEquals(expected, msg.pack())
-
-    def test_desc_stats_reply_unpack(self):
-        buf = ''.join([
-            '\x01', '\x11', # version/type
-            '\x04\x2c', # length
-            '\x00\x00\x00\x03', # xid
-            '\x00\x00', # stats_type
-            '\x00\x01', # flags
-            'The Indigo-2 Community'.ljust(256, '\x00'), # mfr_desc
-            'Unknown server'.ljust(256, '\x00'), # hw_desc
-            'Indigo-2 LRI pre-release'.ljust(256, '\x00'), # sw_desc
-            '11235813213455'.ljust(32, '\x00'), # serial_num
-            'Indigo-2 LRI forwarding module'.ljust(256, '\x00'), # dp_desc
-        ])
-        msg = ofp.message.desc_stats_reply.unpack(buf)
-        self.assertEquals('Indigo-2 LRI forwarding module', msg.dp_desc)
-        self.assertEquals('11235813213455', msg.serial_num)
-        self.assertEquals(ofp.OFPST_DESC, msg.stats_type)
-        self.assertEquals(ofp.OFPSF_REPLY_MORE, msg.flags)
-
-    def test_port_status_pack(self):
-        desc = ofp.port_desc(port_no=ofp.OFPP_CONTROLLER,
-                             hw_addr=[1,2,3,4,5,6],
-                             name="foo",
-                             config=ofp.OFPPC_NO_FLOOD,
-                             state=ofp.OFPPS_STP_FORWARD,
-                             curr=ofp.OFPPF_10MB_HD,
-                             advertised=ofp.OFPPF_1GB_FD,
-                             supported=ofp.OFPPF_AUTONEG,
-                             peer=ofp.OFPPF_PAUSE_ASYM)
-
-        msg = ofp.message.port_status(xid=4,
-                                      reason=ofp.OFPPR_DELETE,
-                                      desc=desc)
-        expected = ''.join([
-            '\x01', '\x0c', # version/type
-            '\x00\x40', # length
-            '\x00\x00\x00\x04', # xid
-            '\x01', # reason
-            '\x00\x00\x00\x00\x00\x00\x00' # pad
-            '\xff\xfd', # desc.port_no
-            '\x01\x02\x03\x04\x05\x06', # desc.hw_addr
-            'foo'.ljust(16, '\x00'), # desc.name
-            '\x00\x00\x00\x10', # desc.config
-            '\x00\x00\x02\x00', # desc.state
-            '\x00\x00\x00\x01', # desc.curr
-            '\x00\x00\x00\x20', # desc.advertised
-            '\x00\x00\x02\x00', # desc.supported
-            '\x00\x00\x08\x00', # desc.peer
-        ])
-        self.assertEquals(expected, msg.pack())
-
-    def test_port_status_unpack(self):
-        buf = ''.join([
-            '\x01', '\x0c', # version/type
-            '\x00\x40', # length
-            '\x00\x00\x00\x04', # xid
-            '\x01', # reason
-            '\x00\x00\x00\x00\x00\x00\x00' # pad
-            '\xff\xfd', # desc.port_no
-            '\x01\x02\x03\x04\x05\x06', # desc.hw_addr
-            'foo'.ljust(16, '\x00'), # desc.name
-            '\x00\x00\x00\x10', # desc.config
-            '\x00\x00\x02\x00', # desc.state
-            '\x00\x00\x00\x01', # desc.curr
-            '\x00\x00\x00\x20', # desc.advertised
-            '\x00\x00\x02\x00', # desc.supported
-            '\x00\x00\x08\x00', # desc.peer
-        ])
-        msg = ofp.message.port_status.unpack(buf)
-        self.assertEquals('foo', msg.desc.name)
-        self.assertEquals(ofp.OFPPF_PAUSE_ASYM, msg.desc.peer)
-
-    def test_port_stats_reply_pack(self):
-        msg = ofp.message.port_stats_reply(xid=5, flags=0, entries=[
-            ofp.port_stats_entry(port_no=1, rx_packets=56, collisions=5),
-            ofp.port_stats_entry(port_no=ofp.OFPP_LOCAL, rx_packets=1, collisions=1)])
-        expected = ''.join([
-            '\x01', '\x11', # version/type
-            '\x00\xdc', # length
-            '\x00\x00\x00\x05', # xid
-            '\x00\x04', # stats_type
-            '\x00\x00', # flags
-            '\x00\x01', # entries[0].port_no
-            '\x00\x00\x00\x00\x00\x00' # entries[0].pad
-            '\x00\x00\x00\x00\x00\x00\x00\x38', # entries[0].rx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_frame_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_over_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_crc_err
-            '\x00\x00\x00\x00\x00\x00\x00\x05', # entries[0].collisions
-            '\xff\xfe', # entries[1].port_no
-            '\x00\x00\x00\x00\x00\x00' # entries[1].pad
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # entries[1].rx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_frame_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_over_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_crc_err
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # entries[1].collisions
-        ])
-        self.assertEquals(expected, msg.pack())
-
-    def test_port_stats_reply_unpack(self):
-        buf = ''.join([
-            '\x01', '\x11', # version/type
-            '\x00\xdc', # length
-            '\x00\x00\x00\x05', # xid
-            '\x00\x04', # stats_type
-            '\x00\x00', # flags
-            '\x00\x01', # entries[0].port_no
-            '\x00\x00\x00\x00\x00\x00' # entries[0].pad
-            '\x00\x00\x00\x00\x00\x00\x00\x38', # entries[0].rx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].tx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_frame_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_over_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[0].rx_crc_err
-            '\x00\x00\x00\x00\x00\x00\x00\x05', # entries[0].collisions
-            '\xff\xfe', # entries[1].port_no
-            '\x00\x00\x00\x00\x00\x00' # entries[1].pad
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # entries[1].rx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_packets
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_bytes
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_dropped
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].tx_errors
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_frame_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_over_err
-            '\x00\x00\x00\x00\x00\x00\x00\x00', # entries[1].rx_crc_err
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # entries[1].collisions
-        ])
-        msg = ofp.message.port_stats_reply.unpack(buf)
-        self.assertEquals(ofp.OFPST_PORT, msg.stats_type)
-        self.assertEquals(2, len(msg.entries))
-
-    sample_flow_stats_reply_buf = ''.join([
-        '\x01', '\x11', # version/type
-        '\x00\xe4', # length
-        '\x00\x00\x00\x06', # xid
-        '\x00\x01', # stats_type
-        '\x00\x00', # flags
-        '\x00\x68', # entries[0].length
-        '\x03', # entries[0].table_id
-        '\x00', # entries[0].pad
-        '\x00\x3f\xff\xff', # entries[0].match.wildcards
-        '\x00' * 36, # remaining match fields
-        '\x00\x00\x00\x01', # entries[0].duration_sec
-        '\x00\x00\x00\x02', # entries[0].duration_nsec
-        '\x00\x64', # entries[0].priority
-        '\x00\x05', # entries[0].idle_timeout
-        '\x00\x0a', # entries[0].hard_timeout
-        '\x00' * 6, # entries[0].pad2
-        '\x01\x23\x45\x67\x89\xab\xcd\xef', # entries[0].cookie
-        '\x00\x00\x00\x00\x00\x00\x00\x0a', # entries[0].packet_count
-        '\x00\x00\x00\x00\x00\x00\x03\xe8', # entries[0].byte_count
-        '\x00\x00', # entries[0].actions[0].type
-        '\x00\x08', # entries[0].actions[0].len
-        '\x00\x01', # entries[0].actions[0].port
-        '\x00\x00', # entries[0].actions[0].max_len
-        '\x00\x00', # entries[0].actions[1].type
-        '\x00\x08', # entries[0].actions[1].len
-        '\x00\x02', # entries[0].actions[1].port
-        '\x00\x00', # entries[0].actions[1].max_len
-        '\x00\x70', # entries[1].length
-        '\x04', # entries[1].table_id
-        '\x00', # entries[1].pad
-        '\x00\x3f\xff\xff', # entries[1].match.wildcards
-        '\x00' * 36, # remaining match fields
-        '\x00\x00\x00\x01', # entries[1].duration_sec
-        '\x00\x00\x00\x02', # entries[1].duration_nsec
-        '\x00\x64', # entries[1].priority
-        '\x00\x05', # entries[1].idle_timeout
-        '\x00\x0a', # entries[1].hard_timeout
-        '\x00' * 6, # entries[1].pad2
-        '\x01\x23\x45\x67\x89\xab\xcd\xef', # entries[1].cookie
-        '\x00\x00\x00\x00\x00\x00\x00\x0a', # entries[1].packet_count
-        '\x00\x00\x00\x00\x00\x00\x03\xe8', # entries[1].byte_count
-        '\x00\x00', # entries[1].actions[0].type
-        '\x00\x08', # entries[1].actions[0].len
-        '\x00\x01', # entries[1].actions[0].port
-        '\x00\x00', # entries[1].actions[0].max_len
-        '\x00\x00', # entries[1].actions[1].type
-        '\x00\x08', # entries[1].actions[1].len
-        '\x00\x02', # entries[1].actions[1].port
-        '\x00\x00', # entries[1].actions[1].max_len
-        '\x00\x00', # entries[1].actions[2].type
-        '\x00\x08', # entries[1].actions[2].len
-        '\x00\x03', # entries[1].actions[2].port
-        '\x00\x00', # entries[1].actions[2].max_len
-    ])
-
-    def test_flow_stats_reply_pack(self):
-        msg = ofp.message.flow_stats_reply(xid=6, flags=0, entries=[
-            ofp.flow_stats_entry(table_id=3,
-                                 match=ofp.match(),
-                                 duration_sec=1,
-                                 duration_nsec=2,
-                                 priority=100,
-                                 idle_timeout=5,
-                                 hard_timeout=10,
-                                 cookie=0x0123456789abcdef,
-                                 packet_count=10,
-                                 byte_count=1000,
-                                 actions=[ofp.action.output(port=1),
-                                          ofp.action.output(port=2)]),
-            ofp.flow_stats_entry(table_id=4,
-                                 match=ofp.match(),
-                                 duration_sec=1,
-                                 duration_nsec=2,
-                                 priority=100,
-                                 idle_timeout=5,
-                                 hard_timeout=10,
-                                 cookie=0x0123456789abcdef,
-                                 packet_count=10,
-                                 byte_count=1000,
-                                 actions=[ofp.action.output(port=1),
-                                          ofp.action.output(port=2),
-                                          ofp.action.output(port=3)])])
-        self.assertEquals(self.sample_flow_stats_reply_buf, msg.pack())
-
-    def test_flow_stats_reply_unpack(self):
-        msg = ofp.message.flow_stats_reply.unpack(self.sample_flow_stats_reply_buf)
-        self.assertEquals(ofp.OFPST_FLOW, msg.stats_type)
-        self.assertEquals(2, len(msg.entries))
-        self.assertEquals(2, len(msg.entries[0].actions))
-        self.assertEquals(3, len(msg.entries[1].actions))
-
-    def test_flow_add_show(self):
-        expected = """\
-flow_add {
-  xid = None,
-  match = match_v1 {
-    wildcards = OFPFW_DL_SRC|OFPFW_DL_DST,
-    in_port = 3,
-    eth_src = 01:23:45:67:89:ab,
-    eth_dst = cd:ef:01:23:45:67,
-    vlan_vid = 0x0,
-    vlan_pcp = 0x0,
-    eth_type = 0x0,
-    ip_dscp = 0x0,
-    ip_proto = 0x0,
-    ipv4_src = 192.168.3.127,
-    ipv4_dst = 255.255.255.255,
-    tcp_src = 0x0,
-    tcp_dst = 0x0
-  },
-  cookie = 0x0,
-  idle_timeout = 0x0,
-  hard_timeout = 0x0,
-  priority = 0x0,
-  buffer_id = 0x0,
-  out_port = 0,
-  flags = 0x0,
-  actions = [
-    output { port = OFPP_FLOOD, max_len = 0x0 },
-    nicira_dec_ttl {  },
-    bsn_set_tunnel_dst { dst = 0x0 }
-  ]
-}"""
-        msg = ofp.message.flow_add(
-            match=ofp.match(
-                wildcards=ofp.OFPFW_DL_SRC|ofp.OFPFW_DL_DST,
-                in_port=3,
-                ipv4_src=0xc0a8037f,
-                ipv4_dst=0xffffffff,
-                eth_src=[0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
-                eth_dst=[0xcd, 0xef, 0x01, 0x23, 0x45, 0x67]),
-            actions=[
-                ofp.action.output(port=ofp.OFPP_FLOOD),
-                ofp.action.nicira_dec_ttl(),
-                ofp.action.bsn_set_tunnel_dst()])
-        self.assertEquals(msg.show(), expected)
-
-    sample_packet_out_buf = ''.join([
-        '\x01', '\x0d', # version/type
-        '\x00\x23', # length
-        '\x12\x34\x56\x78', # xid
-        '\xab\xcd\xef\x01', # buffer_id
-        '\xff\xfe', # in_port
-        '\x00\x10', # actions_len
-        '\x00\x00', # actions[0].type
-        '\x00\x08', # actions[0].len
-        '\x00\x01', # actions[0].port
-        '\x00\x00', # actions[0].max_len
-        '\x00\x00', # actions[1].type
-        '\x00\x08', # actions[1].len
-        '\x00\x02', # actions[1].port
-        '\x00\x00', # actions[1].max_len
-        'abc' # data
-    ])
-
-    def test_packet_out_pack(self):
-        msg = ofp.message.packet_out(
-            xid=0x12345678,
-            buffer_id=0xabcdef01,
-            in_port=ofp.OFPP_LOCAL,
-            actions=[
-                ofp.action.output(port=1),
-                ofp.action.output(port=2)],
-            data='abc')
-        self.assertEquals(self.sample_packet_out_buf, msg.pack())
-
-    def test_packet_out_unpack(self):
-        msg = ofp.message.packet_out.unpack(self.sample_packet_out_buf)
-        self.assertEquals(0x12345678, msg.xid)
-        self.assertEquals(0xabcdef01, msg.buffer_id)
-        self.assertEquals(ofp.OFPP_LOCAL, msg.in_port)
-        self.assertEquals(2, len(msg.actions))
-        self.assertEquals(1, msg.actions[0].port)
-        self.assertEquals(2, msg.actions[1].port)
-        self.assertEquals('abc', msg.data)
-
-    sample_packet_in_buf = ''.join([
-        '\x01', '\x0a', # version/type
-        '\x00\x15', # length
-        '\x12\x34\x56\x78', # xid
-        '\xab\xcd\xef\x01', # buffer_id
-        '\x00\x09', # total_len
-        '\xff\xfe', # in_port
-        '\x01', # reason
-        '\x00', # pad
-        'abc', # data
-    ])
-
-    def test_packet_in_pack(self):
-        msg = ofp.message.packet_in(
-            xid=0x12345678,
-            buffer_id=0xabcdef01,
-            total_len=9,
-            in_port=ofp.OFPP_LOCAL,
-            reason=ofp.OFPR_ACTION,
-            data='abc')
-        self.assertEquals(self.sample_packet_in_buf, msg.pack())
-
-    def test_packet_in_unpack(self):
-        msg = ofp.message.packet_in.unpack(self.sample_packet_in_buf)
-        self.assertEquals(0x12345678, msg.xid)
-        self.assertEquals(0xabcdef01, msg.buffer_id)
-        self.assertEquals(9, msg.total_len)
-        self.assertEquals(ofp.OFPP_LOCAL, msg.in_port)
-        self.assertEquals(ofp.OFPR_ACTION, msg.reason)
-        self.assertEquals('abc', msg.data)
-
-    sample_queue_get_config_reply_buf = ''.join([
-        '\x01', '\x15', # version/type
-        '\x00\x50', # length
-        '\x12\x34\x56\x78', # xid
-        '\xff\xfe', # port
-        '\x00\x00\x00\x00\x00\x00', # pad
-        '\x00\x00\x00\x01', # queues[0].queue_id
-        '\x00\x18', # queues[0].len
-        '\x00\x00', # queues[0].pad
-        '\x00\x01', # queues[0].properties[0].type
-        '\x00\x10', # queues[0].properties[0].length
-        '\x00\x00\x00\x00', # queues[0].properties[0].pad
-        '\x00\x05', # queues[0].properties[0].rate
-        '\x00\x00\x00\x00\x00\x00', # queues[0].properties[0].pad2
-        '\x00\x00\x00\x02', # queues[1].queue_id
-        '\x00\x28', # queues[1].len
-        '\x00\x00', # queues[1].pad
-        '\x00\x01', # queues[1].properties[0].type
-        '\x00\x10', # queues[1].properties[0].length
-        '\x00\x00\x00\x00', # queues[1].properties[0].pad
-        '\x00\x06', # queues[1].properties[0].rate
-        '\x00\x00\x00\x00\x00\x00', # queues[1].properties[0].pad2
-        '\x00\x01', # queues[1].properties[1].type
-        '\x00\x10', # queues[1].properties[1].length
-        '\x00\x00\x00\x00', # queues[1].properties[1].pad
-        '\x00\x07', # queues[1].properties[1].rate
-        '\x00\x00\x00\x00\x00\x00', # queues[1].properties[1].pad2
-    ])
-
-    def test_queue_get_config_reply_pack(self):
-        msg = ofp.message.queue_get_config_reply(
-            xid=0x12345678,
-            port=ofp.OFPP_LOCAL,
-            queues=[
-                ofp.packet_queue(queue_id=1, properties=[
-                    ofp.queue_prop_min_rate(rate=5)]),
-                ofp.packet_queue(queue_id=2, properties=[
-                    ofp.queue_prop_min_rate(rate=6),
-                    ofp.queue_prop_min_rate(rate=7)])])
-        self.assertEquals(self.sample_queue_get_config_reply_buf, msg.pack())
-
-    def test_queue_get_config_reply_unpack(self):
-        msg = ofp.message.queue_get_config_reply.unpack(self.sample_queue_get_config_reply_buf)
-        self.assertEquals(ofp.OFPP_LOCAL, msg.port)
-        self.assertEquals(msg.queues[0].queue_id, 1)
-        self.assertEquals(msg.queues[0].properties[0].rate, 5)
-        self.assertEquals(msg.queues[1].queue_id, 2)
-        self.assertEquals(msg.queues[1].properties[0].rate, 6)
-        self.assertEquals(msg.queues[1].properties[1].rate, 7)
-
+# The majority of the serialization tests are created here using the files in
+# the test_data directory.
 class TestDataFiles(unittest.TestCase):
     pass
-
 add_datafiles_tests(TestDataFiles, 'of10/', ofp)
 
 class TestParse(unittest.TestCase):
diff --git a/py_gen/tests/of12.py b/py_gen/tests/of12.py
index b557730..6926382 100644
--- a/py_gen/tests/of12.py
+++ b/py_gen/tests/of12.py
@@ -26,6 +26,7 @@
 # EPL for the specific language governing permissions and limitations
 # under the EPL.
 import unittest
+from testutil import add_datafiles_tests
 
 try:
     import loxi.of12 as ofp
@@ -56,91 +57,11 @@
         self.assertTrue(hasattr(loxi.of12, "message"))
         self.assertTrue(hasattr(loxi.of12, "oxm"))
 
-class TestCommon(unittest.TestCase):
-    sample_empty_match_buf = ''.join([
-        '\x00\x01', # type
-        '\x00\x04', # length
-        '\x00\x00\x00\x00', # padding
-    ])
-
-    def test_empty_match_pack(self):
-        obj = ofp.match()
-        self.assertEquals(self.sample_empty_match_buf, obj.pack())
-
-    def test_empty_match_unpack(self):
-        obj = ofp.match.unpack(self.sample_empty_match_buf)
-        self.assertEquals(len(obj.oxm_list), 0)
-
-    sample_match_buf = ''.join([
-        '\x00\x01', # type
-        '\x00\x3C', # length
-        '\x80\x00', # oxm_list[0].class
-        '\x20\x02', # oxm_list[0].type_len
-        '\x00\x35', # oxm_list[0].value
-        '\x80\x00', # oxm_list[1].class
-        '\x05\x10', # oxm_list[1].type_len
-        '\xFE\xDC\xBA\x98\x76\x54\x32\x10', # oxm_list[1].value
-        '\xFF\xFF\xFF\xFF\x12\x34\x56\x78', # oxm_list[1].mask
-        '\x80\x00', # oxm_list[2].class
-        '\x08\x06', # oxm_list[2].type_len
-        '\x01\x02\x03\x04\x05\x06', # oxm_list[2].value
-        '\x80\x00', # oxm_list[3].class
-        '\x36\x10', # oxm_list[3].type_len
-        '\x12' * 16, # oxm_list[3].value
-        '\x00' * 4, # padding
-    ])
-
-    def test_match_pack(self):
-        obj = ofp.match([
-            ofp.oxm.udp_dst(53),
-            ofp.oxm.metadata_masked(0xFEDCBA9876543210, 0xFFFFFFFF12345678),
-            ofp.oxm.eth_src([1,2,3,4,5,6]),
-            ofp.oxm.ipv6_dst("\x12" * 16),
-        ])
-        self.assertEquals(self.sample_match_buf, obj.pack())
-
-    def test_match_unpack(self):
-        obj = ofp.match.unpack(self.sample_match_buf)
-        self.assertEquals(len(obj.oxm_list), 4)
-        self.assertEquals(obj.oxm_list[0], ofp.oxm.udp_dst(53))
-        self.assertEquals(obj.oxm_list[1], ofp.oxm.metadata_masked(0xFEDCBA9876543210, 0xFFFFFFFF12345678))
-        self.assertEquals(obj.oxm_list[2], ofp.oxm.eth_src([1,2,3,4,5,6]))
-        self.assertEquals(obj.oxm_list[3], ofp.oxm.ipv6_dst("\x12" * 16))
-
-class TestOXM(unittest.TestCase):
-    def test_oxm_in_phy_port_pack(self):
-        import loxi.of12 as ofp
-        obj = ofp.oxm.in_phy_port(value=42)
-        expected = ''.join([
-            '\x80\x00', # class
-            '\x02', # type/masked
-            '\x04', # length
-            '\x00\x00\x00\x2a' # value
-        ])
-        self.assertEquals(expected, obj.pack())
-
-    def test_oxm_in_phy_port_masked_pack(self):
-        import loxi.of12 as ofp
-        obj = ofp.oxm.in_phy_port_masked(value=42, value_mask=0xaabbccdd)
-        expected = ''.join([
-            '\x80\x00', # class
-            '\x03', # type/masked
-            '\x08', # length
-            '\x00\x00\x00\x2a', # value
-            '\xaa\xbb\xcc\xdd' # mask
-        ])
-        self.assertEquals(expected, obj.pack())
-
-    def test_oxm_ipv6_dst_pack(self):
-        import loxi.of12 as ofp
-        obj = ofp.oxm.ipv6_dst(value='\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0d\x0f')
-        expected = ''.join([
-            '\x80\x00', # class
-            '\x36', # type/masked
-            '\x10', # length
-            '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0d\x0f', # value
-        ])
-        self.assertEquals(expected, obj.pack())
+# The majority of the serialization tests are created here using the files in
+# the test_data directory.
+class TestDataFiles(unittest.TestCase):
+    pass
+add_datafiles_tests(TestDataFiles, 'of12/', ofp)
 
 class TestAllOF12(unittest.TestCase):
     """
diff --git a/py_gen/tests/of13.py b/py_gen/tests/of13.py
index 68814cb..9e6be97 100644
--- a/py_gen/tests/of13.py
+++ b/py_gen/tests/of13.py
@@ -27,6 +27,7 @@
 # under the EPL.
 import unittest
 from testutil import test_serialization
+from testutil import add_datafiles_tests
 
 try:
     import loxi.of13 as ofp
@@ -59,23 +60,6 @@
         self.assertTrue(hasattr(loxi.of13, "oxm"))
 
 class TestCommon(unittest.TestCase):
-    sample_hello_elem_buf = ''.join([
-        '\x00\x01', # type
-        '\x00\x0c', # length
-        '\x01\x23\x45\x67', # bitmaps[0]
-        '\x89\xab\xcd\xef', # bitmaps[1]
-    ])
-
-    def test_hello_elem_versionbitmap_pack(self):
-        obj = ofp.hello_elem_versionbitmap(bitmaps=[ofp.uint32(0x01234567),ofp.uint32(0x89abcdef)])
-        self.assertEquals(self.sample_hello_elem_buf, obj.pack())
-
-    def test_hello_elem_versionbitmap_unpack(self):
-        obj = ofp.hello_elem_versionbitmap.unpack(self.sample_hello_elem_buf)
-        self.assertEquals(len(obj.bitmaps), 2)
-        self.assertEquals(obj.bitmaps[0], ofp.uint32(0x01234567))
-        self.assertEquals(obj.bitmaps[1], ofp.uint32(0x89abcdef))
-
     def test_list_hello_elem_unpack(self):
         buf = ''.join([
             '\x00\x01\x00\x04', # versionbitmap
@@ -87,858 +71,11 @@
         self.assertTrue(isinstance(l[0], ofp.hello_elem_versionbitmap))
         self.assertTrue(isinstance(l[1], ofp.hello_elem_versionbitmap))
 
-class TestMessages(unittest.TestCase):
-    def test_hello(self):
-        obj = ofp.message.hello(
-            xid=0x12345678,
-            elements=[
-                ofp.hello_elem_versionbitmap(
-                    bitmaps=[ofp.uint32(1), ofp.uint32(2)]),
-                ofp.hello_elem_versionbitmap(
-                    bitmaps=[ofp.uint32(3), ofp.uint32(4)])])
-        buf = ''.join([
-            '\x04', '\x00', # version, type
-            '\x00\x20', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x01', # elements[0].type
-            '\x00\x0c', # elements[0].length
-            '\x00\x00\x00\x01', # elements[0].bitmaps[0]
-            '\x00\x00\x00\x02', # elements[0].bitmaps[1]
-            '\x00\x01', # elements[1].type
-            '\x00\x0c', # elements[1].length
-            '\x00\x00\x00\x03', # elements[1].bitmaps[0]
-            '\x00\x00\x00\x04', # elements[1].bitmaps[1]
-        ])
-        test_serialization(obj, buf)
-
-    def test_error(self):
-        obj = ofp.message.error_msg(
-            xid=0x12345678,
-            err_type=ofp.OFPET_BAD_MATCH,
-            code=ofp.OFPBMC_BAD_MASK,
-            data="abc")
-        buf = ''.join([
-            '\x04', '\x01', # version, type
-            '\x00\x0f', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x04', # err_type
-            '\x00\x08', # code
-            'abc', # data
-        ])
-        test_serialization(obj, buf)
-
-    def test_echo_request(self):
-        obj = ofp.message.echo_request(
-            xid=0x12345678,
-            data="abc")
-        buf = ''.join([
-            '\x04', '\x02', # version, type
-            '\x00\x0b', # length
-            '\x12\x34\x56\x78', # xid
-            'abc', # data
-        ])
-        test_serialization(obj, buf)
-
-    def test_echo_reply(self):
-        obj = ofp.message.echo_reply(
-            xid=0x12345678,
-            data="abc")
-        buf = ''.join([
-            '\x04', '\x03', # version, type
-            '\x00\x0b', # length
-            '\x12\x34\x56\x78', # xid
-            'abc', # data
-        ])
-        test_serialization(obj, buf)
-
-    def test_features_request(self):
-        obj = ofp.message.features_request(xid=0x12345678)
-        buf = ''.join([
-            '\x04', '\x05', # version, type
-            '\x00\x08', # length
-            '\x12\x34\x56\x78', # xid
-        ])
-        test_serialization(obj, buf)
-
-    def test_features_reply(self):
-        obj = ofp.message.features_reply(
-            xid=0x12345678,
-            datapath_id=0xFEDCBA9876543210,
-            n_buffers=64,
-            n_tables=200,
-            auxiliary_id=5,
-            capabilities=ofp.OFPC_FLOW_STATS|ofp.OFPC_PORT_BLOCKED,
-            reserved=0)
-        buf = ''.join([
-            '\x04', '\x06', # version, type
-            '\x00\x20', # length
-            '\x12\x34\x56\x78', # xid
-            '\xfe\xdc\xba\x98\x76\x54\x32\x10', # datapath_id
-            '\x00\x00\x00\x40', # n_buffers
-            '\xc8', # n_tables
-            '\x05', # auxiliary_id
-            '\x00\x00', # pad
-            '\x00\x00\x01\x01', # capabilities
-            '\x00\x00\x00\x00', # reserved
-        ])
-        test_serialization(obj, buf)
-
-    def test_get_config_request(self):
-        obj = ofp.message.get_config_request(xid=0x12345678)
-        buf = ''.join([
-            '\x04', '\x07', # version, type
-            '\x00\x08', # length
-            '\x12\x34\x56\x78', # xid
-        ])
-        test_serialization(obj, buf)
-
-    def test_get_config_reply(self):
-        obj = ofp.message.get_config_reply(
-            xid=0x12345678,
-            flags=ofp.OFPC_FRAG_REASM,
-            miss_send_len=0xffff)
-        buf = ''.join([
-            '\x04', '\x08', # version, type
-            '\x00\x0c', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x02', # flags
-            '\xff\xff', # miss_send_len
-        ])
-        test_serialization(obj, buf)
-
-    def test_set_config(self):
-        obj = ofp.message.set_config(
-            xid=0x12345678,
-            flags=ofp.OFPC_FRAG_REASM,
-            miss_send_len=0xffff)
-        buf = ''.join([
-            '\x04', '\x09', # version, type
-            '\x00\x0c', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x02', # flags
-            '\xff\xff', # miss_send_len
-        ])
-        test_serialization(obj, buf)
-
-    def test_packet_in(self):
-        obj = ofp.message.packet_in(
-            xid=0x12345678,
-            buffer_id=100,
-            total_len=17000,
-            reason=ofp.OFPR_ACTION,
-            table_id=20,
-            cookie=0xFEDCBA9876543210,
-            match=ofp.match(oxm_list=[
-                ofp.oxm.arp_op(value=1),
-                ofp.oxm.in_port_masked(value=4, value_mask=5)]),
-            data="abc")
-        buf = ''.join([
-            '\x04', '\x0a', # version, type
-            '\x00\x35', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x00\x00\x64', # buffer_id
-            '\x42\x68', # total_len
-            '\x01', # reason
-            '\x14', # table_id
-            '\xfe\xdc\xba\x98\x76\x54\x32\x10', # cookie
-            '\x00\x01', # match.type
-            '\x00\x16', # match.length
-            '\x80\x00\x2A\x02', # match.oxm_list[0].type_len
-            '\x00\x01', # match.oxm_list[0].value
-            '\x80\x00\x01\x08', # match.oxm_list[1].type_len
-            '\x00\x00\x00\x04', # match.oxm_list[1].value
-            '\x00\x00\x00\x05', # match.oxm_list[1].mask
-            '\x00\x00', # match.pad
-            '\x00\x00', # pad
-            'abc', # data
-        ])
-        test_serialization(obj, buf)
-
-    def test_flow_removed(self):
-        obj = ofp.message.flow_removed(
-            xid=0x12345678,
-            cookie=0xFEDCBA9876543210,
-            priority=17000,
-            reason=ofp.OFPRR_DELETE,
-            table_id=20,
-            duration_sec=10,
-            duration_nsec=1000,
-            idle_timeout=5,
-            hard_timeout=30,
-            packet_count=1,
-            byte_count=2,
-            match=ofp.match(oxm_list=[
-                ofp.oxm.arp_op(value=1),
-                ofp.oxm.in_port_masked(value=4, value_mask=5)]))
-        buf = ''.join([
-            '\x04', '\x0b', # version, type
-            '\x00\x48', # length
-            '\x12\x34\x56\x78', # xid
-            '\xfe\xdc\xba\x98\x76\x54\x32\x10', # cookie
-            '\x42\x68', # priority
-            '\x02', # reason
-            '\x14', # table_id
-            '\x00\x00\x00\x0a', # duration_sec
-            '\x00\x00\x03\xe8', # duration_nsec
-            '\x00\x05', # idle_timeout
-            '\x00\x1e', # hard_timeout
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # packet_count
-            '\x00\x00\x00\x00\x00\x00\x00\x02', # byte_count
-            '\x00\x01', # match.type
-            '\x00\x16', # match.length
-            '\x80\x00\x2A\x02', # match.oxm_list[0].type_len
-            '\x00\x01', # match.oxm_list[0].value
-            '\x80\x00\x01\x08', # match.oxm_list[1].type_len
-            '\x00\x00\x00\x04', # match.oxm_list[1].value
-            '\x00\x00\x00\x05', # match.oxm_list[1].mask
-            '\x00\x00', # match.pad
-        ])
-        test_serialization(obj, buf)
-
-    def test_port_status(self):
-        obj = ofp.message.port_status(
-            xid=0x12345678,
-            reason=ofp.OFPPR_MODIFY,
-            desc=ofp.port_desc(
-                port_no=4,
-                hw_addr=[1,2,3,4,5,6],
-                name="foo",
-                config=ofp.OFPPC_NO_FWD|ofp.OFPPC_NO_RECV,
-                state=ofp.OFPPS_BLOCKED,
-                curr=ofp.OFPPF_10MB_HD,
-                advertised=ofp.OFPPF_10MB_FD,
-                supported=ofp.OFPPF_100MB_HD,
-                peer=ofp.OFPPF_100MB_FD,
-                curr_speed=10,
-                max_speed=20))
-        buf = ''.join([
-            '\x04', '\x0c', # version, type
-            '\x00\x50', # length
-            '\x12\x34\x56\x78', # xid
-            '\x02', # reason
-            '\x00' * 7, # pad
-            '\x00\x00\x00\x04', # port_no
-            '\x00' * 4, # pad
-            '\x01\x02\x03\x04\x05\x06', # hw_addr
-            '\x00' * 2, # pad
-            'foo' + '\x00' * 13, # name
-            '\x00\x00\x00\x24', # config
-            '\x00\x00\x00\x02', # state
-            '\x00\x00\x00\x01', # curr
-            '\x00\x00\x00\x02', # advertised
-            '\x00\x00\x00\x04', # supported
-            '\x00\x00\x00\x08', # peer
-            '\x00\x00\x00\x0a', # curr_speed
-            '\x00\x00\x00\x14', # max_speed
-        ])
-        test_serialization(obj, buf)
-
-    def test_packet_out(self):
-        obj = ofp.message.packet_out(
-            xid=0x12345678,
-            buffer_id=100,
-            in_port=4,
-            actions=[
-                ofp.action.output(port=2, max_len=0xffff),
-                ofp.action.dec_nw_ttl()],
-            data="abc")
-        buf = ''.join([
-            '\x04', '\x0d', # version, type
-            '\x00\x33', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x00\x00\x64', # buffer_id
-            '\x00\x00\x00\x04', # in_port
-            '\x00\x18', # actions_len
-            '\x00' * 6, # pad
-            '\x00\x00', # actions[0].type
-            '\x00\x10', # actions[0].length
-            '\x00\x00\x00\x02', # actions[0].port
-            '\xff\xff', # actions[0].max_len
-            '\x00' * 6, # pad
-            '\x00\x18', # actions[1].type
-            '\x00\x08', # actions[1].length
-            '\x00' * 4, # pad
-            'abc', # data
-        ])
-        test_serialization(obj, buf)
-
-
-    ## Flow-mods
-
-    def test_flow_add(self):
-        obj = ofp.message.flow_add(
-            xid=0x12345678,
-            cookie=0xFEDCBA9876543210,
-            cookie_mask=0xFF00FF00FF00FF00,
-            table_id=3,
-            idle_timeout=5,
-            hard_timeout=10,
-            priority=6000,
-            buffer_id=50,
-            out_port=6,
-            out_group=8,
-            flags=0,
-            match=ofp.match(oxm_list=[]),
-            instructions=[
-                ofp.instruction.goto_table(table_id=4),
-                ofp.instruction.goto_table(table_id=7)])
-        buf = ''.join([
-            '\x04', '\x0e', # version, type
-            '\x00\x48', # length
-            '\x12\x34\x56\x78', # xid
-
-            '\xfe\xdc\xba\x98\x76\x54\x32\x10', # cookie
-
-            '\xff\x00\xff\x00\xff\x00\xff\x00', # cookie_mask
-
-            '\x03', # table_id
-            '\x00', # _command
-            '\x00\x05', # idle_timeout
-            '\x00\x0a', # hard_timeout
-            '\x17\x70', # priority
-
-            '\x00\x00\x00\x32', # buffer_id
-            '\x00\x00\x00\x06', # out_port
-
-            '\x00\x00\x00\x08', # out_group
-            '\x00\x00', # flags
-            '\x00' * 2, # pad
-
-            '\x00\x01', # match.type
-            '\x00\x04', # match.length
-            '\x00' * 4, # pad
-
-            '\x00\x01', # instructions[0].type
-            '\x00\x08', # instructions[0].length
-            '\x04', # instructions[0].table_id
-            '\x00' * 3, # pad
-
-            '\x00\x01', # instructions[1].type
-            '\x00\x08', # instructions[1].length
-            '\x07', # instructions[1].table_id
-            '\x00' * 3, # pad
-        ])
-        test_serialization(obj, buf)
-
-    def test_flow_modify(self):
-        # TODO
-        pass
-
-    def test_flow_modify_strict(self):
-        # TODO
-        pass
-
-    def test_flow_delete(self):
-        # TODO
-        pass
-
-    def test_flow_delete_strict(self):
-        # TODO
-        pass
-
-
-    def test_group_mod(self):
-        obj = ofp.message.group_mod(
-            xid=0x12345678,
-            command=ofp.OFPGC_MODIFY,
-            group_type=ofp.OFPGT_FF,
-            group_id=5,
-            buckets=[
-                ofp.bucket(
-                    weight=1,
-                    watch_port=5,
-                    watch_group=0xffffffff,
-                    actions=[
-                        ofp.action.output(port=5, max_len=0),
-                        ofp.action.output(port=6, max_len=0)]),
-                ofp.bucket(
-                    weight=1,
-                    watch_port=6,
-                    watch_group=0xffffffff,
-                    actions=[
-                        ofp.action.output(port=5, max_len=0),
-                        ofp.action.output(port=6, max_len=0)])])
-        buf = ''.join([
-            '\x04', '\x0f', # version, type
-            '\x00\x70', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x01', # command
-            '\x03', # group_type
-            '\x00', # pad
-            '\x00\x00\x00\x05', # group_id
-            '\x00\x30', # buckets[0].len
-            '\x00\x01', # buckets[0].weight
-            '\x00\x00\x00\x05', # buckets[0].watch_port
-            '\xff\xff\xff\xff', # buckets[0].watch_group
-            '\x00' * 4, # pad
-            '\x00\x00', # buckets[0].actions[0].type
-            '\x00\x10', # buckets[0].actions[0].len
-            '\x00\x00\x00\x05', # buckets[0].actions[0].port
-            '\x00\x00', # buckets[0].actions[0].max_len
-            '\x00' * 6, # pad
-            '\x00\x00', # buckets[0].actions[1].type
-            '\x00\x10', # buckets[0].actions[1].len
-            '\x00\x00\x00\x06', # buckets[0].actions[1].port
-            '\x00\x00', # buckets[0].actions[1].max_len
-            '\x00' * 6, # pad
-            '\x00\x30', # buckets[1].len
-            '\x00\x01', # buckets[1].weight
-            '\x00\x00\x00\x06', # buckets[1].watch_port
-            '\xff\xff\xff\xff', # buckets[1].watch_group
-            '\x00' * 4, # pad
-            '\x00\x00', # buckets[1].actions[0].type
-            '\x00\x10', # buckets[1].actions[0].len
-            '\x00\x00\x00\x05', # buckets[1].actions[0].port
-            '\x00\x00', # buckets[1].actions[0].max_len
-            '\x00' * 6, # pad
-            '\x00\x00', # buckets[1].actions[1].type
-            '\x00\x10', # buckets[1].actions[1].len
-            '\x00\x00\x00\x06', # buckets[1].actions[1].port
-            '\x00\x00', # buckets[1].actions[1].max_len
-            '\x00' * 6, # pad
-        ])
-        test_serialization(obj, buf)
-
-    def test_port_mod(self):
-        # TODO
-        pass
-
-    def test_table_mod(self):
-        # TODO
-        pass
-
-
-    ## Multipart messages
-
-    def test_desc_stats_request(self):
-        # TODO
-        pass
-
-    def test_desc_stats_reply(self):
-        # TODO
-        pass
-
-    def test_flow_stats_request(self):
-        # TODO
-        pass
-
-    def test_flow_stats_reply(self):
-        # TODO
-        pass
-
-    def test_aggregate_stats_request(self):
-        # TODO
-        pass
-
-    def test_aggregate_stats_reply(self):
-        # TODO
-        pass
-
-    def test_port_stats_request(self):
-        # TODO
-        pass
-
-    def test_port_stats_reply(self):
-        # TODO
-        pass
-
-    def test_queue_stats_request(self):
-        # TODO
-        pass
-
-    def test_queue_stats_reply(self):
-        # TODO
-        pass
-
-    def test_group_stats_request(self):
-        # TODO
-        pass
-
-    def test_group_stats_reply(self):
-        obj = ofp.message.group_stats_reply(
-            xid=0x12345678,
-            flags=0,
-            entries=[
-                ofp.group_stats_entry(
-                    group_id=1,
-                    ref_count=8,
-                    packet_count=16,
-                    byte_count=32,
-                    duration_sec=20,
-                    duration_nsec=100,
-                    bucket_stats=[
-                        ofp.bucket_counter(packet_count=1, byte_count=2),
-                        ofp.bucket_counter(packet_count=3, byte_count=4)]),
-                ofp.group_stats_entry(
-                    group_id=1,
-                    ref_count=8,
-                    packet_count=16,
-                    byte_count=32,
-                    duration_sec=20,
-                    duration_nsec=100,
-                    bucket_stats=[])])
-        buf = ''.join([
-            '\x04', '\x13', # version, type
-            '\x00\x80', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x06', # stats_type
-            '\x00\x00', # flags
-            '\x00' * 4, # pad
-            '\x00\x48', # entries[0].length
-            '\x00' * 2, # pad
-            '\x00\x00\x00\x01', # entries[0].group_id
-            '\x00\x00\x00\x08', # entries[0].ref_count
-            '\x00' * 4, # pad
-            '\x00\x00\x00\x00\x00\x00\x00\x10', # entries[0].packet_count
-            '\x00\x00\x00\x00\x00\x00\x00\x20', # entries[0].byte_count
-            '\x00\x00\x00\x14', # entries[0].duration_sec
-            '\x00\x00\x00\x64', # entries[0].duration_nsec
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # entries[0].bucket_stats[0].packet_count
-            '\x00\x00\x00\x00\x00\x00\x00\x02', # entries[0].bucket_stats[0].byte_count
-            '\x00\x00\x00\x00\x00\x00\x00\x03', # entries[0].bucket_stats[1].packet_count
-            '\x00\x00\x00\x00\x00\x00\x00\x04', # entries[0].bucket_stats[1].byte_count
-            '\x00\x28', # entries[0].length
-            '\x00' * 2, # pad
-            '\x00\x00\x00\x01', # entries[0].group_id
-            '\x00\x00\x00\x08', # entries[0].ref_count
-            '\x00' * 4, # pad
-            '\x00\x00\x00\x00\x00\x00\x00\x10', # entries[0].packet_count
-            '\x00\x00\x00\x00\x00\x00\x00\x20', # entries[0].byte_count
-            '\x00\x00\x00\x14', # entries[0].duration_sec
-            '\x00\x00\x00\x64', # entries[0].duration_nsec
-        ])
-        test_serialization(obj, buf)
-
-    def test_group_desc_stats_request(self):
-        # TODO
-        pass
-
-    def test_group_desc_stats_reply(self):
-        obj = ofp.message.group_desc_stats_reply(
-            xid=0x12345678,
-            flags=0,
-            entries=[
-                ofp.group_desc_stats_entry(
-                    type=ofp.OFPGT_FF,
-                    group_id=1,
-                    buckets=[
-                        ofp.bucket(
-                            weight=1,
-                            watch_port=5,
-                            watch_group=0xffffffff,
-                            actions=[
-                                ofp.action.output(port=5, max_len=0),
-                                ofp.action.output(port=6, max_len=0)]),
-                        ofp.bucket(
-                            weight=1,
-                            watch_port=6,
-                            watch_group=0xffffffff,
-                            actions=[
-                                ofp.action.output(port=5, max_len=0),
-                                ofp.action.output(port=6, max_len=0)])]),
-                ofp.group_desc_stats_entry(type=ofp.OFPGT_FF, group_id=2, buckets=[])])
-        buf = ''.join([
-            '\x04', '\x13', # version, type
-            '\x00\x80', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x07', # stats_type
-            '\x00\x00', # flags
-            '\x00' * 4, # pad
-            '\x00\x68', # entries[0].length
-            '\x03', # entries[0].group_type
-            '\x00', # entries[0].pad
-            '\x00\x00\x00\x01', # entries[0].group_id
-            '\x00\x30', # entries[0].buckets[0].len
-            '\x00\x01', # entries[0].buckets[0].weight
-            '\x00\x00\x00\x05', # entries[0].buckets[0].watch_port
-            '\xff\xff\xff\xff', # entries[0].buckets[0].watch_group
-            '\x00' * 4, # entries[0].pad
-            '\x00\x00', # entries[0].buckets[0].actions[0].type
-            '\x00\x10', # entries[0].buckets[0].actions[0].len
-            '\x00\x00\x00\x05', # entries[0].buckets[0].actions[0].port
-            '\x00\x00', # entries[0].buckets[0].actions[0].max_len
-            '\x00' * 6, # entries[0].pad
-            '\x00\x00', # entries[0].buckets[0].actions[1].type
-            '\x00\x10', # entries[0].buckets[0].actions[1].len
-            '\x00\x00\x00\x06', # entries[0].buckets[0].actions[1].port
-            '\x00\x00', # entries[0].buckets[0].actions[1].max_len
-            '\x00' * 6, # entries[0].pad
-            '\x00\x30', # entries[0].buckets[1].len
-            '\x00\x01', # entries[0].buckets[1].weight
-            '\x00\x00\x00\x06', # entries[0].buckets[1].watch_port
-            '\xff\xff\xff\xff', # entries[0].buckets[1].watch_group
-            '\x00' * 4, # entries[0].pad
-            '\x00\x00', # entries[0].buckets[1].actions[0].type
-            '\x00\x10', # entries[0].buckets[1].actions[0].len
-            '\x00\x00\x00\x05', # entries[0].buckets[1].actions[0].port
-            '\x00\x00', # entries[0].buckets[1].actions[0].max_len
-            '\x00' * 6, # entries[0].pad
-            '\x00\x00', # entries[0].buckets[1].actions[1].type
-            '\x00\x10', # entries[0].buckets[1].actions[1].len
-            '\x00\x00\x00\x06', # entries[0].buckets[1].actions[1].port
-            '\x00\x00', # entries[0].buckets[1].actions[1].max_len
-            '\x00' * 6, # entries[0].pad
-            '\x00\x08', # entries[1].length
-            '\x03', # entries[1].group_type
-            '\x00', # entries[1].pad
-            '\x00\x00\x00\x02', # entries[1].group_id
-        ])
-        test_serialization(obj, buf)
-
-    def test_group_features_stats_request(self):
-        # TODO
-        pass
-
-    def test_group_features_stats_reply(self):
-        # TODO
-        pass
-
-    def test_meter_stats_request(self):
-        # TODO
-        pass
-
-    def test_meter_stats_reply(self):
-        obj = ofp.message.meter_stats_reply(
-            xid=0x12345678,
-            flags=0,
-            entries=[
-                ofp.meter_stats(
-                    meter_id=1,
-                    flow_count=8,
-                    packet_in_count=16,
-                    byte_in_count=32,
-                    duration_sec=20,
-                    duration_nsec=100,
-                    band_stats=[
-                        ofp.meter_band_stats(packet_band_count=1, byte_band_count=2),
-                        ofp.meter_band_stats(packet_band_count=3, byte_band_count=4)]),
-                ofp.meter_stats(
-                    meter_id=2,
-                    flow_count=8,
-                    packet_in_count=16,
-                    byte_in_count=32,
-                    duration_sec=20,
-                    duration_nsec=100,
-                    band_stats=[])])
-        buf = ''.join([
-            '\x04', '\x13', # version, type
-            '\x00\x80', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x09', # stats_type
-            '\x00\x00', # flags
-            '\x00' * 4, # pad
-            '\x00\x00\x00\x01', # entries[0].meter_id
-            '\x00\x48', # entries[0].len
-            '\x00' * 6, # pad
-            '\x00\x00\x00\x08', # entries[0].flow_count
-            '\x00\x00\x00\x00\x00\x00\x00\x10', # entries[0].packet_in_count
-            '\x00\x00\x00\x00\x00\x00\x00\x20', # entries[0].byte_in_count
-            '\x00\x00\x00\x14', # entries[0].duration_sec
-            '\x00\x00\x00\x64', # entries[0].duration_nsec
-            '\x00\x00\x00\x00\x00\x00\x00\x01', # entries[0].band_stats[0].packet_band_count
-            '\x00\x00\x00\x00\x00\x00\x00\x02', # entries[0].band_stats[0].byte_band_count
-            '\x00\x00\x00\x00\x00\x00\x00\x03', # entries[0].band_stats[1].packet_band_count
-            '\x00\x00\x00\x00\x00\x00\x00\x04', # entries[0].band_stats[1].byte_band_count
-            '\x00\x00\x00\x02', # entries[1].meter_id
-            '\x00\x28', # entries[1].len
-            '\x00' * 6, # pad
-            '\x00\x00\x00\x08', # entries[1].flow_count
-            '\x00\x00\x00\x00\x00\x00\x00\x10', # entries[1].packet_in_count
-            '\x00\x00\x00\x00\x00\x00\x00\x20', # entries[1].byte_in_count
-            '\x00\x00\x00\x14', # entries[1].duration_sec
-            '\x00\x00\x00\x64', # entries[1].duration_nsec
-        ])
-        test_serialization(obj, buf)
-
-    def test_meter_config_stats_request(self):
-        # TODO
-        pass
-
-    def test_meter_config_stats_reply(self):
-        obj = ofp.message.meter_config_stats_reply(
-            xid=0x12345678,
-            flags=0,
-            entries=[
-                ofp.meter_band.drop(rate=1, burst_size=2),
-                ofp.meter_band.dscp_remark(rate=3, burst_size=4, prec_level=5)])
-        buf = ''.join([
-            '\x04', '\x13', # version, type
-            '\x00\x30', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x0a', # stats_type
-            '\x00\x00', # flags
-            '\x00' * 4, # pad
-            '\x00\x01', # entries[0].type
-            '\x00\x10', # entries[0].length
-            '\x00\x00\x00\x01', # entries[0].rate
-            '\x00\x00\x00\x02', # entries[0].burst_size
-            '\x00' * 4, # pad
-            '\x00\x02', # entries[1].type
-            '\x00\x10', # entries[1].length
-            '\x00\x00\x00\x03', # entries[1].rate
-            '\x00\x00\x00\x04', # entries[1].burst_size
-            '\x05', # entries[1].prec_level
-            '\x00' * 3, # pad
-        ])
-        test_serialization(obj, buf)
-
-    def test_meter_features_stats_request(self):
-        # TODO
-        pass
-
-    def test_meter_features_stats_reply(self):
-        obj = ofp.message.meter_features_stats_reply(
-            xid=0x12345678,
-            flags=0,
-            features=ofp.meter_features(
-                max_meter=5,
-                band_types=ofp.OFPMBT_DROP|ofp.OFPMBT_DSCP_REMARK,
-                capabilities=ofp.OFPMF_KBPS|ofp.OFPMF_STATS,
-                max_bands=10,
-                max_color=7))
-        buf = ''.join([
-            '\x04', '\x13', # version, type
-            '\x00\x20', # length
-            '\x12\x34\x56\x78', # xid
-            '\x00\x0b', # stats_type
-            '\x00\x00', # flags
-            '\x00' * 4, # pad
-            '\x00\x00\x00\x05', # max_meter
-            '\x00\x00\x00\x03', # band_types
-            '\x00\x00\x00\x09', # capabilities
-            '\x0a', # max_bands
-            '\x07', # max_color
-            '\x00' * 2, # pad
-        ])
-        test_serialization(obj, buf)
-
-    def test_table_features_stats_request(self):
-        # TODO
-        pass
-
-    def test_table_features_stats_reply(self):
-        # TODO
-        pass
-
-    def test_port_desc_stats_request(self):
-        # TODO
-        pass
-
-    def test_port_desc_stats_reply(self):
-        # TODO
-        pass
-
-
-    def test_barrier_request(self):
-        # TODO
-        pass
-
-    def test_barrier_reply(self):
-        # TODO
-        pass
-
-    def test_queue_get_config_request(self):
-        # TODO
-        pass
-
-    def test_queue_get_config_reply(self):
-        # TODO
-        pass
-
-    def test_role_request(self):
-        # TODO
-        pass
-
-    def test_role_reply(self):
-        # TODO
-        pass
-
-    def test_get_async_request(self):
-        # TODO
-        pass
-
-    def test_get_async_reply(self):
-        # TODO
-        pass
-
-    def test_set_async(self):
-        # TODO
-        pass
-
-    def test_meter_mod(self):
-        # TODO
-        pass
-
-    # TODO test experimenter messages
-
-
-class TestOXM(unittest.TestCase):
-    def test_oxm_in_phy_port_pack(self):
-        import loxi.of13 as ofp
-        obj = ofp.oxm.in_phy_port(value=42)
-        expected = ''.join([
-            '\x80\x00', # class
-            '\x02', # type/masked
-            '\x04', # length
-            '\x00\x00\x00\x2a' # value
-        ])
-        self.assertEquals(expected, obj.pack())
-
-    def test_oxm_in_phy_port_masked_pack(self):
-        import loxi.of13 as ofp
-        obj = ofp.oxm.in_phy_port_masked(value=42, value_mask=0xaabbccdd)
-        expected = ''.join([
-            '\x80\x00', # class
-            '\x03', # type/masked
-            '\x08', # length
-            '\x00\x00\x00\x2a', # value
-            '\xaa\xbb\xcc\xdd' # mask
-        ])
-        self.assertEquals(expected, obj.pack())
-
-    def test_oxm_ipv6_dst_pack(self):
-        import loxi.of13 as ofp
-        obj = ofp.oxm.ipv6_dst(value='\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0d\x0f')
-        expected = ''.join([
-            '\x80\x00', # class
-            '\x36', # type/masked
-            '\x10', # length
-            '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0d\x0f', # value
-        ])
-        self.assertEquals(expected, obj.pack())
-
-class TestInstructions(unittest.TestCase):
-    def test_goto_table(self):
-        obj = ofp.instruction.goto_table(table_id=5)
-        buf = ''.join([
-            '\x00\x01', # type
-            '\x00\x08', # length
-            '\x05', # table_id
-            '\x00' * 3, # pad
-        ])
-        test_serialization(obj, buf)
-
-    def test_write_metadata(self):
-        # TODO
-        pass
-
-    def test_write_actions(self):
-        # TODO
-        pass
-
-    def test_apply_actions(self):
-        # TODO
-        pass
-
-    def test_clear_actions(self):
-        # TODO
-        pass
-
-    def test_meter(self):
-        # TODO
-        pass
-
-    # TODO test experimenter instructions
+# The majority of the serialization tests are created here using the files in
+# the test_data directory.
+class TestDataFiles(unittest.TestCase):
+    pass
+add_datafiles_tests(TestDataFiles, 'of13/', ofp)
 
 class TestAllOF13(unittest.TestCase):
     """
