)]}'
{
  "log": [
    {
      "commit": "58a9879010fef161d9ec8711da589e2881bd94bf",
      "tree": "9d192a93916cf24651a867191fa0c24fc6ee0e4a",
      "parents": [
        "a740928162e7152c00ce0dca89bb097397fce7d5"
      ],
      "author": {
        "name": "ctchang",
        "email": "ctchang@chromium.org",
        "time": "Wed Sep 05 02:53:36 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Mon Sep 24 05:13:07 2012"
      },
      "message": "Add firmware vblock sha and method to modify firmware\n\nTo backup firmware, add firmware vblock sha (firmware body sha is already\nexist) and associated method to get these sha. Some methods to set and get\nfirmware body and vblock are needed.\n\nBUG\u003dchromium-os:33641\nTEST\u003dAfter merging faftsequence.py, use backup_firmware() and restore_firmware()\n\nChange-Id: I8c96acba8872ab191fec8a9f84750e3761f3dc78\nReviewed-on: https://gerrit.chromium.org/gerrit/32503\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "a740928162e7152c00ce0dca89bb097397fce7d5",
      "tree": "b17dd30b4dbe6ff7b9773817747fdf0647abfea1",
      "parents": [
        "80fbf0eabf78bfe4f8014414d4d6948edba8986d"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Thu Aug 30 14:11:00 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Fri Aug 31 02:21:57 2012"
      },
      "message": "saft: Fix the argument and the return value of get_internal_disk()\n\nThe get_internal_disk() doesn\u0027t work on ARM platform. The argument should\nbe a device with a partition and the return value should be a device without\na partition.\n\nBUG\u003dchrome-os-partner:13323\nTEST\u003dRun a FAFT test on ARM platform without error.\n\nChange-Id: Ib02df7a277bf17755d96370689255f2bf4a96d2f\nReviewed-on: https://gerrit.chromium.org/gerrit/31850\nReviewed-by: Vic Yang \u003cvictoryang@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "80fbf0eabf78bfe4f8014414d4d6948edba8986d",
      "tree": "64d4ce95b131d47af2b63f608f83213e6cc31738",
      "parents": [
        "48459e9f2fdf96ddc56d29e6e56df2e87f360cc7"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Thu Aug 30 11:10:25 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Fri Aug 31 01:44:49 2012"
      },
      "message": "saft: Modify ecbin size field on the DTB blob\n\nThe new updated ecbin may have a different size. The ecbin size field on the\nDTB blob should be updated. Otherwise, the software sync may be failed.\n\nBUG\u003dchrome-os-partner:12997\nTEST\u003dAfter merging some EC update test changes, run:\nrun_remote_test.sh -a \"new_ec\u003dec_autest_image.bin\" firmware_UpdateECBin/control$\n\nChange-Id: I9eebb3b4c885d8276d48650e78a7ca775280595d\nReviewed-on: https://gerrit.chromium.org/gerrit/31842\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "48459e9f2fdf96ddc56d29e6e56df2e87f360cc7",
      "tree": "7938c9bcd544258ee1e133ffcd89d1a5be9901b6",
      "parents": [
        "5420e9b4fa245004b5e76dab94c965ea0cb516c8"
      ],
      "author": {
        "name": "ctchang",
        "email": "ctchang@chromium.org",
        "time": "Wed Aug 29 06:06:15 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Thu Aug 30 02:52:36 2012"
      },
      "message": "Fetch internal disk when using removable disk\n\nIt always uses the current boot kernel now. In kernel_handler, add an argument\n\"internal_disk\" to decide which disk to retrieve. Therefore, it can use\ninternal kernel disk when using removable disk. In chromeos_interface, add a\nmethod to get internal disk for arm or x86.\n\nBUG\u003dchrome-os-partner:13323\nTEST\u003dBoot with removable disk, check kernel_handler fetch whick disk device.\n\nChange-Id: Ie8e2f2e9e3b1f72dc8551da37ad26f51a96299b1\nReviewed-on: https://gerrit.chromium.org/gerrit/31692\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Chun-Ting Chang \u003cctchang@chromium.org\u003e\nTested-by: Chun-Ting Chang \u003cctchang@chromium.org\u003e\n"
    },
    {
      "commit": "5420e9b4fa245004b5e76dab94c965ea0cb516c8",
      "tree": "50fd9cc386f57c5a8bfe8131fdcfb720b4f3e5a3",
      "parents": [
        "18ef55545ba5f19220a30b4102db05f70b9344d6"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Wed Aug 29 13:48:16 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Thu Aug 30 02:52:34 2012"
      },
      "message": "saft: Write the modified firmware body to flashrom after updating ecbin\n\nThe original code has an issue that we don\u0027t write the firwmare body back\nto the system via flashrom. So any change doesn\u0027t take effect. This CL\nfixes this issue.\n\nBUG\u003dchrome-os-partner:12997\nTEST\u003dAfter merging some EC update test changes, run:\nrun_remote_test.sh -a \"new_ec\u003dec_autest_image.bin\" firmware_UpdateECBin/control$\n\nChange-Id: I40c83f5bd2c4774e02341ac21f4b6167e713638f\nReviewed-on: https://gerrit.chromium.org/gerrit/31705\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "18ef55545ba5f19220a30b4102db05f70b9344d6",
      "tree": "b0959aa464634ac6a922ca7d893a72f2e7c56917",
      "parents": [
        "ed52297f365bf036cc9959ebd595c1833d1c0ce2"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Wed Aug 29 14:29:57 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Thu Aug 30 02:52:34 2012"
      },
      "message": "saft: Fix bug that the offset of the ecbin should be 4-byte aligned\n\nThe main firmware RW body is concatenated from u-boot, dtb, and ecbin.\nThey are all 4-byte aligned. This CL is to fix this bug.\n\nBUG\u003dchrome-os-partner:12997\nTEST\u003dAfter merging some EC update test changes, run:\nrun_remote_test.sh -a \"new_ec\u003dec_autest_image.bin\" firmware_UpdateECBin/control$\n\nChange-Id: Ie906e191d37c743b9a28a1b55b4879c963648828\nReviewed-on: https://gerrit.chromium.org/gerrit/31708\nReviewed-by: Vic Yang \u003cvictoryang@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "ed52297f365bf036cc9959ebd595c1833d1c0ce2",
      "tree": "8a4457c536e036c291ae92198346584139d65af2",
      "parents": [
        "ab0e6544a8c11cae7eea6b8150ebcd8d868c717f"
      ],
      "author": {
        "name": "ctchang",
        "email": "ctchang@chromium.org",
        "time": "Wed Aug 22 02:25:00 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Wed Aug 29 07:27:43 2012"
      },
      "message": "Add methods to support update kernel version and data key verison\n\nThis is to enable retrieve kernel data key version, and also add\nmethod to resign kernel with specific keys.\n\nBUG\u003dchrome-os-partner:12442\nTEST\u003dCheck if we can retrieve kernel data key version, and resign\nkernel.\n\nChange-Id: I77c1f14aabbd8629ad378a3321d27c48b66aa4d7\nReviewed-on: https://gerrit.chromium.org/gerrit/31202\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Chun-Ting Chang \u003cctchang@chromium.org\u003e\nTested-by: Chun-Ting Chang \u003cctchang@chromium.org\u003e\n"
    },
    {
      "commit": "ab0e6544a8c11cae7eea6b8150ebcd8d868c717f",
      "tree": "91998d4296c2dbafef5e24ab9d15f127f36b9dae",
      "parents": [
        "0b51e2cdbc432e08c29627ecf9b327c1fb32313a"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Fri Aug 24 08:04:37 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Aug 28 08:36:58 2012"
      },
      "message": "saft: Export get_section_body and set_section_body methods on flashrom_handler\n\nThese 2 methods will be used for EC Software Sync update test. So this\nchange exports them and does a bit refactoring.\n\nBUG\u003dchrome-os-partner:12997\nTEST\u003dAfter merging some EC update test changes, run:\nrun_remote_test.sh -a \"new_ec\u003dec_autest_image.bin\" firmware_UpdateECBin/control$\n\nChange-Id: Ibde6f3e42669f1847b32c5dd42c5de59c21a4651\nReviewed-on: https://gerrit.chromium.org/gerrit/31326\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "0b51e2cdbc432e08c29627ecf9b327c1fb32313a",
      "tree": "dbeb2297fc5eae1c0dfce1d1e8597c8e2f2ebbf8",
      "parents": [
        "d35d3bec6f11ea903a02e51cc19e79d758e72c2c"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Fri Aug 24 04:02:39 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Aug 28 08:36:55 2012"
      },
      "message": "saft: Add EC binary getter and setter methods on flashrom_handler\n\nAccording to the EC Software Sync design, The EC binary is now embedded\nin the BIOS image. On AP startup, AP verifies the EC by comparing the\nhash of the current EC with the hash of the embedded EC image.\n\nFor testing this design, some FAFTs need to update the EC binary. This\nchange add the support of getting and setting the EC binary on the BIOS\nimage.\n\nBUG\u003dchrome-os-partner:12997\nTEST\u003dAfter merging some EC update test changes, run:\nrun_remote_test.sh -a \"new_ec\u003dec_autest_image.bin\" firmware_UpdateECBin/control$\n\nChange-Id: Ic05a53b8b8040016991259f9d9ff8a9eb9a1ba49\nReviewed-on: https://gerrit.chromium.org/gerrit/31325\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "d35d3bec6f11ea903a02e51cc19e79d758e72c2c",
      "tree": "1bbf84561951e3ccb0bb78755459bd808f102aed",
      "parents": [
        "e903dffd3a8f88cd57e4059ad66888277b36f7e0"
      ],
      "author": {
        "name": "ctchang",
        "email": "ctchang@chromium.org",
        "time": "Thu Aug 09 02:19:41 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Thu Aug 09 08:56:54 2012"
      },
      "message": "Add method to retrieve version in firmware preamble\n\nThis is to enable retrieve firmware version, firmware datakey version,\nkernel subkey version\n\nBUG\u003dchrome-os-partner:12442\nTEST\u003dCheck we can retrieve firmware version, firmware datakey version,\n  kernel subkey version\n\nChange-Id: Ia116fafd9279eb7d367f20ce85bade5594ed37a3\nReviewed-on: https://gerrit.chromium.org/gerrit/29721\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Chun-Ting Chang \u003cctchang@chromium.org\u003e\nTested-by: Chun-Ting Chang \u003cctchang@chromium.org\u003e\n"
    },
    {
      "commit": "e903dffd3a8f88cd57e4059ad66888277b36f7e0",
      "tree": "1f39b7cce54a5e06f14dcd75a6b5bcf1b3bef5db",
      "parents": [
        "07a7003b2fa9019248dd042851429153081acdd1"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@chromium.org",
        "time": "Tue Jul 31 09:15:56 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Jul 31 15:14:39 2012"
      },
      "message": "Add method to read SHA-1 hash of firmware section in flashrom handler\n\nThis is to enable checking if firmware section has changed.\n\nBUG\u003dchrome-os-partner:11980\nTEST\u003dCheck we can read SHA-1 hash.\n\nChange-Id: I35ecf0a3faf43c70c9ec7dc2e6d5f8b9276adeb3\nReviewed-on: https://gerrit.chromium.org/gerrit/28790\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Vic Yang \u003cvictoryang@chromium.org\u003e\nCommit-Ready: Vic Yang \u003cvictoryang@chromium.org\u003e\n"
    },
    {
      "commit": "07a7003b2fa9019248dd042851429153081acdd1",
      "tree": "ec43e68a37ac51025a31e898f9d6fe9705b68dc3",
      "parents": [
        "43abb58e5c007242a996599ae29ab95896b43f8d"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@chromium.org",
        "time": "Tue Jul 31 08:09:34 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Jul 31 09:30:47 2012"
      },
      "message": "Modify flashrom handler to match new EC FMAP\n\nEC no longer has VBLOCK and RW-B. Let\u0027s make it a single \u0027rw\u0027 section.\n\nBUG\u003dchrome-os-partner:11980\nTEST\u003dCheck we can modify EC image.\n\nChange-Id: I243becd8b4e759a2d2e0aca0961ffdb9b62c0ee0\nReviewed-on: https://gerrit.chromium.org/gerrit/28786\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Vic Yang \u003cvictoryang@chromium.org\u003e\nTested-by: Vic Yang \u003cvictoryang@chromium.org\u003e\n"
    },
    {
      "commit": "43abb58e5c007242a996599ae29ab95896b43f8d",
      "tree": "c17a04e771b5238bd6ea04794e4cdf93b379c903",
      "parents": [
        "672e1366803a4a749793b4087fca3fcf5bc9154d"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@chromium.org",
        "time": "Tue Jul 31 08:06:47 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Jul 31 09:30:46 2012"
      },
      "message": "Update firmware when only preamble changes\n\nCurrently when set_firmware_version is called, firmware is only updated\nwhen version changed. Let\u0027s change this to also update on flags change.\n\nBUG\u003dchrome-os-partner:11980\nTEST\u003dTested we can clear RO-normal flag.\n\nChange-Id: If24d399ea3f5761e602207d4df70201926277522\nReviewed-on: https://gerrit.chromium.org/gerrit/28785\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Vic Yang \u003cvictoryang@chromium.org\u003e\nTested-by: Vic Yang \u003cvictoryang@chromium.org\u003e\n"
    },
    {
      "commit": "672e1366803a4a749793b4087fca3fcf5bc9154d",
      "tree": "496b60da377ce4999470e45cbe6d0f977805d7aa",
      "parents": [
        "ba3388a7cb3ff0b4952fadacd808e12ef392b104"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Fri Jul 27 06:30:44 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Fri Jul 27 16:29:43 2012"
      },
      "message": "saft: Skip checking EC is in RO or not when running CGPT state test\n\nThe 3rd element of a boot vector indicates EC is in RO or RW. In the CGPT\nstate test, we don\u0027t care about the EC state. So mark it wildcard (*) to\nskip this check. And also use cmp_boot_vector() to compare instead of a\nstring comparison.\n\nBUG\u003dchromium-os:26953,chromium-os:32871\nTEST\u003drun FAFT firmware_CgptState on Link passed.\n\nChange-Id: If69458a631c963fab51fce25d96b4ebc70c072ba\nReviewed-on: https://gerrit.chromium.org/gerrit/28576\nReviewed-by: Vic Yang \u003cvictoryang@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "ba3388a7cb3ff0b4952fadacd808e12ef392b104",
      "tree": "ca19e2deb6b5ce1c6bb5d52424243a1a6b0088bd",
      "parents": [
        "e41125e7c4704af9bcf4f13c9b885baa05427e91"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Fri Jul 27 06:02:02 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Fri Jul 27 16:29:42 2012"
      },
      "message": "saft: Move cmp_boot_vector() to ChromeOSInterface class\n\nMake it reusable from other places.\n\nBUG\u003dchromium-os:26953,chromium-os:32871\nTEST\u003drun FAFT firmware_TryFwB/control.normal on Link passed.\n\nChange-Id: I53456b583389e1672feb844f98ef6334d0258d24\nReviewed-on: https://gerrit.chromium.org/gerrit/28575\nReviewed-by: Vic Yang \u003cvictoryang@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "e41125e7c4704af9bcf4f13c9b885baa05427e91",
      "tree": "92f03abc31feb12ca028268e38b55632dc897287",
      "parents": [
        "40da787164be2be6eec5c6669e2152d1c28a1bda"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@chromium.org",
        "time": "Fri Jun 29 05:58:26 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Fri Jun 29 14:53:18 2012"
      },
      "message": "Add an option to corrupt all bytes in a firmware section\n\nCurrent flashrom handler only provide an interface to corrupt a single\nbyte in a firmware section. Let\u0027s extend this to be able to corrupt all\nbytes in order to improve test coverage.\n\nBUG\u003dchrome-os-partner:10265\nTEST\u003dTested we can corrupt and restore firmware this way.\n\nChange-Id: I20c56272440e393fa298561bd3c4c2f5ec9fe374\nReviewed-on: https://gerrit.chromium.org/gerrit/26396\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Vic Yang \u003cvictoryang@chromium.org\u003e\nTested-by: Vic Yang \u003cvictoryang@chromium.org\u003e\n"
    },
    {
      "commit": "40da787164be2be6eec5c6669e2152d1c28a1bda",
      "tree": "c15a7e89837f1c9740736ea93c8d3546f97451c8",
      "parents": [
        "fe291c89fc15dbe768c6d368cc1849aad4a1a8c0"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@chromium.org",
        "time": "Fri May 18 09:12:42 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Mon May 21 07:30:02 2012"
      },
      "message": "Add flashrom EC support\n\nCurrent flashrom module only support reading/writing BIOS. To enable EC\nFAFT, let\u0027s add flashrom EC support.\n\nBUG\u003dchrome-os-partner:9188\nTEST\u003dRun firmware_CorruptFwBodyA and it still works.\n     Manual test it can corrupt and restore EC.\n\nChange-Id: I6e20e0e1b00749b5448490f841f9e1ae6a9c6ec4\nReviewed-on: https://gerrit.chromium.org/gerrit/23031\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Vic Yang \u003cvictoryang@chromium.org\u003e\nCommit-Ready: Vic Yang \u003cvictoryang@chromium.org\u003e\n"
    },
    {
      "commit": "fe291c89fc15dbe768c6d368cc1849aad4a1a8c0",
      "tree": "97cb3cb92c6c3b7401f659b11ab1932ef456091a",
      "parents": [
        "ce4c47b4cd6dad9afad34da4ceec2f8efaa5ecec"
      ],
      "author": {
        "name": "Elly Jones",
        "email": "ellyjones@chromium.org",
        "time": "Fri Apr 06 19:30:55 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Mon Apr 09 14:45:43 2012"
      },
      "message": "[saft] add OWNERS\n\nTEST\u003dNone\nBUG\u003dchromium-os:22007\n\nChange-Id: Id479f0d075136c47dab760f573eaf1ab15beb541\nSigned-off-by: Elly Jones \u003cellyjones@chromium.org\u003e\nReviewed-on: https://gerrit.chromium.org/gerrit/19775\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "ce4c47b4cd6dad9afad34da4ceec2f8efaa5ecec",
      "tree": "638ed2381779ae7166d5a35c54fe0e5937e2ff34",
      "parents": [
        "007d73a1e239f7bf4246703fc572cb7455526114"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Wed Feb 08 08:58:39 2012"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Thu Feb 09 06:43:02 2012"
      },
      "message": "Accept different path of keys in SAFT kernel handler library.\n\nWhen running FAFT test cases, the keys are not in the current directory.\n\nBUG\u003dchromium-os:19710\nTEST\u003drun_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n         servo_serial\u003d$SERIAL\" firmware_RollbackKernel/control$\n\nChange-Id: Ice9868166579da87aeb26784983ae5cd54cc75b7\nReviewed-on: https://gerrit.chromium.org/gerrit/15479\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "007d73a1e239f7bf4246703fc572cb7455526114",
      "tree": "ad3dd4d4ccd8539a9e9e591be5fc9bf2736a5e37",
      "parents": [
        "a2eca0c93a19a347e16f9dced4618401d8147981"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Fri Dec 30 01:14:30 2011"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Fri Jan 06 09:16:33 2012"
      },
      "message": "SAFT accepts specifing a full path of log file.\n\nWhen initializing the SAFT chromeos_interface library and specifing a\nfull path of log file (starts with \u0027/\u0027), use it directly.\n\nBUG\u003dchromium-os:19710\nTEST\u003drun_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n         servo_vid\u003d0x18d1 servo_pid\u003d0x5001\" firmware_TryFwB/control.normal\n\nChange-Id: Ic84a1c289fb2ae1b5e65be10fc91bb95c7b23e6d\nReviewed-on: https://gerrit.chromium.org/gerrit/13574\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "a2eca0c93a19a347e16f9dced4618401d8147981",
      "tree": "b37f12e93e7a23fdfa010fece5427b4a67983ef5",
      "parents": [
        "af134aa201c582384a462060ea0cb50b499019e5"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Wed Dec 28 06:39:56 2011"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Wed Jan 04 06:26:44 2012"
      },
      "message": "Add a method to get the GBB flags of the current firmware.\n\nThis method will be used on firmware_DevScreenTimeout test to differentiate\nnormal timeout and short timeout on developer screen.\n\nBUG\u003dchromium-os:19710\nTEST\u003drun_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n         servo_vid\u003d0x18d1 servo_pid\u003d0x5001\" firmware_DevScreenTimeout\n\nChange-Id: I2dec1f89017affaa43fdc4efc9db0db03c367a2c\nReviewed-on: https://gerrit.chromium.org/gerrit/13549\nReviewed-by: Rajesh Chenna \u003crchenna@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "af134aa201c582384a462060ea0cb50b499019e5",
      "tree": "1c6324912c952acb7b6a3a0743f810f6581e2bfc",
      "parents": [
        "a3e2ac73c449bb1bb0f5b5844d7ad2e14145e2c1"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Mon Dec 12 07:04:59 2011"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Dec 13 03:18:58 2011"
      },
      "message": "Support corrupting firmware body on SAFT.\n\nAdd the methods of corrupting firmware body instead of corrupting firmware\nsignature.\n\nBUG\u003dchromium-os:19710\nTEST\u003drun_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n        servo_vid\u003d0x18d1 servo_pid\u003d0x5001\" CorruptFwA/control.both\n\nChange-Id: Ied40c51dff3910e37217f403c82a00cc3e5abee5\nReviewed-on: https://gerrit.chromium.org/gerrit/12730\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "a3e2ac73c449bb1bb0f5b5844d7ad2e14145e2c1",
      "tree": "01d6a312c0db6772ac3ac02c39f6f312025dbbbf",
      "parents": [
        "ff7b6acf1c62c25a88d6b13b4a56d39e5ffb4bab"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Mon Dec 05 08:03:58 2011"
      },
      "committer": {
        "name": "Gerrit",
        "email": "chrome-bot@google.com",
        "time": "Tue Dec 06 05:02:35 2011"
      },
      "message": "Corrupt the firmware signature instead of the body.\n\nSince in the RO-normal boot presented firmware, only corrupting the firmware\nbody is not enough. It is still able to boot its RO-normal firmware without\nverifing the RW-firmware body. So corrupting the signature seems a better\nsolution.\n\nBUG\u003dchrome-os-partner:6882, chrome-os-partner:6683\nTEST\u003drun_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n        servo_vid\u003d0x18d1 servo_pid\u003d0x5001\" CorruptFwA/control.both\n     run_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n        servo_vid\u003d0x18d1 servo_pid\u003d0x5001\" CorruptFwB/control.both\n     run_remote_tests.sh --remote\u003d$REMOTE_IP -a \"xml_config\u003d$OVERLAY_XML \\\n        servo_vid\u003d0x18d1 servo_pid\u003d0x5001\" CorruptBothFwAB/control.both\n\nChange-Id: Id6ce3352f3bc117c1ca51e1566c1e582a6e04db9\nReviewed-on: https://gerrit.chromium.org/gerrit/12431\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\nCommit-Ready: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "ff7b6acf1c62c25a88d6b13b4a56d39e5ffb4bab",
      "tree": "8a7604b48a452deff4c444fd8fd67a871f0bdb17",
      "parents": [
        "ed45600f65af8a6382ced4856a20997a1906e8c0"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Wed Aug 31 01:26:22 2011"
      },
      "committer": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Fri Sep 16 00:46:15 2011"
      },
      "message": "Add the missing crossystem vector mapping.\n\nAdd the missing crossystem vector mapping as the comments said.\n  first vector position\n    2 - developer mode boot\n    3 - recovery initialed by pressing the recovery button\n    4 - recovery from developer mode warning screen\n  second vector position\n    rewritable firmware is not required a normal firmware\n\nBUG\u003dchromium-os:19451\nTEST\u003dmanual\n\nImport chromeos_interface.py and call boot_state_vector to verify the results.\nTests on both Kaen and Alex.\n\nChange-Id: I60207e945183a6bc0c62ac078c54bd08d2a62219\nReviewed-on: http://gerrit.chromium.org/gerrit/7153\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\n"
    },
    {
      "commit": "ed45600f65af8a6382ced4856a20997a1906e8c0",
      "tree": "ecd1070b724d75080d5cc256526f35a151a5578d",
      "parents": [
        "e336d1619fbac1b6ecb318cb665c602b33088aaf"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Tue Aug 23 09:42:23 2011"
      },
      "committer": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Thu Sep 15 02:31:41 2011"
      },
      "message": "Remove hardcoded root device and handle ARM partition stripping and joining.\n\nRemove all hardcoded root device and APIs changes in chromeos_interface:\n - Rename get_root_dev to get_root_part, which contains partition number.\n - Add a real get_root_dev, which doesn\u0027t contain partition number.\n - Add strip_part to strip the partition number from a full device filename.\n - Add join_part to join the partition number to the device name.\n\nBUG\u003dchromium-os:19451\nTEST\u003dmanual\n\nRan saft on an ARM device and runtest.sh script succeeded.\nBut after reboot, still needs some fixes to make it work.\n\nChange-Id: Ia5b0b6355d887b4034d7d56cac8dbc7fc345b2dd\nReviewed-on: http://gerrit.chromium.org/gerrit/6485\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\n"
    },
    {
      "commit": "e336d1619fbac1b6ecb318cb665c602b33088aaf",
      "tree": "8334af98224bcc84df1e05dc00f2f7bf3834231d",
      "parents": [
        "905a96264265915e1416a5da4b0bec4fdbb3a14f"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Mon Aug 22 10:16:01 2011"
      },
      "committer": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Thu Sep 15 02:30:37 2011"
      },
      "message": "Fix SAFT to support zero-sized FMap section.\n\nSince ARM firmware has no recovery section so a zero-sized section appears.\nIt was failed the check in line 122 of check_layout():\n    if section_base \u003c base or section_end \u003c section_base:\n\nBecause layout_data[name] \u003d (offset, offset + size - 1), so the check should be:\n    if section_base \u003c\u003d base or section_end + 1 \u003c section_base:\nto make it work as intended.\n\nThe second if condition is \u003c if we accept zero-sized; otherwise \u003c\u003d if we don\u0027t\naccept it.\n\nBUG\u003dchromium-os:19451\nTEST\u003dmanual\n\nRan saft on both ARM and x86 devices. Ran /usr/sbin/firmware/saft/runtest.sh\nand wasn\u0027t failed in check_layout() check.\n\nChange-Id: I2986be5740c917f9b9007aa960e478524c2bcf11\nReviewed-on: http://gerrit.chromium.org/gerrit/6395\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\n"
    },
    {
      "commit": "905a96264265915e1416a5da4b0bec4fdbb3a14f",
      "tree": "3395bf76cda97f75b3c8300d2820c2ed6a40e4f8",
      "parents": [
        "789fdecf7974ef9be9c09caebcbc59ad3988cd90"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Mon Aug 22 10:02:21 2011"
      },
      "committer": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Thu Sep 15 02:30:18 2011"
      },
      "message": "Fix SAFT to support ARM device/partition naming convention.\n\nOn x86, device/partition is something like /dev/sdb3. On ARM, the internal disk\nis something like /dev/mmcblk0p3 but the flash device is something like\n/dev/sda3. So this CL is to make it work on both x86 and ARM.\n\nBUG\u003dchromium-os:19451\nTEST\u003dmanual\n\nRan saft on an ARM device. Ran the unittest test_chromeos_interface.py success.\n\nlocalhost / # /usr/sbin/firmware/saft/runtests.sh\n32768+0 records in\n32768+0 records out\n16777216 bytes (17 MB) copied, 0.607159 s, 27.6 MB/s\n32768+0 records in\n32768+0 records out\n16777216 bytes (17 MB) copied, 0.959958 s, 17.5 MB/s\n1+0 records in\n1+0 records out\n1 byte (1 B) copied, 0.002065 s, 0.5 kB/s\nstarting as /tmp/tmp_saft.V6pa/usr/sbin/firmware/saft/runtests.sh\n......\n----------------------------------------------------------------------\nRan 6 tests in 0.196s\n\nOK\n\nChange-Id: Id37624946c0ac3226fa313c7a55f986f6fda7d22\nReviewed-on: http://gerrit.chromium.org/gerrit/6394\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\n"
    },
    {
      "commit": "789fdecf7974ef9be9c09caebcbc59ad3988cd90",
      "tree": "b85da1b469dbe705a533b9f2b906da3f0b9915f2",
      "parents": [
        "1a3b32d57a9977dc34bd8ac0159d07280ffaf795"
      ],
      "author": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Tue Aug 23 02:33:47 2011"
      },
      "committer": {
        "name": "Tom Wai-Hong Tam",
        "email": "waihong@chromium.org",
        "time": "Thu Sep 08 07:24:29 2011"
      },
      "message": "Handle USE_RO_NORMAL preamble flag correctly.\n\nUSE_RO_NORMAL is a new preamble flag available in preamble header version 2.1.\nWhen this flag is presented, it notices bootstub firmware to boot its RO normal\npath instead of loading and verifying the RW firmware body.\n\nSo this CL is to fix some behaviors of existing tests in SAFT correctly.\n- test_image_re_sign in test_flashrom_handler.py:\n    It increses the original firmware version 1 and resign it. The fix is to\n    pass the original preamble flags to the new one.\n- test_image_corrupt_restore in test_flashrom_handler.py:\n    It corrupts the firmware body and expects an assertion. When USE_RO_NORMAL\n    presented, should expects no assertion as no firmware body verification.\n\nThis CL is not intended to test the usages of USE_RO_NORMAL. It is just for\nfixing the original behaviors. A special USE_RO_NORMAL test will come later\nfor this purpose.\n\nBUG\u003dchromium-os:19451\nTEST\u003dmanual\n\nRan saft on an ARM device and firmware with USE_NO_NORMAL presented.\nRan the unittest test_flashrom_handler.py succeeded.\n\nlocalhost / # /usr/sbin/firmware/saft/runtests.sh\n32768+0 records in\n32768+0 records out\n16777216 bytes (17 MB) copied, 0.623775 s, 26.9 MB/s\n32768+0 records in\n32768+0 records out\n16777216 bytes (17 MB) copied, 0.926702 s, 18.1 MB/s\n1+0 records in\n1+0 records out\n1 byte (1 B) copied, 0.01432 s, 0.1 kB/s\nstarting as /tmp/tmp_saft.LntH/usr/sbin/firmware/saft/runtests.sh\n......\n----------------------------------------------------------------------\nRan 6 tests in 0.181s\n\nOK\n....\n----------------------------------------------------------------------\nRan 4 tests in 19.150s\n\nOK\n\nChange-Id: I531ae8f6689ec87809d9d20c4b576062a7ca50f6\nReviewed-on: http://gerrit.chromium.org/gerrit/6464\nReviewed-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\nTested-by: Tom Wai-Hong Tam \u003cwaihong@chromium.org\u003e\n"
    },
    {
      "commit": "1a3b32d57a9977dc34bd8ac0159d07280ffaf795",
      "tree": "441b7c35197b14e77a450c80e4bbd0f70ca90d71",
      "parents": [
        "679f85df8c8c572a11cf14da9828610386c3849d"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Tue May 24 18:25:29 2011"
      },
      "committer": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Tue May 24 21:32:20 2011"
      },
      "message": "Upgrade SAFT to support newer firmware.\n\nThe most recent x86 firmware provides much more verbose\ninformation about the recovery reasons than before (see the\ndocument mentioned in the bug entry). SAFT chokes observing\nrecovery reason values it is not familiar with.\n\nThis CL extends the boot_vector generation facility to accept all\npossible recovery reasons, which is a quick solution mapping\nseveral recovery paths into the same boot vector value. This\n\u0027many to one\u0027 mapping creates an opening for the test missing the\ncases when the BIOS reports recovery reasons incorrectly, but\nstill within the acceptable set. This will have to be addressed\nin a separate CL.\n\nBUG\u003dchromium-os:15564\nTEST\u003dmanual\n\nRun SAFT on the ZGB image built off the top of the tree. Watch it\nsucceed.\n\nChange-Id: I966696efb064154683c18837656e268f448f4144\nSigned-off-by: Vadim Bendebury \u003cvbendeb@chromium.org\u003e\nReviewed-on: http://gerrit.chromium.org/gerrit/1465\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\n"
    },
    {
      "commit": "679f85df8c8c572a11cf14da9828610386c3849d",
      "tree": "e3bca17419bf68dc121e4d2464cd1e3b87f62699",
      "parents": [
        "1bf1d8acf6bfdd92dd2527cbe315c7a65025b5ab"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Fri May 20 21:13:26 2011"
      },
      "committer": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Mon May 23 20:04:16 2011"
      },
      "message": "Make SAFT work again under 2.6.38 kernel.\n\nThis CL fixes the issue where SAFT fails to determine that it is\nrunning on a Chrome platform. The problem is due to the fact that\nthe file /proc/version_signature does not exist anymore in the\nnew kernel.\n\nAnother way of determining the platform is used now: looking for\nthe appropiate string in /etc/lsb-release. Also, both places\nwhere this information is required are using the same function to\ndetermine if the test is running on a host or on a target.\n\nBUG\u003dhromium-os:15551\nTEST\u003dmanual\n\nexecute runtests.sh on the host and on a target running under\n2.6.38, it succeeds on both platforms.\n\nChange-Id: I32a919858d701ba933c40bb058eabcc81e18ab12\nSigned-off-by: Vadim Bendebury \u003cvbendeb@chromium.org\u003e\nReviewed-on: http://gerrit.chromium.org/gerrit/1321\nReviewed-by: Randall Spangler \u003crspangler@chromium.org\u003e\n"
    },
    {
      "commit": "1bf1d8acf6bfdd92dd2527cbe315c7a65025b5ab",
      "tree": "12f9333cf146dcb1d881395d2c77aa9441a158f3",
      "parents": [
        "c03407353d32a0436eb84413103427ef53ca6726"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Tue Apr 19 23:02:13 2011"
      },
      "committer": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Tue Apr 19 23:02:13 2011"
      },
      "message": "Fix SAFT to work on all x86 platforms using crossystem.\n\nThis is the second and final CL restoring SAFT functionality\non X86 platforms. The first one was\n\nhttp://codereview.chromium.org/6849042/\n\nThis change\n\n- builds up the VECTOR_MAP to cover all legacy boot vector\n  values\n\n- adds the provision to modify the map at run time on Mario\n  (because Mario firmware always reports the recovery switch\n  state as \u0027ON\u0027 if booted in recovery mode)\n\n- adds test cases to verify this map adjustment on Mario\n  and to verify proper reporting of failed shel commands\n\nChange-Id: I9982f53ba8a5cc286eb8767686e714e22140f892\n\nBUG\u003dchrome-os-partner:2617\nTEST\u003dmanual\n\n- run SAFT on Mario, Alex and ZGB, follow the directions\n  (unplug and plug back in the USB flash stick a required).\n- Observe SAFT complete successfully (the /tmp/saft.log file\n  contains \u0027We are done!\u0027 as the last line.\n\nReview URL: http://codereview.chromium.org/6881019\n"
    },
    {
      "commit": "c03407353d32a0436eb84413103427ef53ca6726",
      "tree": "14f83471e22903f8bbdb72bc6fb0a8cd2b270e33",
      "parents": [
        "eb153c0d0a4e8477df6e1e1b306d82916f346d06"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Mon Apr 18 20:53:04 2011"
      },
      "committer": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Mon Apr 18 20:53:04 2011"
      },
      "message": "Introduce crossystem wrapper for SAFT.\n\nThere has been an effort under way to abstract platform\nspecific information through the \u0027crossystem\u0027 utility, which\nis capable of discovering information in platform specific\nfashion and representing it in a unified way on all\nplatforms.\n\nThe BIOS ACPI on some platforms has been modified to support\nthis, which of course broke SAFT completely.\n\nThis CL introduces a wrapper for crossystem to derive all\nnecessary information in a target independent way and\nemulate information previously read directly from ACPI.\n\nThe actual SAFT fix will come in the next CL.\n\nThe \u0027crossystem\u0027 wrapper is a class which runs the\ncrossystem utility to retrieve or set the crossystem\nparameters..\n\nThe __getattr__() method override is used to get the\nvalue of an arbitrary crossystem parameter, so that\ncrossystem.name causes the shell command\n\n\u0027crossystem name\u0027\n\ninvocation to retrieve the value of parameter \u0027name\u0027.\n\nThe __setattr__() method override is used to set the\ncrossystem parameters, such that assigning\n\ncrossystem.name \u003d value\n\ncauses a shell command\n\n\u0027crossystem \"name\u003dvalue\"\u0027\n\nto be invoked. The only name not passed to the shell\ncommand, but set directly is \u0027cros_if\u0027,  which is a\nmember of the crossystem wrapper class.\n\nChange-Id: I59b547d899598501185a443cf2cffcc00330b37c\n\nBUG\u003dchrome-os-partner:2617\nTEST\u003don the workstation:\n\nvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\nes^o: home/vbendeb/projects/1repo/src/platform/saft 119 \u003e ./runtests.sh\n....\n----------------------------------------------------------------------\nRan 4 tests in 0.032s\n\nOK\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nReview URL: http://codereview.chromium.org/6849042\n"
    },
    {
      "commit": "eb153c0d0a4e8477df6e1e1b306d82916f346d06",
      "tree": "2952b0c4420aece7898b608b7817b9527c05353b",
      "parents": [
        "b25ef92a5ef72942fab6a5329c425122774a3975"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Wed Mar 09 20:58:14 2011"
      },
      "committer": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Wed Mar 09 20:58:14 2011"
      },
      "message": "A few recent changes broke SAFT operation.\n\n- the BIOS image now contains different firmware flavors\n- the mosys utility now deploys locking and can fail to run\n  if other programs are running.\n\nTo address the issue SAFT determines if firmware sections\nare not the same and copies firmware B into firmware A.\n\nA `-f\u0027 flag is being added to mosys command line to avoid\nlocking attempts (it operates on a separate file anyways).\n\nChange-Id: I37d14696a7370bdc23abd1add67814ce8fe156dd\n\nBUG\u003dchrome-os-partner:2617\nTEST\u003dsee below\n\n. build the test image\n. install it on DUT\n. copy a new firmware image into /var\n. run the test\n localhost saft # /usr/sbin/firmware/saft/runtests.sh /var/\u003cnew firmware\u003e\n. follow the prompts (unplugging/plugging back the USB stick)\n. After the test ends observe test results:\n\nlocalhost saft # grep \u0027modify firmware A\u0027 /var/fw_test_log.txt\n02:36:23 PM: modify firmware A to match B\nlocalhost saft # tail -1 /var/fw_test_log.txt\n03:00:09 PM: we are done!\nlocalhost saft #\n\nReview URL: http://codereview.chromium.org/6649008\n"
    },
    {
      "commit": "b25ef92a5ef72942fab6a5329c425122774a3975",
      "tree": "e6b32e2cff5cff81fdfedb644008444fdfc46972",
      "parents": [
        "28d8241037a3cace5804d37c742ad3db146b0851"
      ],
      "author": {
        "name": "Hung-Te Lin",
        "email": "hungte@chromium.org",
        "time": "Thu Mar 03 07:10:14 2011"
      },
      "committer": {
        "name": "Hung-Te Lin",
        "email": "hungte@chromium.org",
        "time": "Thu Mar 03 07:10:14 2011"
      },
      "message": "saft: update \u0027flashrom_util\u0027 to use new syntax\n\nUsing \u0027iotools\u0027 to control flashrom target is obsoleted.\nThe new parameter provided by \u0027flashrom\u0027 utility is better and prevents potential\nrace condition, so all scripts using flashrom should apply the new syntax.\n\nBUG\u003dchromium-os:11339\nTEST\u003dpassed SAFT on CR48 (by josephsih)\n\nChange-Id: Ia5f7d7ea3bc087b4506a101407a21087b4e278b7\n\nReview URL: http://codereview.chromium.org/6594114\n"
    },
    {
      "commit": "28d8241037a3cace5804d37c742ad3db146b0851",
      "tree": "52db5740972f73d25c689f2ea45c0a85cf51304a",
      "parents": [
        "cc5a9ea0c0c9c867de1ad8c58fc95b354c554eb7"
      ],
      "author": {
        "name": "Hung-Te Lin",
        "email": "hungte@chromium.org",
        "time": "Tue Mar 01 02:23:13 2011"
      },
      "committer": {
        "name": "Hung-Te Lin",
        "email": "hungte@chromium.org",
        "time": "Tue Mar 01 02:23:13 2011"
      },
      "message": "saft: update flash map names definition for new section naming\n\nWe need to update the SAFE definition to work with new BIOS section names.\nNOTE: we should refine this script to use official names in the future.\n\nBUG\u003dchrome-os-partner:2158\nTEST\u003dcherry-picked from http://codereview.chromium.org/6484031\n\nChange-Id: I1bf6a1f49839798fd8b1ffebbc76c067824e83eb\n\nReview URL: http://codereview.chromium.org/6596063\n"
    },
    {
      "commit": "cc5a9ea0c0c9c867de1ad8c58fc95b354c554eb7",
      "tree": "6f7a7db4540f913c64901426f1a2edc102313ea4",
      "parents": [
        "9a7ca5dece1588e154851c3295c8d11a495544d2"
      ],
      "author": {
        "name": "Randall Spangler",
        "email": "rspangler@chromium.org",
        "time": "Tue Feb 08 22:57:20 2011"
      },
      "committer": {
        "name": "Randall Spangler",
        "email": "rspangler@chromium.org",
        "time": "Tue Feb 08 22:57:20 2011"
      },
      "message": "Change realpath to readlink -f\nAdd inherit-review-settings-ok\n\nBUG\u003dchrome-os-partner:2259\nTEST\u003dmanually verified \u0027readlink -f\u0027 and \u0027realpath\u0027 provide the same output\n\nReview URL: http://codereview.chromium.org/6420002\n\nChange-Id: I571dccf6be29e914d8070036b187a736cdf3655b\n"
    },
    {
      "commit": "9a7ca5dece1588e154851c3295c8d11a495544d2",
      "tree": "35957f07e8f662faa81d6b728816307fba1889c7",
      "parents": [
        "bbebc2bac3c166c4665b9b9822a84afc9ef18089"
      ],
      "author": {
        "name": "Joseph Hwang",
        "email": "josephsih@google.com",
        "time": "Wed Nov 17 06:18:25 2010"
      },
      "committer": {
        "name": "Joseph Hwang",
        "email": "josephsih@google.com",
        "time": "Wed Nov 17 06:18:25 2010"
      },
      "message": "Fixed bug in cmp_boot_vector\n\nFixed a bug in cmp_boot_vector of saft_utility.py. And added unit test cases for it.\n\nChange-Id: Ie213d6743765bfa8062ad6255be9bf9fb134066f\n\nBUG\u003dchromium-os:8964\nTEST\u003dFollow SAFT standard test\n\nReview URL: http://codereview.chromium.org/5145001\n"
    },
    {
      "commit": "bbebc2bac3c166c4665b9b9822a84afc9ef18089",
      "tree": "fe1f8cf7ea764a4a34e233fd1b81c1dfaa5c9218",
      "parents": [
        "f3ca903b7699371686c4a324442c54893d0a2e4e"
      ],
      "author": {
        "name": "Joseph Hwang",
        "email": "josephsih@google.com",
        "time": "Thu Nov 11 02:16:41 2010"
      },
      "committer": {
        "name": "Joseph Hwang",
        "email": "josephsih@google.com",
        "time": "Thu Nov 11 02:16:41 2010"
      },
      "message": "Adding cgpt tests in SAFT\n\nWhat are changed:\n\n  Adding a cgpt test loop function in cgpt_state.py. To create a new cpgt test\n  case, you need to add a cgpt test tuple in cgpt_state_seq. It takes one reboot\n  for each cgpt test. There are 12 steps in current cgpt_state_seq.\n\n  cpgt test has its own state machine. All cgpt steps are seen as the same step\n  number from the view of firmware test object. We can add a sub-step number to\n  it later if required.\n\n  The expected boot vector in FST\u0027s TEST_STATE_SEQUENCE is set as \u0027*:*:*:*:*\u0027 as\n  the boot vectors during the test loop of all cgpt tests will be examined\n  inside cgpt state machine rather than FST.\n\nChange-Id: Idf29d31386de133cc4a606d06485ffd55b08f9bd\n\nBUG\u003d\nTEST\u003d Follow SAFT standard test procedure. Check \u0027/var/fw_test_log.txt\u0027\nfor \u0027we are done\u0027.\n\nReview URL: http://codereview.chromium.org/4106012\n"
    },
    {
      "commit": "f3ca903b7699371686c4a324442c54893d0a2e4e",
      "tree": "e0f28404ef091d511cef985fb48973228e8a3c7b",
      "parents": [
        "3f200dc8dec6206a9cf710d785ffc8cd83a13339"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Tue Nov 02 04:01:05 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Tue Nov 02 04:01:05 2010"
      },
      "message": "Enable TPM firmware rollback testing\n\nThis change introduces SAFT firmware rollback testing. It is\nimplemented similar to kernel rollback testing.\n\nFor the new tests to succeed the latest firmware is\nrequired, because the test is modifying TPM stored firmware\nversion value while in recovery mode. Until recently to be\nable to do that the firmware required to be in developer\nmode.\n\nFlashrom image initialization is now done in one place\ninstead of being scattered around the module. It is not\nrequired during all steps, but this makes the code much\ncleaner.\n\nChange-Id: Iefc9d2085487e581d345c39841804f5143d34bf2\n\nBUG\u003dchromium-os:6806\nTEST\u003dRan SAFT on a mario testing G4 firmware.\n\nThe test iterates through 21 steps and reports success in\nthe end.\n\nAlso observed that the kernel and firmware versions and the\nTPM contents  stay where they were at the beginning of the\ntest.\n\nReview URL: http://codereview.chromium.org/4100015\n"
    },
    {
      "commit": "3f200dc8dec6206a9cf710d785ffc8cd83a13339",
      "tree": "5f924c150727d57ba745a59bd154dece6b49cf47",
      "parents": [
        "ac8b91743fa5042e285298dfe85ad05b619c523b"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Fri Oct 22 22:22:26 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Fri Oct 22 22:22:26 2010"
      },
      "message": "This CL builds upon previous SAFT enhancements and\nintroduces support for TPM kernel rollback testing.\n\nThe test as introduced checks the following:\n\n- kernels with version below the current TMP version\n  do not get booted.\n\n- if there is no kernel with the version equal or exceeding\n  the TPM kernel version value - boot in recovery mode.\n\n- if both kernels\u0027s versions exceed the current TPM kernel\nversion value - verify that the BIOS bumps up the TPM kernel\nversion to the lowest of the two available kernels. (as of\nnow in this test both kernels have the same version number)\n\nA new module is being introduced to support TPM testing.\n\nThere are two TPM NvRam spaces defined for CromeOs devices,\none for the BIOS and another one for the kernel. The spaces,\namong other things, contain version numbers to prevent\nrollback attempts.\n\nThe new module allows to read the spaces\u0027 contents and to\nwrite into them.  Writing into the kernel space requires\nthe machine to be booted in recovery mode, writing into the\n BIOS  space (not yet tested) requires the machine to be\nbooted in developer mode.\n\nOn top of booting in these special  modes, the TPM lock\nneeds to be disabled for the write operation to succeed.\nThis requires editing of the TPM  upstart config file\n(done in  tpm_handler:TpmHandler:enable_write_access()),\nwhich in turn requires the root file system to be writable\nwhen booting in recovery mode. Hence the modifications in\nruntests.sh which first enable read/write mount of\nthe USB flash hosted the root file system and then modify\nthe kernel command line to mount it rw when booting off\nthe USB device.\n\nChange-Id: I3a44ae51830f3525f51f03611d8b72a7039c9169\n\nBUG\u003dchromium-os:1976\nTEST\u003dmanual\n\n- build packages and the image as modified\n- install the new image on the device and restart it\n- place an alternative firmware image in /tmp\n- run the SAFT as follows:\n  /usr/sbin/firmware/saft/runtests.sh /tmp/\u003cnew firmware\u003e.fd\n- follow the prompts (unplug and plug the flash device as\n  required\n- observe SAFT to pass all 17 steps\n- look for \u0027we are done\u0027 in /tmp/saft.log after test\n  completes\ninto\n\nReview URL: http://codereview.chromium.org/3781016\n"
    },
    {
      "commit": "ac8b91743fa5042e285298dfe85ad05b619c523b",
      "tree": "bccf47be1349db595fd7a13101925c776c67d73a",
      "parents": [
        "c0f633df9f1dc380257b1a9441cd52665ad95aca"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Oct 18 23:36:43 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Oct 18 23:36:43 2010"
      },
      "message": "Provide the means of changing the firmware/kernel versions.\n\nThis CL introduces the ability to modify kernel and firmware\nversions to support TPM rollback prevention testing.\n\nBoth firmware and kernel handlers are being expanded to\nallow changing the appropriate images\u0027 versions and re-\nsigning.\n\nThe unit tests are being modified to verify the new added capability.\n\nChange-Id: I2891c3ff50a76af29923f7f9d963d7eb2e017e4d\n\nBUG\u003dchromium-os:1976,chromium-os:6806\nTEST\u003dmanual\n\nThe unit tests pass. The system is still bootable after\nchanging the versions back and forth.\n\nReview URL: http://codereview.chromium.org/3861001\n"
    },
    {
      "commit": "c0f633df9f1dc380257b1a9441cd52665ad95aca",
      "tree": "02f219f82daeb0937521b13c1be6696d8194004a",
      "parents": [
        "8e092ff920e6b5ccf0f938a96fa190bfb286adc0"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Oct 18 17:25:43 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Oct 18 17:25:43 2010"
      },
      "message": "Provide some means of displaying the current SAFT status.\n\nDifferent means of displaying information on the target\nscreen were attempted, they all failed because the main X\nserver takes over the screen and prevents any access to it\nuntil the user is authenticated.\n\nEventually the approach used by autotest (see\nclient/site_tests/graphics_GLBench/graphics_GLBench.py in\nthe autotest repository) was implemented.\n\nRunning SAFt causes the text \"SAFT\u0027s performing step #\u003cnum\u003e\"\ndisplayed after every restart. It takes a while before he\ntext shows up (the SAFT startup script needs to detect the\nFlash device first and then to start the separate instance\nof the X server). It helps on the long phases (when the\nflashrom is reprogrammed).\n\nThis framework could be enhanced to display text specific\nmessages, or use a simpler windowing method, but it is\na good enhancement of SAFT usability even as is.\n\nA simple window control module is introduced in window.py,\nit allows to start a thread which generates a window with\nthe text passed in to the display_text() method.\n\nThe saft.sh startup file is being modified to start the\nalternative X server using the provided rudimentary config\nfile (saft.xorg.conf).\n\nsaft_utility.py is modified to handle the window module\nproperly, especially making sure that the window is shut\ndown on any abnormal termination. Also some typos and pylint\nwarnings are being fixed.\n\nruntests.sh is being modified to make the saft script\nrunnable (recent security enhancements change /tmp mounting\noptions to noexec, it needs to be worked around now.\n\nBUG\u003dchromium-os:7846\nTEST\u003dmanual:\n\nRan the test, observed the progress messages displayed after\nevery restart.\n\nReview URL: http://codereview.chromium.org/3770005\n\nChange-Id: I1c43348645bc66c0438bd84bb2789b612ffdbcb5\n"
    },
    {
      "commit": "8e092ff920e6b5ccf0f938a96fa190bfb286adc0",
      "tree": "0a3e6831f59a0f2a968f8ac8b21186ce6c371556",
      "parents": [
        "72f7d7ade5c0b0c7a671a6296e028e4d81f825e5"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Thu Sep 16 19:24:22 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Thu Sep 16 19:24:22 2010"
      },
      "message": "Introduce gpt tests in SAFT.\n\nThis CL introduces infrastructure which allows SAFT to\naccess gpt (GUID partition table) information using the\ncgpt utility.\n\nThere are may aspects of gpt management which can and should\nbe tested, this CL just creates a module which provides\na means of retrieving gpt information and changing it for\nthe test purposes, and adds one gpt test as an example.\n\nA new module (cgpt_handler.py) is introduced along with the\nunit test (test_cgpt_handler.py). See module docstrings\nfor details of operations.\n\nsaft_utility.py is being cleaned up as follows:\n\n- imported modules arranged alphabetically, global then\n  local\n\n- if an attempt to execute a step results in a failure, call\nfinish_saft(False)to remove the saft \u0027follow up\u0027 script.\nThis is needed because gpt tests are more involved and can\nnot be reduced to checking of the boot vector value.\n\nThe target comes up with the proper boot vector, but the\ncgpt reported values could still be wrong. In case cgpt\noutput does not match expected values, the test terminates.\n\n- in case of error, do not call chros_if.shut_down(). This\nwill prevent moving the log file into /var directory and\nremoval of the test temp directory (/var/.fw_test on the\nflash device). This will allow to examine the state of the\nfailed test in more details. The last step error messages\nare still available in /tmp/saft.log\n\nAlso, a gpt related test case is being added:\n\n- set the kernel tries attribute to 15 and observe it to\nbe changed to 14 after the reboot.\n\nMore gpt test can be added following this example.\n\nChange-Id: Idc5a36baed8a8a0241dbeca8f62abe75e2136ba1\n\nBUG\u003dchromium-os:1994\nTEST\u003dsee below\n\nA new image was built and the test was run several times.\nAll test pass, the following section is included in the log file:\n\n06:17:03 PM: calling \u003cbound method FirmwareTest.cgpt_test_start of \u003c__main__.FirmwareTest object at 0x6f69c62c\u003e\u003e\n06:17:03 PM: Executing cgpt show /dev/sda\n06:17:03 PM: Executing cgpt add -i 2 -S 0 -P 10 -T 15 /dev/sda\n06:17:03 PM: Executing cgpt add -i 4 -P 9 -T 15 /dev/sda\n06:17:03 PM: Executing reboot\n06:17:16 PM: Executing cgpt show /dev/sda\n06:17:16 PM: Executing rootdev -s\n06:17:16 PM: Rebooted into state 1:1:0:0:3 on step 10\n06:17:16 PM: startup log contents:\n06:17:16 PM: Found sdc after 2 seconds\n06:17:16 PM: calling \u003cbound method FirmwareTest.cgpt_test_1 of \u003c__main__.FirmwareTest object at 0x6f71762c\u003e\u003e\n06:17:16 PM: Executing cgpt show /dev/sda\n06:17:16 PM: Executing reboot\n06:17:30 PM: Executing cgpt show /dev/sda\n06:17:30 PM: Executing rootdev -s\n06:17:30 PM: Rebooted into state 1:1:0:0:3 on step 11\n\nReview URL: http://codereview.chromium.org/3385007\n"
    },
    {
      "commit": "72f7d7ade5c0b0c7a671a6296e028e4d81f825e5",
      "tree": "4639c566bec2cb22f5cd7cfbc402d06980107819",
      "parents": [
        "09fa800512e9edf1ca3b5042979024f2792dd3a9"
      ],
      "author": {
        "name": "Duncan Laurie",
        "email": "dlaurie@chromium.org",
        "time": "Tue Sep 14 22:13:37 2010"
      },
      "committer": {
        "name": "Duncan Laurie",
        "email": "dlaurie@chromium.org",
        "time": "Tue Sep 14 22:13:37 2010"
      },
      "message": "Fix typo: formware -\u003e firmware\n\nBUG\u003d\nTEST\u003ddocstring change only\n\nChange-Id: I3525921f6fe299d5a4355461204c79454c86106e\n\nReview URL: http://codereview.chromium.org/3386002\n"
    },
    {
      "commit": "09fa800512e9edf1ca3b5042979024f2792dd3a9",
      "tree": "c76439da1b54db1aea9d26daec6c6bf3e6f4f676",
      "parents": [
        "6bbe6ba69f92a902df5aa8e077225e8eabe897f7"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Sep 13 17:38:04 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Sep 13 17:38:04 2010"
      },
      "message": "Move the utils module and use the qualified rootdev command.\n\nThis CL completes SAFT modifications required due to recent\nChromeOS system changes (verified Boot on Flash drive and\nprogramming just one of the two main storage partition\npairs). `rootdev -s\u0027 is used instead of \u0027rootdev\u0027 to avoid\nnonzero exit status and make sure that the actual device\nname is reported instead of the virtual one (/dev/dm-0)\n\nThis change also moves flashrom_util.py into the saft/\nsubdirectory renaming it into saft_flashrom_util.py, to\navoid confusion with the autotest version of this file.\n\nAnother modification is adding code to runtest.sh\nto create the proper SAFT environment (where both file\nsystems are populated).\n\nSee http://sites.google.com/a/chromium.org/dev/for-testers/saft\nwhich describes SAFT implementation and usage.\n\nChange-Id: I9dcc2f052b629e1bc64db2fad4515a3e8526ec84\n\nBUG\u003dchromium-os:6345\nTEST\u003dmanual\n\nRan saft on the target, had it run to completion reporting\nsuccess. Then used a flawed frimware, ran SAFT again, observed it to stop on error. Checked that in both cases\nappropriate results were reported in /var/fw_test_log.txt.\n\nReview URL: http://codereview.chromium.org/3347020\n"
    },
    {
      "commit": "6bbe6ba69f92a902df5aa8e077225e8eabe897f7",
      "tree": "abdf045f63b4f604c726fb655c63c42006655f87",
      "parents": [
        "9e0b8001e8f2918eaf86e2b14d61de209596ee3a"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Wed Sep 08 01:23:21 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Wed Sep 08 01:23:21 2010"
      },
      "message": "Make SAFT use layout retrieved from the BIOS image.\n\nThis CL modifies x86-generic/fashrom_util.py to use the\nmosys tool to retrieve the flashrom memory map from the\nBIOS image and use it unless explicitly overridden by the\ncaller.\n\nflashrom_handler.py is being modified not to pass layout\non most flash read/write operations. Only in case the whole\nflash write is requested - a custom map is used.\n\nA cllass (LayoutScraper) is introduced in flashrom_util.py\nto retrieve the text map from the image (using mosys) and\nconvert it into a layout dictionary. Default maps, ec\nsupport and layout compiler are being deleted from this\nfile, as it is not used by any other package, and SAFT does\nnot require these features. The upcoming CL will move\n flashrom_util.py into saft subdirectory.\n\nChange-Id: Ifcdc59e4c2567b2d815de9f64fb41c30f0f83c97\n\nBUG\u003dchrome-os-partner:920\nTEST\u003dmanual. Ran SAFT on a target, it still fails complaining\nabout wrong BINF values when both firmware images are\ncorrupted. Once this issue is fixed by the vendor full log\nwill be posted here.\n\nReview URL: http://codereview.chromium.org/3328008\n"
    },
    {
      "commit": "9e0b8001e8f2918eaf86e2b14d61de209596ee3a",
      "tree": "f41bc02ee22bf67fae6d4f0f6265a32022402af3",
      "parents": [
        "8566737c3b750b0516477cb7b7d6e2feb68ab3ee"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Thu Sep 02 22:09:08 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Thu Sep 02 22:09:08 2010"
      },
      "message": "Rework SAFT to operate in verified rootfs environment.\n\nWith the advent of verified rootfs SAFT became unusable, as\nit is remounting the root file system in rw mode to install\nan upstart script.\n\nThe solution is to have an immutable upstart script (as\nbeing done under ttp://codereview.chromium.org/3330005/show)\nand to modify the SAFT framework to support that, which is\nbeing done by this CL.\n\nThe immutable script tries to find the shell script\ninstalled during SAFT initialization. The shell script is\ninstalled on the flash drive\u0027s stateful partition. in\n/var/saft.sh.\n\nTo make sure that the file names used by the immutable\nupstart script and SAFT stay in sync, the upstart script is\n defining the vital file names through \u003cname\u003e\u003d\u003cvalue\u003e\nstatements, and SAFT parses the upstart script to retrieve\n these values.\n\nA few bugs were uncovered while testing these changes, they\nare being fixed too.\n\nSince the names of the\nChange-Id: I687512794ac5e5533fc5e993312dff80cce04892\n\nBUG\u003dchromium-os:6345\nTEST\u003dmanual\n\nThe tests pass, the actual test log will be added after\nfinalizing the upstart script changes.\n\nReview URL: http://codereview.chromium.org/3297002\n"
    },
    {
      "commit": "8566737c3b750b0516477cb7b7d6e2feb68ab3ee",
      "tree": "3dbbe66e6f171492dfa591b53e24d6f4f58f390c",
      "parents": [
        "cc650d9a4ee10587810af8bfd2f78567e9affbe4"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sun Aug 29 05:09:21 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sun Aug 29 05:09:21 2010"
      },
      "message": "Improve SAFT robustness.\n\nThis CL borrows from investigation and implementation of\nhttp://codereview.chromium.org/3071024/show.\n\nIndeed in certain cases instantiation of flash devices takes\na while. This change accomplishes the following:\n\n- allow to override default flash device (sdb) using\n  environment variable FLASH_DEVICE\n\n- wait for the device to show up before trying to mount it.\n  Terminate with error if the device does not show up\n  after 15 seconds.\n\n- allow 30 seconds for ACPI to settle. It is somehow taking\n  a long tome to get its act together when running off the\n  flash card on certain platforms. Report time taken in the\n  log.\n\n- do not remount the flash device if it is already mounted\n  and use \"/\" as the mount point when the flash device is\n  hosting the root file system.\n\n- if the startup script generates output - add it to the\n  log file in the beginning of every test step.\n\n- rearrange test steps to group them logically.\n\nChange-Id: If2d7034ee8f89974ccc2477e2fbc5b62fea07443\nBUG\u003dchromium-os:5424\nTest\u003dsee below\n\nThe entire test completes successfully, the delayed flash\ndevice mounts and ACPI device initializations are reported\nin the log as follows:\n.\n.\n07:33:26 PM: Detected USB device after 5 retry(ies)\n.\n07:37:02 PM: ACPI took 11 cycles\n.\n.\n07:40:51 PM: we are done!\n\nReview URL: http://codereview.chromium.org/3112038\n"
    },
    {
      "commit": "cc650d9a4ee10587810af8bfd2f78567e9affbe4",
      "tree": "31a35835faf402ce59443fc4008ff3cc83dd92a1",
      "parents": [
        "28ff97e9e9f0a6bca6ae654ba9d517441f12907a"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Mon Aug 23 03:38:08 2010"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Mon Aug 23 03:38:08 2010"
      },
      "message": "Add test step that corrupts both firmware\n\nBUG\u003dchromium-os:1858\nTEST\u003dmanual\n\nThis patch set implements a test step that invalidate both firmware.\n\nTest Procedure:\n1. Copy saft to a USB key\n2. Boot test machine from USB key and execute saft_utility.py\n3. saft_utility.py will reboot the machine and carry on subsequent tests\n   automatically\n4. Test result will be stored on USB key following the path\n   /var/.fw_test/fw_test_log.txt\n\nTest Result:\nThe following is a excerpt of /var/.fw_test/fw_test_log.txt:\n...\n02:15:41 PM: Executing cgpt show /dev/sda\n02:15:41 PM: Executing rootdev\n02:15:41 PM: Rebooted into state 1:1:0:0:3 on step 6\n02:15:41 PM: calling \u003cfunction \u003clambda\u003e at 0x6f7bd87c\u003e\n02:15:41 PM: Corrupting firmware a\n02:16:21 PM: Corrupting firmware b\n02:17:00 PM: Executing reboot\n09:21:35 PM: Executing cgpt show /dev/sda\n09:21:35 PM: Executing rootdev\n09:21:35 PM: Rebooted into state 1:0:0:1:3 on step 7\n09:21:36 PM: calling \u003cfunction \u003clambda\u003e at 0x6f758c6c\u003e\n09:21:36 PM: Restoring firmware a\n09:22:17 PM: Restoring firmware b\n09:22:57 PM: Executing reboot\n...\n02:24:10 PM: we are done!\n\nThe SAFT successfully executes all test (while ignoring boot state\nvector at step 7).\n\nReview URL: http://codereview.chromium.org/3135004\n"
    },
    {
      "commit": "28ff97e9e9f0a6bca6ae654ba9d517441f12907a",
      "tree": "e28c30e47e15bf0d1a8af47bed78a9054f249fc3",
      "parents": [
        "2df087c66fc9ecad7d8907a5cddb7bca97372374"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Aug 16 18:38:45 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Aug 16 18:38:45 2010"
      },
      "message": "Wrap up SAFT to provide default startup environment.\n\nThis CL does the following:\n\n- introduce a shell script which can be used to start\n  SAFT from a standard released image\n\n- add code to retrieve the root public key from the\n  firmware running at the beginning of the test (needed\n  since the keys are not available in /etc/devkeys anymore)\n\n- add a test case to test key retrieval code\n\nChange-Id: I94d03d7bc2e37d6a43f84cccee2a6acb36d00c31\n\nBUG\u003dchromium-os:4801\nTEST\u003dsee below:\n\n- install the new generated ChromeOS image on a ZGA\n- leave the flash drive plugged in\n- restart the machine\n- once it comes up place a new firmware image into\n  /tmp/ZGA_010b.fd\n- invoke SAFT as follows:\n  sudo /usr/sbin/firmware/saft/runtests.sh /tmp/ZGA_010b.fd\n- wait til the test finishes running\n\nExpected results: right after the start the untitest success\nreports are printed on the console. Then the machine resent several times. Once it settles, the following is found in /media/C-STATE/var/saft_log.txt:\nlocalhost ~ # cat /media/C-STATE/var/saft_log.txt\n11:27:26 AM: Automated firmware test log generated on Aug 13 2010\n11:27:26 AM: Executing rootdev\n11:27:26 AM: Original boot state 1:1:0:0:3\n11:27:30 AM: Executing vbutil_firmware --verify /tmp/tmpOMbIY3/var/.fw_test/VBOOTA --signpubkey /tmp/tmpOMbIY3/var/.fw_test/root.pubkey  --fv /tmp/tmpOMbIY3/var/.fw_test/FVMAIN\n11:27:31 AM: Executing vbutil_firmware --verify /tmp/tmpOMbIY3/var/.fw_test/VBOOTB --signpubkey /tmp/tmpOMbIY3/var/.fw_test/root.pubkey  --fv /tmp/tmpOMbIY3/var/.fw_test/FVMAINB\n11:27:31 AM: Executing vbutil_firmware --verify /tmp/tmpOMbIY3/var/.fw_test/VBOOTA --signpubkey /tmp/tmpOMbIY3/var/.fw_test/root.pubkey  --fv /tmp/tmpOMbIY3/var/.fw_test/FVMAIN\n11:27:31 AM: Executing vbutil_firmware --verify /tmp/tmpOMbIY3/var/.fw_test/VBOOTB --signpubkey /tmp/tmpOMbIY3/var/.fw_test/root.pubkey  --fv /tmp/tmpOMbIY3/var/.fw_test/FVMAINB\n11:27:31 AM: Executing df /tmp/tmp.XhhtrzKqdA/usr/sbin/firmware/saft\n11:27:31 AM: Executing blkid\n11:27:31 AM: Executing rootdev\n11:27:31 AM: Executing mount\n11:27:31 AM: Handling //etc/init/fw_test.conf\n11:27:31 AM: Executing rootdev\n11:27:31 AM: Executing mount\n11:27:31 AM: Handling /tmp/tmpF5QjlD/etc/init/fw_test.conf\n11:27:31 AM: Executing rootdev\n11:27:31 AM: Executing mount\n11:27:31 AM: Handling /tmp/tmp.XhhtrzKqdA/etc/init/fw_test.conf\n11:27:31 AM: program the new image\n11:28:02 AM: restart\n11:28:02 AM: Executing reboot\n11:28:28 AM: Executing cgpt show /dev/sda\n11:28:28 AM: Executing rootdev\n11:28:28 AM: Rebooted into state 1:1:0:0:3 on step 0\n11:28:28 AM: calling \u003cbound method FirmwareTest.set_try_fw_b of \u003c__main__.FirmwareTest object at 0x6f777dcc\u003e\u003e\n11:28:28 AM: Requesting restart with FW B\n11:28:28 AM: Executing reboot_mode --try_firmware_b\u003d1\n11:28:28 AM: Executing reboot\n11:28:45 AM: Executing cgpt show /dev/sda\n11:28:45 AM: Executing rootdev\n11:28:45 AM: Rebooted into state 1:2:0:0:3 on step 1\n11:28:45 AM: Executing reboot\n11:29:02 AM: Executing cgpt show /dev/sda\n11:29:02 AM: Executing rootdev\n11:29:02 AM: Rebooted into state 1:1:0:0:3 on step 2\n11:29:02 AM: calling \u003cbound method FirmwareTest.corrupt_firmware of \u003c__main__.FirmwareTest object at 0x6f6dedcc\u003e\u003e with parameter a\n11:29:02 AM: Corrupting firmware a\n11:29:44 AM: Executing reboot\n11:30:02 AM: Executing cgpt show /dev/sda\n11:30:02 AM: Executing rootdev\n11:30:02 AM: Rebooted into state 1:2:0:0:3 on step 3\n11:30:02 AM: calling \u003cbound method FirmwareTest.restore_firmware of \u003c__main__.FirmwareTest object at 0x6f732dcc\u003e\u003e with parameter a\n11:30:02 AM: Restoring firmware a\n11:30:44 AM: Executing reboot\n11:31:00 AM: Executing cgpt show /dev/sda\n11:31:00 AM: Executing rootdev\n11:31:00 AM: Rebooted into state 1:1:0:0:3 on step 4\n11:31:00 AM: calling \u003cbound method FirmwareTest.corrupt_kernel of \u003c__main__.FirmwareTest object at 0x6f6abdcc\u003e\u003e with parameter a\n11:31:00 AM: Corrupting kernel a\n11:31:00 AM: Executing dd if\u003d/dev/sda2 of\u003d/tmp/tmpqq9dif/var/.fw_test/kernel_header_dump bs\u003d1 count\u003d1\n11:31:00 AM: Executing dd if\u003d/tmp/tmpqq9dif/var/.fw_test/kernel_header_dump of\u003d/dev/sda2 bs\u003d1 count\u003d1\n11:31:00 AM: Executing reboot\n11:31:17 AM: Executing cgpt show /dev/sda\n11:31:17 AM: Executing rootdev\n11:31:17 AM: Rebooted into state 1:1:0:0:5 on step 5\n11:31:17 AM: calling \u003cbound method FirmwareTest.restore_kernel of \u003c__main__.FirmwareTest object at 0x6f7eddcc\u003e\u003e with parameter a\n11:31:17 AM: restoring kernel a\n11:31:17 AM: Executing dd if\u003d/dev/sda2 of\u003d/tmp/tmp5EgX7C/var/.fw_test/kernel_header_dump bs\u003d1 count\u003d1\n11:31:17 AM: Executing dd if\u003d/tmp/tmp5EgX7C/var/.fw_test/kernel_header_dump of\u003d/dev/sda2 bs\u003d1 count\u003d1\n11:31:17 AM: Executing reboot\n11:31:35 AM: Executing cgpt show /dev/sda\n11:31:35 AM: Executing rootdev\n11:31:35 AM: Rebooted into state 1:1:0:0:3 on step 6\n11:31:35 AM: calling \u003cbound method FirmwareTest.revert_firmware of \u003c__main__.FirmwareTest object at 0x6f658dcc\u003e\u003e\n11:31:35 AM: restoring original firmware image\n11:31:35 AM: Executing flashrom -w /tmp/tmpCDuPOS/var/.fw_test/flashrom.bak\n11:32:08 AM: Executing reboot\n11:32:26 AM: Executing cgpt show /dev/sda\n11:32:26 AM: Executing rootdev\n11:32:26 AM: Rebooted into state 1:1:0:0:3 on step 7\n11:32:26 AM: Removing upstart scripts\n11:32:26 AM: Executing df /tmp/sdb3/usr/sbin/firmware/saft\n11:32:26 AM: Executing blkid\n11:32:26 AM: Executing rootdev\n11:32:26 AM: Executing mount\n11:32:26 AM: Executing mount -o remount,rw /dev/root\n11:32:26 AM: Handling //etc/init/fw_test.conf\n11:32:26 AM: Executing rootdev\n11:32:26 AM: Executing mount\n11:32:26 AM: Executing mount /dev/sda5 /tmp/tmpQqJq_X\n11:32:26 AM: Handling /tmp/tmpQqJq_X/etc/init/fw_test.conf\n11:32:26 AM: Executing umount /tmp/tmpQqJq_X\n11:32:28 AM: Executing rootdev\n11:32:28 AM: Executing mount\n11:32:28 AM: Handling /tmp/sdb3/etc/init/fw_test.conf\n11:32:28 AM: we are done!\n\nReview URL: http://codereview.chromium.org/3128006\n"
    },
    {
      "commit": "2df087c66fc9ecad7d8907a5cddb7bca97372374",
      "tree": "f935f6ed256d3961303007d53708121fcf3a01ba",
      "parents": [
        "ce988eb4574d96d0981cd63a61fb59ebdff98022"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Aug 09 21:26:08 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Mon Aug 09 21:26:08 2010"
      },
      "message": "Introduce Kernel corruption tests to SAFT.\n\nThis CL introduces a module to support kernel modifications\nin course of SAFT testing.\n\nSome modifications were made to make unit testing easier\n(namely, the chromeos_interface will now create its own\nstate directory if not given a path on init).\n\nAnother enhancement is to change the logic of determining\nwhen to end the test. It makes it possible to have test\ntable entries with no actions associated with them.\n\nWhile testing it was discovered that restoring firmware\npartition A was not implemented properly. A fix is\nincorporated in this CL (the image needs to be read from the\nflashrom both before corrupting and restoring it).\n\nA simple shell script is being introduced to facilitate\nrunning the tests.\n\nBUG\u003dchromium-os:1994\nBUG\u003dchromium-os:4801\n\nTEST\u003dsee below\n\nAll unit test and the actual SAFT were ran using\nthe new script, starting the script as follows:\n\nvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\nlocalhost saft # ./runtests.sh ZGA_010b.fd\n...\n----------------------------------------------------------------------\nRan 3 tests in 0.050s\n\nOK\n..\n----------------------------------------------------------------------\nRan 2 tests in 2.543s\n\nOK\n.\n----------------------------------------------------------------------\nRan 1 test in 1.066s\n\nOK\n.\n----------------------------------------------------------------------\nRan 1 test in 12.493s\n\nOK\nExecuting df /tmp/sdb3/usr/bin/fw_test/saft\nExecuting mount\nExecuting mount /dev/sdb1 /tmp/tmphk_PLm\nExecuting cgpt show /dev/sda\nAutomated firmware test log generated on Aug 06 2010\nExecuting rootdev\nOriginal boot state 1:1:0:0:3\nExecuting vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTA --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAIN\nExecuting vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTB --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAINB\nExecuting vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTA --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAIN\nExecuting vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTB --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAINB\nExecuting df /tmp/sdb3/usr/bin/fw_test/saft\nExecuting blkid\nExecuting rootdev\nExecuting mount\nHandling //etc/init/fw_test.conf\nExecuting rootdev\nExecuting mount\nHandling /tmp/sdb3/etc/init/fw_test.conf\nExecuting rootdev\nExecuting mount\nHandling /tmp/tmpmQAuZn/etc/init/fw_test.conf\nprogram the new image\nrestart\nExecuting reboot\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe SAFT ran to completion with the following present\nin the log at the end of the test:\nvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n11:17:07 AM: Automated firmware test log generated on Aug 06 2010\n11:17:07 AM: Executing rootdev\n11:17:07 AM: Original boot state 1:1:0:0:3\n11:17:12 AM: Executing vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTA --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAIN\n11:17:12 AM: Executing vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTB --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAINB\n11:17:12 AM: Executing vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTA --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAIN\n11:17:12 AM: Executing vbutil_firmware --verify /tmp/tmphk_PLm/var/.fw_test/VBOOTB --signpubkey /etc/keys/root_key.vbpubk  --fv /tmp/tmphk_PLm/var/.fw_test/FVMAINB\n11:17:13 AM: Executing df /tmp/sdb3/usr/bin/fw_test/saft\n11:17:13 AM: Executing blkid\n11:17:13 AM: Executing rootdev\n11:17:13 AM: Executing mount\n11:17:13 AM: Handling //etc/init/fw_test.conf\n11:17:13 AM: Executing rootdev\n11:17:13 AM: Executing mount\n11:17:13 AM: Handling /tmp/sdb3/etc/init/fw_test.conf\n11:17:13 AM: Executing rootdev\n11:17:13 AM: Executing mount\n11:17:13 AM: Handling /tmp/tmpmQAuZn/etc/init/fw_test.conf\n11:17:13 AM: program the new image\n11:17:44 AM: restart\n11:17:44 AM: Executing reboot\n11:18:08 AM: Executing cgpt show /dev/sda\n11:18:08 AM: Executing rootdev\n11:18:08 AM: Rebooted into state 1:1:0:0:3 on step 0\n11:18:08 AM: calling \u003cbound method FirmwareTest.set_try_fw_b of \u003c__main__.FirmwareTest object at 0x6f6f3c8c\u003e\u003e\n11:18:08 AM: Requesting restart with FW B\n11:18:08 AM: Executing reboot_mode --try_firmware_b\u003d1\n11:18:08 AM: Executing reboot\n11:18:29 AM: Executing cgpt show /dev/sda\n11:18:29 AM: Executing rootdev\n11:18:29 AM: Rebooted into state 1:2:0:0:3 on step 1\n11:18:29 AM: Executing reboot\n11:18:49 AM: Executing cgpt show /dev/sda\n11:18:49 AM: Executing rootdev\n11:18:49 AM: Rebooted into state 1:1:0:0:3 on step 2\n11:18:49 AM: calling \u003cbound method FirmwareTest.corrupt_firmware of \u003c__main__.FirmwareTest object at 0x6f7abc8c\u003e\u003e with parameter a\n11:18:49 AM: Corrupting firmware a\n11:19:32 AM: Executing reboot\n11:19:51 AM: Executing cgpt show /dev/sda\n11:19:51 AM: Executing rootdev\n11:19:51 AM: Rebooted into state 1:2:0:0:3 on step 3\n11:19:51 AM: calling \u003cbound method FirmwareTest.restore_firmware of \u003c__main__.FirmwareTest object at 0x6f758c8c\u003e\u003e with parameter a\n11:19:51 AM: Restoring firmware a\n11:20:34 AM: Executing reboot\n11:20:54 AM: Executing cgpt show /dev/sda\n11:20:54 AM: Executing rootdev\n11:20:54 AM: Rebooted into state 1:1:0:0:3 on step 4\n11:20:54 AM: calling \u003cbound method FirmwareTest.corrupt_kernel of \u003c__main__.FirmwareTest object at 0x6f638c8c\u003e\u003e with parameter a\n11:20:54 AM: Corrupting kernel a\n11:20:54 AM: Executing dd if\u003d/dev/sda2 of\u003d/tmp/tmpGLMiBa/var/.fw_test/kernel_header_dump bs\u003d1 count\u003d1\n11:20:54 AM: Executing dd if\u003d/tmp/tmpGLMiBa/var/.fw_test/kernel_header_dump of\u003d/dev/sda2 bs\u003d1 count\u003d1\n11:20:54 AM: Executing reboot\n11:21:14 AM: Executing cgpt show /dev/sda\n11:21:14 AM: Executing rootdev\n11:21:14 AM: Rebooted into state 1:1:0:0:5 on step 5\n11:21:14 AM: calling \u003cbound method FirmwareTest.restore_kernel of \u003c__main__.FirmwareTest object at 0x6f7c2c8c\u003e\u003e with parameter a\n11:21:14 AM: restoring kernel a\n11:21:14 AM: Executing dd if\u003d/dev/sda2 of\u003d/tmp/tmpnFSFDA/var/.fw_test/kernel_header_dump bs\u003d1 count\u003d1\n11:21:14 AM: Executing dd if\u003d/tmp/tmpnFSFDA/var/.fw_test/kernel_header_dump of\u003d/dev/sda2 bs\u003d1 count\u003d1\n11:21:14 AM: Executing reboot\n11:21:38 AM: Executing cgpt show /dev/sda\n11:21:38 AM: Executing rootdev\n11:21:38 AM: Rebooted into state 1:1:0:0:3 on step 6\n11:21:38 AM: calling \u003cbound method FirmwareTest.revert_firmware of \u003c__main__.FirmwareTest object at 0x6f63ac8c\u003e\u003e\n11:21:38 AM: restoring original firmware image\n11:21:38 AM: Executing flashrom -w /tmp/tmpJ8HUdC/var/.fw_test/flashrom.bak\n11:22:12 AM: Executing reboot\n11:22:32 AM: Executing cgpt show /dev/sda\n11:22:32 AM: Executing rootdev\n11:22:32 AM: Rebooted into state 1:1:0:0:3 on step 7\n11:22:32 AM: Removing upstart scripts\n11:22:32 AM: Executing df /tmp/sdb3/usr/bin/fw_test/saft\n11:22:32 AM: Executing blkid\n11:22:32 AM: Executing rootdev\n11:22:32 AM: Executing mount\n11:22:32 AM: Executing mount -o remount,rw /dev/root\n11:22:32 AM: Handling //etc/init/fw_test.conf\n11:22:32 AM: Executing rootdev\n11:22:32 AM: Executing mount\n11:22:32 AM: Handling /tmp/sdb3/etc/init/fw_test.conf\n11:22:32 AM: Executing rootdev\n11:22:33 AM: Executing mount\n11:22:33 AM: Executing mount /dev/sda5 /tmp/tmp1QyQf5\n11:22:33 AM: Handling /tmp/tmp1QyQf5/etc/init/fw_test.conf\n11:22:33 AM: Executing umount /tmp/tmp1QyQf5\n11:22:33 AM: we are done!\n\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nReview URL: http://codereview.chromium.org/3086015\n"
    },
    {
      "commit": "ce988eb4574d96d0981cd63a61fb59ebdff98022",
      "tree": "e71e6e4e507b6c569d03ae4ae9a4acefc4e56267",
      "parents": [
        "14fab8db75f554c8263758f787e1cef183322c3e"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Wed Aug 04 19:09:15 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Wed Aug 04 19:09:15 2010"
      },
      "message": "Include root fs information in the boot state vector.\n\nThis CL adds two elements to the boot vector describing the\nChromOS system boot state.\n\nThe second last element is number 1 or 0 (depending if the\nroot file system is mounted on a removable or non-removable\ndevice, respectively). The last number is the digit of the\nroot fs device. The root FS device hardcoded to match the\ndevice the kernel was loaded from, so the combinations of\nthe last two elements are as follows:\n\n0:3 \u003d\u003e non removable, kernel A\n0:5 \u003d\u003e non removable, kernel B\n1:3 \u003d\u003e removable, recovery kernel\n\nBUG\u003dBUG\u003dchromium-os:4801\nTEST\u003dsee http://codereview.chromium.org/2868098/show\nfor test decription\n\nReview URL: http://codereview.chromium.org/3036039\n"
    },
    {
      "commit": "14fab8db75f554c8263758f787e1cef183322c3e",
      "tree": "9b85264c558e7e2fbcd5549f1aa3fe4946f05aba",
      "parents": [
        "2b309f1b4904ab10cb0c548f5242b46db7bd65a9"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Tue Aug 03 19:05:50 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Tue Aug 03 19:05:50 2010"
      },
      "message": "Refactor saft skeleton and add some unit tests.\n\nThis is a refactoring of the SAFT utility implementation\nas discussed when the original submission\n(http://codereview.chromium.org/3061012/show) was reviewed.\n\nThe refactoring involved the following:\n\n- renaming saft_utility -\u003e saft_utility.py (making unit\n  testing more straightforward)\n- separating test specific methods into a class\n  saft_utility.py:FirmwareSelfTest\n- separating OS related services into chromeos_interface.py\n- adding a unittest for the new module\n\nBUG\u003dchromium-os:1994\n\nTest\u003das described below:\n\nAt this time the user of this utility is expected to provide\nthe proper Python environment, namely add to PYTHONPATH the\nlocation of the flashrom_util.py module (which currently is\nin ../x86-generic).\n\nThe new firmware image used in testing is placed in ZGA_010b.fd in ./saft. Note that two out of three unit tests\ncan be run on either host or target, running on target make\nsure that vbutil_firmware is in PATH.\n\n1. (works both on host and on target)\nlocalhost saft # ./test_chromeos_interface.py\n..\n----------------------------------------------------------------------\nRan 2 tests in 0.023s\n\nOK\n\n2.  (works both on host and on target)\nlocalhost saft # PYTHONPATH\u003d$(realpath ../x86-generic) ./test_flashrom_handler.py /etc/keys/root_key.vbpubk ZGA_010b.fd\n..\n----------------------------------------------------------------------\nRan 2 tests in 2.364s\n\nOK\n\n3.\nlocalhost saft #  PYTHONPATH\u003d$(realpath ../x86-generic) ./test_saft_utility.py\n.\n----------------------------------------------------------------------\nRan 1 test in 1.369s\n\nOK\n\n4.\nPYTHONPATH\u003d$(realpath ../x86-generic) ./saft_utility.py  --pub_ke\u003d/etc/keys/root_key.vbpubk --ima\u003d./ZGA_010b.fd\n\nThe target starts executing the SAFT, restarts a few times\nin the process, at the end the following is stored in the log file in /var/.fw_test/fw_test_log.txt on the first\npartition of the flash drive:\n\nlocalhost saft # df  /dev/sdb1\nFilesystem           1K-blocks      Used Available Use% Mounted on\n/dev/sdb1              1032088     43728    935932   5% /tmp/tmpMpCsNj\n\nlocalhost saft # cat /tmp/tmpMpCsNj/var/.fw_test/fw_test_log.txt\n04:04:26 PM: Automated firmware test log generated on Aug 02 2010\n04:04:26 PM: Original boot state 1:1:0\n04:04:32 PM: Executing df /tmp/sdb3/usr/bin/fw_test/saft\n04:04:32 PM: Executing blkid\n04:04:32 PM: Executing rootdev\n04:04:32 PM: Executing mount\n04:04:32 PM: Handling //etc/init/fw_test.conf\n04:04:32 PM: Executing rootdev\n04:04:32 PM: Executing mount\n04:04:32 PM: Handling /tmp/sdb3/etc/init/fw_test.conf\n04:04:32 PM: Executing rootdev\n04:04:32 PM: Executing mount\n04:04:32 PM: Executing mount /dev/sda5 /tmp/tmpiNgeWl\n04:04:32 PM: Handling /tmp/tmpiNgeWl/etc/init/fw_test.conf\n04:04:32 PM: Executing umount /tmp/tmpiNgeWl\n04:04:33 PM: program the new image\n04:05:04 PM: restart\n04:05:04 PM: Executing reboot\n04:05:44 PM: Rebooted into state 1:1:0 on step 0\n04:05:44 PM: calling \u003cbound method FirmwareSelfTest.set_try_fw_b of \u003c__main__.FirmwareSelfTest object at 0x6f6d688c\u003e\u003e\n04:05:44 PM: Requesting restart with FW B\n04:05:44 PM: Executing reboot_mode --try_firmware_b\u003d1\n04:05:44 PM: Executing reboot\n04:06:08 PM: Rebooted into state 1:2:0 on step 1\n04:06:09 PM: calling \u003cfunction \u003clambda\u003e at 0x6f637e64\u003e\n04:06:09 PM: Executing reboot\n04:06:44 PM: Rebooted into state 1:1:0 on step 2\n04:06:44 PM: calling \u003cbound method FirmwareSelfTest.corrupt_firmware of \u003c__main__.FirmwareSelfTest object at 0x6f6b488c\u003e\u003e with parameter a\n04:06:44 PM: Corrupting firmware a\n04:07:24 PM: Executing reboot\n04:07:45 PM: Rebooted into state 1:2:0 on step 3\n04:07:45 PM: calling \u003cbound method FirmwareSelfTest.restore_firmware of \u003c__main__.FirmwareSelfTest object at 0x6f71788c\u003e\u003e\n04:07:45 PM: Restoring to original firmware\n04:07:45 PM: Executing flashrom -w /tmp/tmpChOG3T/var/.fw_test/flashrom.bak\n04:08:17 PM: Executing reboot\n04:08:35 PM: Rebooted into state 1:1:0 on step 4\n04:08:36 PM: Removing upstart scripts\n04:08:36 PM: Executing df /tmp/sdb3/usr/bin/fw_test/saft\n04:08:36 PM: Executing blkid\n04:08:36 PM: Executing rootdev\n04:08:36 PM: Executing mount\n04:08:36 PM: Executing mount -o remount,rw /dev/root\n04:08:36 PM: Handling //etc/init/fw_test.conf\n04:08:36 PM: Executing rootdev\n04:08:36 PM: Executing mount\n04:08:36 PM: Handling /tmp/sdb3/etc/init/fw_test.conf\n04:08:36 PM: Executing rootdev\n04:08:36 PM: Executing mount\n04:08:36 PM: Executing mount /dev/sda5 /tmp/tmp4SJguO\n04:08:36 PM: Handling /tmp/tmp4SJguO/etc/init/fw_test.conf\n04:08:36 PM: Executing umount /tmp/tmp4SJguO\n04:08:37 PM: we are done!\n\nReview URL: http://codereview.chromium.org/2868098\n"
    },
    {
      "commit": "2b309f1b4904ab10cb0c548f5242b46db7bd65a9",
      "tree": "f9ef021baa20ecb58d2ccaa797b27b65e6283fda",
      "parents": [
        "0b10274a994ed9a795ef7a2a14acae95f0c2c0b0"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sat Jul 31 01:51:32 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sat Jul 31 01:51:32 2010"
      },
      "message": "Fixed indentation size in SAFT source code.\n\nThis is a result of passing the source code through a \u0027Python\nbeautifier\u0027 and then some manual tweaking. All tests pass\nas described.\n\nBUG\u003dchromium-os:1994\n\nTEST\u003d all unit tests and actual testing on target pass\nas described in http://codereview.chromium.org/3061012/show\n\nReview URL: http://codereview.chromium.org/3046037\n"
    },
    {
      "commit": "0b10274a994ed9a795ef7a2a14acae95f0c2c0b0",
      "tree": "4dacf7fb25fe911f0226223bda5dc96a21e0f948",
      "parents": [
        "ab425ff29a6768d9f2f78712d32e26ed18d7bdfa"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sat Jul 31 00:12:19 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sat Jul 31 00:12:19 2010"
      },
      "message": "Replace function names to comply with coding style.\n\nThis was accomplished by automated processing of the source\nfiles using a custom Python script.\n\nBUG\u003dchromium-os:1994\n\nTEST\u003d all unit tests and actual testing on target pass\nas described in http://codereview.chromium.org/3061012/show\n\nReview URL: http://codereview.chromium.org/2870078\n"
    },
    {
      "commit": "ab425ff29a6768d9f2f78712d32e26ed18d7bdfa",
      "tree": "21a5e85844672cd848e01d22c0cec943bdb3bec1",
      "parents": [
        "c5bbb5447c919c21926a57ad4efb1abbe5e1e056"
      ],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Wed Jul 28 01:03:24 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Wed Jul 28 01:03:24 2010"
      },
      "message": "First draft SAFT implementation.\n\nThis CL introduces the semiautomated firmware test (SAFT)\nframework, as described in\nhttps://docs.google.com/a/google.com/document/edit?id\u003d1E1b_73IQjSiRsznSh_YDhv5i3mn__yDeZIGhXwY8rhA\u0026hl\u003den#\n\nThe required parameters of ./saft_utility are\n --image_file - name of the file containing the firmware\n   image which needs to be tested\n --pub_key - name of the file contaning public key block\n   used to verify both currently running and new firmware\n   images\n\nsaft_utility must run off the flash stick. On startup\nin verifies integrity of both current and new FW images,\nprepares the environment, and creates the upstart script\n(/etc/init/fw_test.conf) on three partitions: both root\npartitions on the hard drive/SSD and the recovery partition\non the flash stick.\n\nThen the test restarts the machine.\n\nThe upstart script makes sure that saft_utility is invoked\nafter each reboot with the --next_step command line\nparameter.\n\nThe expected test states are enumerated in\nsaft_utility:test_state_sequence table. On each step the\ntest verifies the proper state on the machine, performs\nthe necessary action and restarts the machine.\n\nThe test ends when there is no action in the current record\nof the state machine table or in case an error happens.\n\nThe test progress is accumulated in the log file stored on\nthe stateful partition on the flash stick (in\n/var/.fw_test/fw_test_log.txt)\n\nBUG\u003dchromium-os:1994\n\nTest\u003dsee below\n\n1. Unit test ran on the target:\n\nlocalhost fw_test # ./test_saft_utility.py\n...\n----------------------------------------------------------------------\nRan 3 tests in 0.894s\n\nOK\nlocalhost fw_test # cd saft\n\nlocalhost saft # ./test_flashrom_handler.py /etc/keys/root_key.vbpubk\n..\n----------------------------------------------------------------------\nRan 2 tests in 11.950s\n\nOK\nlocalhost saft #\n\n2. The actual SAFT ran on the target:\n\nPlace the fwirmware/ directory contents on a flash stick, place the new flashrom image into a file in the local directory (./ZGA_010b.fd) and run the test:\n\n./saft_utility  --pub_ke\u003d/etc/keys/root_key.vbpubk --ima\u003d./ZGA_010b.fd\n\nThe test causes the machine to restart several times, in the end the following is seen in the log file (/var/.fw_test/fw_test_log.txt on the first partition of the flash stick):\n\n12:51:40 PM: Automated firmware test log generated on Jul 25 2010\n12:51:40 PM: Original boot state 1:1:0\n12:51:46 PM: Executing df /tmp/sdb3/usr/bin/fw_test\n12:51:46 PM: Executing blkid\n12:51:46 PM: Executing rootdev\n12:51:46 PM: Executing mount\n12:51:46 PM: Handling //etc/init/fw_test.conf\n12:51:46 PM: Executing rootdev\n12:51:46 PM: Executing mount\n12:51:46 PM: Handling /tmp/sdb3/etc/init/fw_test.conf\n12:51:46 PM: Executing rootdev\n12:51:46 PM: Executing mount\n12:51:46 PM: Executing mount /dev/sda5 /tmp/tmpuC0YjA\n12:51:46 PM: Handling /tmp/tmpuC0YjA/etc/init/fw_test.conf\n12:51:46 PM: Executing umount /tmp/tmpuC0YjA\n12:51:46 PM: program the new image\n12:52:18 PM: restart\n12:52:18 PM: Executing reboot\n12:52:44 PM: Rebooted into state 1:1:0 on step 0\n12:52:44 PM: calling \u003cfunction SetTryFwB at 0x6f744fb4\u003e\n12:52:44 PM: Requesting restart with FW B\n12:52:44 PM: Executing reboot_mode --try_firmware_b\u003d1\n12:52:44 PM: Executing reboot\n12:53:07 PM: Rebooted into state 1:2:0 on step 1\n12:53:08 PM: calling \u003cfunction \u003clambda\u003e at 0x6f76d614\u003e\n12:53:08 PM: Executing reboot\n12:53:28 PM: Rebooted into state 1:1:0 on step 2\n12:53:29 PM: calling \u003cfunction CorruptFirmware at 0x6f74717c\u003e with parameter a\n12:54:05 PM: Executing reboot\n12:54:25 PM: Rebooted into state 1:2:0 on step 3\n12:54:25 PM: calling \u003cfunction RestoreFirmware at 0x6f6c70d4\u003e\n12:54:25 PM: Restoring to original firmware\n12:54:25 PM: Executing flashrom -w /tmp/tmp_dbSPi/var/.fw_test/flashrom.bak\n12:54:57 PM: Executing reboot\n12:55:16 PM: Rebooted into state 1:1:0 on step 4\n12:55:17 PM: Removing upstart scripts\n12:55:17 PM: Executing df /tmp/sdb3/usr/bin/fw_test\n12:55:17 PM: Executing blkid\n12:55:17 PM: Executing rootdev\n12:55:17 PM: Executing mount\n12:55:17 PM: Executing mount -o remount,rw /dev/root\n12:55:17 PM: Handling //etc/init/fw_test.conf\n12:55:17 PM: Executing rootdev\n12:55:17 PM: Executing mount\n12:55:17 PM: Handling /tmp/sdb3/etc/init/fw_test.conf\n12:55:17 PM: Executing rootdev\n12:55:17 PM: Executing mount\n12:55:17 PM: Executing mount /dev/sda5 /tmp/tmpgfrUqx\n12:55:17 PM: Handling /tmp/tmpgfrUqx/etc/init/fw_test.conf\n12:55:17 PM: Executing umount /tmp/tmpgfrUqx\n12:55:18 PM: we are done!\n\nReview URL: http://codereview.chromium.org/3061012\n"
    },
    {
      "commit": "c5bbb5447c919c21926a57ad4efb1abbe5e1e056",
      "tree": "de8fe4faa14acb708931c23ec9a94a4ae99ff082",
      "parents": [],
      "author": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sat Jul 24 00:33:13 2010"
      },
      "committer": {
        "name": "vbendeb",
        "email": "vbendeb@chromium.org",
        "time": "Sat Jul 24 00:33:13 2010"
      },
      "message": "Utility to support SAFT and a unit test for it.\n\nsaft/flash_handler.py is a helper utility used by the SAFT\\\n(semi automated firmware test).\n\nIt provides the ability to load a firmware file (or read it\nfrom the hardware when running on the target), verify the\nfile\u0027s integrity and modify certain section of the file to\nintroduce verification errors.\n\nsafe/test_flashrom_handler.py is a unit test for this\nutility. It can run on host (in native and chroot\nenvironments) and on the target.\n\nx86-generic/flashrom_util.py is modified to suppress the\nconsole output generated by the \u0027flashrom\u0027 utility when\noperating on the target.\n\nBUG\u003dchromium-os:1994\n\nTEST\u003dSee below\n\nThis is a sample unit test invocation case (with firmware\nimage placed in file zgax64.fd in the local directory):\n\nvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n(saft $) PATH\u003d${PATH}:../../vboot_reference/build/utility \\\n ./test_flashrom_handler.py \\\n ../../vboot_reference/tests/devkeys/root_key.vbpubk \\\n zgax64.fd\n----------------------------------------------------------------------\nRan 2 tests in 0.643s\n\nOK\n(saft $)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe\n\nReview URL: http://codereview.chromium.org/2834065\n"
    }
  ]
}
