)]}'
{
  "log": [
    {
      "commit": "2c7812ce1e1d869eb3dfa0e59bf96b386d95c0f1",
      "tree": "68654d4d40452b9aa2137047180ce496eab52998",
      "parents": [
        "e1b8da9513d907758fef264839c56fab09761c95"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 27 17:52:23 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 27 17:52:23 2012 -0800"
      },
      "message": "use a single dataplane instance for all tests\n\nCreating and destroying dataplane instances was taking about 1/3 of the total\nruntime.\n"
    },
    {
      "commit": "e1b8da9513d907758fef264839c56fab09761c95",
      "tree": "49090625972a5a9e876130f1f65efedbc32a66de",
      "parents": [
        "fb7183008e8fb5a15572cb2b33a08d1fbf1e9bb9"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 22:47:13 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 22:52:50 2012 -0800"
      },
      "message": "dataplane: single-threaded rewrite\n\nThere\u0027s now just one thread for the dataplane instead of one per port. This\ngreatly reduces the amount of code needed for each port implementation.\n"
    },
    {
      "commit": "fb7183008e8fb5a15572cb2b33a08d1fbf1e9bb9",
      "tree": "43810e1920e5f5a25c90d6955b4c39ea1835ef30",
      "parents": [
        "e7b0ecb155278f0c0a21ae6299baaa516a5140b1"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 21:02:31 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 21:02:31 2012 -0800"
      },
      "message": "DataPlane: cleanup and remove dead code\n"
    },
    {
      "commit": "e7b0ecb155278f0c0a21ae6299baaa516a5140b1",
      "tree": "cae51d2fd83e4e08137c8e8959dfaae5eaf32af7",
      "parents": [
        "2e37ec25b27ea3474d2a5adf0dd3adf422ad2585"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 10:01:01 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 10:01:01 2012 -0800"
      },
      "message": "manually release controller and dataplane references\n\nThe GC wasn\u0027t collecting these objects in a timely manner, which caused the\nprocess to run out of file descriptors.\n"
    },
    {
      "commit": "2e37ec25b27ea3474d2a5adf0dd3adf422ad2585",
      "tree": "cbd5ffe9956c5e6b4e3a282919b22f199b06ebb2",
      "parents": [
        "a718c669273689d1d44ca42dcbb4464cfa2c45e8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 09:47:39 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 09:47:39 2012 -0800"
      },
      "message": "EventDescriptor: fix log statement\n"
    },
    {
      "commit": "d7d3292a587e7450855adbd714f98bf8f5e02d96",
      "tree": "00ba05833d8248db3b86dcce7a43a3b21240e0f9",
      "parents": [
        "7e1d5c54487356c0a1ef86f88f800a7d24d34283"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 15:03:20 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 15:03:20 2012 -0800"
      },
      "message": "DataPlanePort: fix race between thread start and kill\n\nA very short test could kill the port before the port\u0027s thread started running.\nThe thread would overwrite self.running with True and thus never exit.\n"
    },
    {
      "commit": "7e1d5c54487356c0a1ef86f88f800a7d24d34283",
      "tree": "57a57e50e3a32ed44e4a78983b32699771466b91",
      "parents": [
        "5b5da2d4413ff7249522d9f167c61cd2e298f9ca"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 14:08:32 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 14:08:32 2012 -0800"
      },
      "message": "EventDescriptor: dont block notify() if pipe is full\n"
    },
    {
      "commit": "5b5da2d4413ff7249522d9f167c61cd2e298f9ca",
      "tree": "e2adf618a0e67102452025dfc9997b99d8de2cba",
      "parents": [
        "4dfd5e19c74d1a9591e88927e93a326818aa38b6"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:56:32 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:56:32 2012 -0800"
      },
      "message": "dataplane: use an EventDescriptor to speed up killing ports\n"
    },
    {
      "commit": "4dfd5e19c74d1a9591e88927e93a326818aa38b6",
      "tree": "4b672910b8538ccfd921cbd89d4e1f00c67c0ba3",
      "parents": [
        "4d46dbd5348cc2db996e8e3d521d0597f372eeb0"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:48:01 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:48:01 2012 -0800"
      },
      "message": "factor out EventDescriptor from Controller\n"
    },
    {
      "commit": "4d46dbd5348cc2db996e8e3d521d0597f372eeb0",
      "tree": "1991a83cafc224ff92185623538566e7b549716b",
      "parents": [
        "bd186803c8aaf15c4ba20e34c0b7da3d74cc9636"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:26:19 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:26:19 2012 -0800"
      },
      "message": "dataplane: kill port threads concurrently\n"
    },
    {
      "commit": "3279754f96efb78e32aa226543ff5f0df26c7089",
      "tree": "a9cd0310586fe0ca3df4064dfc6556c2929fc2f3",
      "parents": [
        "71d887d2e3836649b650939ee3c1e6e91cde16e2"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:46:05 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:46:05 2012 -0800"
      },
      "message": "controller: use a pipe to wake up event loop from a different thread\n"
    },
    {
      "commit": "82ef183784dfddd4fc790ea50fe7d04ea149d86f",
      "tree": "23e022c878017e08d3895c0e2e23de9e04db5bed",
      "parents": [
        "e912d03d5dd19039abe599af85feb03eb6ec68f2"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:04:35 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:04:35 2012 -0800"
      },
      "message": "disable Nagle\u0027s algorithm\n"
    },
    {
      "commit": "e912d03d5dd19039abe599af85feb03eb6ec68f2",
      "tree": "db18a5492aa711be24884740eb91ba10b12a106d",
      "parents": [
        "74be472440365351820efd3786f92f207f74e949"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 14:28:33 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 14:28:33 2012 -0800"
      },
      "message": "flow_msg_install: dont send redundant barriers\n"
    },
    {
      "commit": "74be472440365351820efd3786f92f207f74e949",
      "tree": "487a00a10f3ca22b488e380f4d492952f258032e",
      "parents": [
        "9c93e670e07836d4e0e38eb4f47eafa6c55ec63e"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Dec 21 13:07:03 2012 -0800"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Dec 21 13:07:03 2012 -0800"
      },
      "message": "controller.py: clear pending packets on disconnect.\n\ncxn.py: store switch addr to detect when switch has disconnected and\nreconnected.\n"
    },
    {
      "commit": "43ee54c1bccc3ec44a520d25995074ba08ccee96",
      "tree": "5c2b5ed97ba6232eb841582dce41ff5748a71a92",
      "parents": [
        "2bb7a272749bb1a9126b347c80c494d18516c322"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Thu Dec 13 15:52:37 2012 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Thu Dec 13 15:52:37 2012 -0800"
      },
      "message": "Move qinq out of simple_tcp_packet\n"
    },
    {
      "commit": "ab0bab3d52c110ee57c16014ba36d07bd5e20558",
      "tree": "7e59128fe9d1251dba8d3e4a8c545b886c27e24b",
      "parents": [
        "e6fca642a6e7e066ec2edf7e33969148d2e9a0f1"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Fri Nov 30 13:31:00 2012 -0800"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Dec 11 16:29:06 2012 -0800"
      },
      "message": "Don\u0027t try to use the incompatible pylibpcap library\n"
    },
    {
      "commit": "47fe471addfd055828b73341f87c3cc89e81ae9c",
      "tree": "5fa1de974cc1eec1c3534570ee1da92ab597147e",
      "parents": [
        "ba9eee87b344e49741b9faa7c6ffa4ff1ba0cecb",
        "75bcf4d2e0d7446a2a337e445ba0708bef1bafd3"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "lanerl@gmail.com",
        "time": "Sun Dec 09 23:24:38 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "lanerl@gmail.com",
        "time": "Sun Dec 09 23:24:38 2012 -0800"
      },
      "message": "Merge pull request #27 from InCNTRE/master\n\nmessage_types "
    },
    {
      "commit": "9176567db0278481ff43bf0eeee7a8f8b99f6453",
      "tree": "a69086c746105517e3a2828c17246972e118d0c0",
      "parents": [
        "d2e93aa1cc8366e43a5115631ca307c99e11f356"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 06 16:33:04 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 06 17:02:48 2012 -0800"
      },
      "message": "speed up negative tests in receive_pkt_check\n"
    },
    {
      "commit": "d2e93aa1cc8366e43a5115631ca307c99e11f356",
      "tree": "a0af3a507c495151872215863fff7e6aa7a2e2c5",
      "parents": [
        "b5c7379adf9f909d2f50c2481f523e5d39cf3617"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 05 17:55:46 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 06 17:02:48 2012 -0800"
      },
      "message": "dataplane: record wall clock time when receiving packet\n\ntime.clock() returns processor time which is not useful.\n"
    },
    {
      "commit": "89725bb41c7da04c685a8c31fee0a0bdb1b5bd00",
      "tree": "9972070b1c5170e0b6b8e9a2bcca6ee978a848f2",
      "parents": [
        "95e6a45ae51b4f5f768260d78d498c4dd5430157"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 03 16:23:27 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 03 17:55:44 2012 -0800"
      },
      "message": "also test packet-out in flow_match_test\n\nThe goal is to test the actions taken on the packet, not the matching which is\nof course irrelevant.\n"
    },
    {
      "commit": "5e0a6e374200833af692315b6117b21b2b560068",
      "tree": "b3e64c854b5db4d926ce1a9a3ee76973bc49eaad",
      "parents": [
        "8a0406e29aea1747c65bb67c62235f3149628c21"
      ],
      "author": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Sun Dec 02 18:34:35 2012 -0500"
      },
      "committer": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Sun Dec 02 18:34:35 2012 -0500"
      },
      "message": "reverted the line specified\n"
    },
    {
      "commit": "cd8e1cf846ad071c530a677406d8c02c0df429bf",
      "tree": "d77917b31ddafee4d559e69f8ef5d62a3497ec87",
      "parents": [
        "055102a3cf0cc183ce418c7b17999775837f7384"
      ],
      "author": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Wed Nov 28 11:44:42 2012 -0500"
      },
      "committer": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Wed Nov 28 11:44:42 2012 -0500"
      },
      "message": "added port down and up functions\n"
    },
    {
      "commit": "b10ebd61faa5db8a9d5bb7013e46e3939501f700",
      "tree": "39ee4e7fcb5647f6d101dee572e46032418b2020",
      "parents": [
        "8b27474b25b89364db6bdd153a8d467d01470468"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 27 01:42:51 2012 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 27 01:42:51 2012 -0800"
      },
      "message": "Generate tcp packets with double vlan tags\n"
    },
    {
      "commit": "b7f12466ae1b55525d260591cba1e762e63de433",
      "tree": "feb53e4b819e7297510665cf936c33de2d839349",
      "parents": [
        "d71c4a7fd4a9eeaa8fcd7611ef2988db797f0c48"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 20 13:01:12 2012 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 20 13:01:12 2012 -0800"
      },
      "message": "Allow longer barrier timeout in caps test\n"
    },
    {
      "commit": "69ca4d6f9345e031b701d0ea62e5bcfed66139d6",
      "tree": "f38bf5368e140026c0c1337723e58ea8d910eb91",
      "parents": [
        "afcf467ee2c362c8e7445d84a61467e191bf5ceb"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu Nov 15 11:50:22 2012 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu Nov 15 11:50:22 2012 -0800"
      },
      "message": "Support active connect, overwrite log\n\nAdded options:\n  --switch-ip   If set, actively connect to this switch on controller-port\n  --log-append  Append to existing log\n\nThe default log file generation behavior has changed.  By default, now\nover-write the existing log.  To have the old append behavior, use the\n--log-append option.\n\nActive switch connections have been tested, but not exhaustively.  It\nshold still be considered experimental.  The old behavior (listen for\nswitch connections) should be unchanged.\n"
    },
    {
      "commit": "7717399c71be9ef6d9f396c17e8191811baa1a28",
      "tree": "e9d64d753d9370bf224a937052e6843b78380ada",
      "parents": [
        "e53897c14357d7ad562ebfc75ff209f53306ff17"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 30 15:44:39 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 30 15:44:39 2012 -0700"
      },
      "message": "Rework HandshakeAndKeepalive test to handle more than one controller.\nAllow controller.poll() to poll for OFPT_HELLO.\n"
    },
    {
      "commit": "5d7e89a2aca40438bcdb041217c78f07dedf6c30",
      "tree": "52d75669b2ec3bd97f2be2c3073cae1f39d55f27",
      "parents": [
        "01c2b86587d029af198e26f6aeb7fce1e16943a8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 26 16:43:13 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 30 08:54:47 2012 -0700"
      },
      "message": "testutils: add inspect_packet() and use it when receive_pkt_verify() fails\n"
    },
    {
      "commit": "110e0e3ace5d7dfa534e6c9fe3f3c8cbbbae8c6e",
      "tree": "130e5ce6e4aafe99179bcf0668aaf30abb1992c4",
      "parents": [
        "6ee7bea2a7054422f6e71119ea3767dd16310077"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 26 16:21:46 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 30 08:54:47 2012 -0700"
      },
      "message": "testutils: add UDP support to pkt_action_setup\n"
    },
    {
      "commit": "6ee7bea2a7054422f6e71119ea3767dd16310077",
      "tree": "f1840c343f1874110beeea0abcaf7b01846b2a65",
      "parents": [
        "1a5b0822fd098adac5ac46ba0531bcb833ee3d39"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 26 16:19:29 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 30 08:54:47 2012 -0700"
      },
      "message": "testutils: add simple_udp_packet()\n"
    },
    {
      "commit": "b371430baebd8c3b130e418e0c6f5a5a2144ece2",
      "tree": "05a3259bd8c41a933b332450abc5b3da4a0af8a4",
      "parents": [
        "b42a31c55479f89417469265f34eb4c50b00aa6b",
        "265fc49f484ce85340ca480dfad22a4edba18c96"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Oct 24 15:09:47 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Oct 24 15:09:47 2012 -0700"
      },
      "message": "Merge branch \u0027kenc\u0027\n"
    },
    {
      "commit": "b42a31c55479f89417469265f34eb4c50b00aa6b",
      "tree": "deb11a5447ab3e73aaac3db4d20d4517ebda3034",
      "parents": [
        "387fcd7e22c5df376937e3533e57ecb021017b2a"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 17:54:17 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 16 16:24:17 2012 -0700"
      },
      "message": "libpcap dataplane\n\nAlternate port implementation using libpcap. This is required for recent\nversions of Linux (such as Linux 3.2 included in Ubuntu 12.04) which\noffload the VLAN tag, so it isn\u0027t in the data returned from a read on a raw\nsocket. libpcap understands how to read the VLAN tag from the kernel.\n\nIf pypcap is installed on the host then the new dataplane is used. Otherwise\nthe old one will still work.\n"
    },
    {
      "commit": "e875baf604d374ef04a9a8388a8b7f2f556ef469",
      "tree": "7b06542a0120eae778d5939b5ec37fd87b242421",
      "parents": [
        "adc950f39bca913271eceb69e850f21488dd9b79",
        "e703c6801ddb686e042bc82589e1ae4a7a4b1a41"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 09 15:24:40 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 09 15:24:40 2012 -0700"
      },
      "message": "Merge branch \u0027master\u0027 into kenc\n\nConflicts:\n\ttests/cxn.py - manually resolved\n"
    },
    {
      "commit": "8b59b4b3f39e61d6c5f4bcde42415adf20408dc4",
      "tree": "976d023e7375d7461f8ec2718285705ceb8043ba",
      "parents": [
        "e703c6801ddb686e042bc82589e1ae4a7a4b1a41"
      ],
      "author": {
        "name": "Christian Dickmann",
        "email": "christian.dickmann@gmail.com",
        "time": "Sun Sep 23 16:48:30 2012 -0700"
      },
      "committer": {
        "name": "Christian Dickmann",
        "email": "christian.dickmann@gmail.com",
        "time": "Mon Oct 08 21:11:16 2012 -0700"
      },
      "message": "Add packet parsing/matching verification\n\nNew tests that deal with parsing and matching of valid and\ncorrupted packets. Current coverage includes corrupted IP\nand TCP headers, valid and corrupted LLC (with and without\nSNAP), basic ARP and basic VLAN.\n"
    },
    {
      "commit": "1a8d5aab3d18952a4d03e166e1c9a39b64dbad5a",
      "tree": "4d8685c068f3d3a7f09ef6d3738b7272c8a9e802",
      "parents": [
        "51b3fe9fd9e06153990426b763da27586e0c4f17"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Oct 08 15:40:03 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Oct 08 15:45:51 2012 -0700"
      },
      "message": "ensure first message switch receieves is hello\n\nA test waiting in controller.connect() could wake up and send e.g. a\nfeatures_request message before the controller thread sends a hello message,\ncausing the switch to drop the connection.\n"
    },
    {
      "commit": "e5779d33367b23c44e9794a1d1bfca5e3892b20a",
      "tree": "1ce35ac68a0221ab53da3599bcced18d22c40ce8",
      "parents": [
        "2014f9b1c88efef6116d5b3f5dae552e5c9741c6"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 17:56:04 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 18:10:21 2012 -0700"
      },
      "message": "fix pylint errors\n\nAlso removed some testutils code that must have been dead because it had\nrotten.\n"
    },
    {
      "commit": "2014f9b1c88efef6116d5b3f5dae552e5c9741c6",
      "tree": "903a6842d75d708e90f04e7128a8cc3ac4e320b8",
      "parents": [
        "483e15412b1c3902ec398cdaa7c79d9cec147d76"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 15:29:40 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 18:10:21 2012 -0700"
      },
      "message": "remove config parameter from several testutils functions\n"
    },
    {
      "commit": "b90a1c4dfc0cfe40251187124ff89d7651f2755d",
      "tree": "1ba481298fbd4379fa1eedc0acc35899d7c33a38",
      "parents": [
        "477f4817eedc0ef6306459de1f88d77739bee7cf"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 09:16:05 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 18:10:14 2012 -0700"
      },
      "message": "move base test classes to oftest.base_tests\n\nThis lets them be shared between separate directories of tests.\n"
    },
    {
      "commit": "adc950f39bca913271eceb69e850f21488dd9b79",
      "tree": "318a2d4afb6ad12e6381013f5dd982552fea84e9",
      "parents": [
        "123928cd3c6a26ecbd852e2e01d6a5b921a5256a"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Oct 05 13:50:03 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Oct 05 13:50:03 2012 -0700"
      },
      "message": "Add disconnect() and wait_disconnect() methods to controller.\nWhen current connection to the switch is disconnected,\nallow controller to continue listening without killing controller thread.\nRework cxn tests to use this new controller model.\n"
    },
    {
      "commit": "477f4817eedc0ef6306459de1f88d77739bee7cf",
      "tree": "2133c905fdd5da93949bd4cc8bb343be93370b1c",
      "parents": [
        "d1d9c287220588b5e8cff337f4f136ab9660a235"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 22:49:00 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 12:30:31 2012 -0700"
      },
      "message": "add a global config dictionary\n\nThere was no need for each test module to keep a copy for itself. This means we\ncan also get rid of test_set_init.\n"
    },
    {
      "commit": "a92f2526be41f5334728f36be4b6d6dd4db6f46e",
      "tree": "fdddd0d859e98741cc87b1b4b5cfbcfb65e05d6f",
      "parents": [
        "5bd6cf94def52d433139d430cc34a6c1c49f8fd8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 18:11:04 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 08:44:34 2012 -0700"
      },
      "message": "remove unnecessary uses of eval\n\nThere are easier ways to do everything that was being done with eval.\n"
    },
    {
      "commit": "9a00381ec150547bc039a60b5c5f0269bc0a8dfb",
      "tree": "49572bb0e31027cc02a46d5a2f52d29c1b954eec",
      "parents": [
        "123928cd3c6a26ecbd852e2e01d6a5b921a5256a"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 17:17:59 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 08:39:50 2012 -0700"
      },
      "message": "use the singleton logger object\n\nThere was no need for each test file to have its own logger.\n"
    },
    {
      "commit": "2a3bbb4f5d7e1cdd48704a53d8d8f22c5590abbc",
      "tree": "ea0e8d61849717b6c7a83c8e59da3710c7509f63",
      "parents": [
        "114d143de7a82f9cde4923e0bd91fa894d32f6f2"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 15:45:32 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 17:28:05 2012 -0700"
      },
      "message": "nuke setuptools and \"make install\"\n\nThis code didn\u0027t work. If we ever want setup.py back we can get it from version\ncontrol.\n"
    },
    {
      "commit": "da3b5ad89ce995cbc3a08dfff06dcb4f66f85578",
      "tree": "dab88f247ee287b8efaee8ae287676aa13241fb9",
      "parents": [
        "fb9ce27051f9df1a3f43e43154d0443f06f80287"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Oct 03 09:05:32 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Oct 03 10:15:27 2012 -0700"
      },
      "message": "move testutils to src/python/oftest\n\ntestutils.py needs to be in a common location for different directories of\ntests to use it.\n"
    },
    {
      "commit": "fb9ce27051f9df1a3f43e43154d0443f06f80287",
      "tree": "642d4401393d366d197e369741e333d4ad24f7e6",
      "parents": [],
      "author": {
        "name": "Jeffrey Townsend",
        "email": "jeffrey.townsend@bigswitch.com",
        "time": "Tue Oct 02 21:10:29 2012 -0700"
      },
      "committer": {
        "name": "Jeffrey Townsend",
        "email": "jeffrey.townsend@bigswitch.com",
        "time": "Tue Oct 02 21:10:29 2012 -0700"
      },
      "message": "Do not include tests with a negative priority.\n"
    }
  ]
}
