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):
     """
