[ATFT] Fix a bug while purging keys.
Test: Local tests and unit tests.
Bug: None.
Change-Id: Ic78f2b605d85429d8f74ca9a6b685e53d58f2aaf
diff --git a/at-factory-tool/atft.py b/at-factory-tool/atft.py
index ead0d9a..16b6e37 100644
--- a/at-factory-tool/atft.py
+++ b/at-factory-tool/atft.py
@@ -3604,7 +3604,8 @@
if not self._StartOperation(operation, self.atft_manager.atfa_dev):
return
try:
- self.atft_manager.PurgeATFAKey()
+ is_som_key = self.atft_manager.som_info is not None
+ self.atft_manager.PurgeATFAKey(is_som_key)
self._SendOperationSucceedEvent(operation)
self._UpdateKeysLeftInATFA()
except ProductNotSpecifiedException as e:
diff --git a/at-factory-tool/atftman.py b/at-factory-tool/atftman.py
index 6232d02..91badc9 100644
--- a/at-factory-tool/atftman.py
+++ b/at-factory-tool/atftman.py
@@ -1288,7 +1288,8 @@
raise FastbootFailure('ATFA device response has invalid format')
except FastbootFailure as e:
- if 'No matching available products' in e.msg:
+ if ('No matching available products' in e.msg or
+ 'No matching available SoMs' in e.msg):
# If there's no matching product key, we set keys left to 0.
self.atft_manager.atfa_dev.keys_left = 0
return
@@ -1307,10 +1308,10 @@
FastbootFailure: When fastboot command fails.
ProductNotSpecifiedException: When product is not specified.
"""
- if not is_som_key and self.product_info:
+ if not is_som_key and self.atft_manager.product_info:
product_som_id = self.atft_manager.product_info.product_id
command = 'purge '
- elif is_som_key and self.som_info:
+ elif is_som_key and self.atft_manager.som_info:
product_som_id = self.atft_manager.som_info.som_id
command = 'purge-som '
else:
diff --git a/at-factory-tool/atftman_unittest.py b/at-factory-tool/atftman_unittest.py
index 64f7d21..429f60c 100644
--- a/at-factory-tool/atftman_unittest.py
+++ b/at-factory-tool/atftman_unittest.py
@@ -828,6 +828,66 @@
test_atfa_device_manager.UpdateKeysLeft(False)
self.assertEqual(0, mock_atfa_dev.keys_left)
+ def testUpdateKeysLeftNoMatchingSoM(self):
+ atft_manager = atftman.AtftManager(self.FastbootDeviceTemplate,
+ self.mock_serial_mapper, self.configs)
+ mock_atfa_dev = MagicMock()
+ atft_manager.atfa_dev = mock_atfa_dev
+ test_atfa_device_manager = atftman.AtfaDeviceManager(atft_manager)
+ atft_manager.som_info = MagicMock()
+ atft_manager.som_info.som_id = self.TEST_ID
+ mock_atfa_dev.Oem.side_effect = FastbootFailure(
+ 'No matching available SoMs')
+ test_atfa_device_manager.UpdateKeysLeft(True)
+ self.assertEqual(0, mock_atfa_dev.keys_left)
+
+ # Test AtfaDeviceManager.PurgeKey
+ def testPurgeKeyProduct(self):
+ atft_manager = atftman.AtftManager(self.FastbootDeviceTemplate,
+ self.mock_serial_mapper, self.configs)
+ mock_atfa_dev = MagicMock()
+ atft_manager.atfa_dev = mock_atfa_dev
+ test_atfa_device_manager = atftman.AtfaDeviceManager(atft_manager)
+ atft_manager.product_info = MagicMock()
+ atft_manager.product_info.product_id = self.TEST_ID
+ test_atfa_device_manager.PurgeKey(False)
+ mock_atfa_dev.Oem.assert_called_once_with('purge ' + self.TEST_ID)
+
+ def testPurgeKeySoM(self):
+ atft_manager = atftman.AtftManager(self.FastbootDeviceTemplate,
+ self.mock_serial_mapper, self.configs)
+ mock_atfa_dev = MagicMock()
+ atft_manager.atfa_dev = mock_atfa_dev
+ test_atfa_device_manager = atftman.AtfaDeviceManager(atft_manager)
+ atft_manager.som_info = MagicMock()
+ atft_manager.som_info.som_id = self.TEST_ID
+ test_atfa_device_manager.PurgeKey(True)
+ mock_atfa_dev.Oem.assert_called_once_with('purge-som ' + self.TEST_ID)
+
+ def testPurgeKeyProductNotSelected(self):
+ atft_manager = atftman.AtftManager(self.FastbootDeviceTemplate,
+ self.mock_serial_mapper, self.configs)
+ mock_atfa_dev = MagicMock()
+ atft_manager.atfa_dev = mock_atfa_dev
+ test_atfa_device_manager = atftman.AtfaDeviceManager(atft_manager)
+ atft_manager.product_info = None
+ atft_manager.som_info = None
+ with self.assertRaises(ProductNotSpecifiedException):
+ test_atfa_device_manager.PurgeKey(False)
+ mock_atfa_dev.Oem.assert_not_called()
+
+ def testPurgeKeySoMNotSelected(self):
+ atft_manager = atftman.AtftManager(self.FastbootDeviceTemplate,
+ self.mock_serial_mapper, self.configs)
+ mock_atfa_dev = MagicMock()
+ atft_manager.atfa_dev = mock_atfa_dev
+ test_atfa_device_manager = atftman.AtfaDeviceManager(atft_manager)
+ atft_manager.product_info = None
+ atft_manager.som_info = None
+ with self.assertRaises(ProductNotSpecifiedException):
+ test_atfa_device_manager.PurgeKey(True)
+ mock_atfa_dev.Oem.assert_not_called()
+
# Test AtftManager.CheckProvisionStatus
def MockGetVar(self, variable):
return self.status_map.get(variable)