pd_faft: Change the power swap interation to an even number

Make the iteration the same as the data role swap test,
firmware_PDDataSwap. The number should be even such that DUT will back
to the original role.

Also move the code of restoration to the cleanup() method.

BUG=b:136590596
TEST=Ran the firmware_PDPowerSwap and checked the power role back to its
original.

Change-Id: Ia6cfcc17ffa526ae50080828bfc590585a952773
Reviewed-on: https://chromium-review.googlesource.com/1688190
Tested-by: Wai-Hong Tam <waihong@google.com>
Commit-Ready: Wai-Hong Tam <waihong@google.com>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: C Shapiro <shapiroc@chromium.org>
Reviewed-by: Garry Wang <xianuowang@chromium.org>
Reviewed-by: Dana Goyette <dgoyette@chromium.org>
diff --git a/server/site_tests/firmware_PDPowerSwap/firmware_PDPowerSwap.py b/server/site_tests/firmware_PDPowerSwap/firmware_PDPowerSwap.py
index 4b78e07..3dd0aa5 100644
--- a/server/site_tests/firmware_PDPowerSwap/firmware_PDPowerSwap.py
+++ b/server/site_tests/firmware_PDPowerSwap/firmware_PDPowerSwap.py
@@ -23,7 +23,8 @@
 
     PD_ROLE_DELAY = 0.5
     PD_CONNECT_DELAY = 4
-    POWER_SWAP_ITERATIONS = 5
+    # Should be an even number; back to the original state at the end
+    POWER_SWAP_ITERATIONS = 10
     # Source power role
     SRC ='SRC_READY'
     # Sink power role
@@ -122,6 +123,17 @@
         self.usbpd.enable_console_channel('usbpd')
 
     def cleanup(self):
+        if hasattr(self, 'pd_port'):
+            # Restore DUT dual role operation
+            self.dut_pd_utils.set_pd_dualrole(self.pd_port, 'on')
+        if hasattr(self, 'pdtester_port'):
+            # Set connection back to default arrangement
+            self.pdtester_pd_utils.set_pd_dualrole(self.pdtester_port, 'off')
+
+        if hasattr(self, 'pd_port') and hasattr(self, 'pdtester_port'):
+            # Fake-disconnect to restore the original power role
+            self.pdtester_pd_utils.send_pd_command('fakedisconnect 100 1000')
+
         self.usbpd.send_command('chan 0xffffffff')
         super(firmware_PDPowerSwap, self).cleanup()
 
@@ -151,18 +163,18 @@
 
         # Type C connection (PD contract) should exist at this point
         # For this test, the DUT must be connected to a PDTester.
-        pd_port = self.connect_utils.find_dut_to_pdtester_connection()
-        if pd_port is None:
+        self.pd_port = self.connect_utils.find_dut_to_pdtester_connection()
+        if self.pd_port is None:
             raise error.TestFail("DUT to PDTester PD connection not found")
-        dut_connect_state = self.dut_pd_utils.get_pd_state(pd_port)
+        dut_connect_state = self.dut_pd_utils.get_pd_state(self.pd_port)
         logging.info('Initial DUT connect state = %s', dut_connect_state)
 
         # Get DUT dualrole status
-        if self.dut_pd_utils.is_pd_dual_role_enabled(pd_port) == False:
+        if self.dut_pd_utils.is_pd_dual_role_enabled(self.pd_port) == False:
             # DUT does not support dualrole mode, power swap
             # requests to the DUT should be rejected.
             logging.info('Power Swap support not advertised by DUT')
-            self._test_power_swap_reject(pd_port)
+            self._test_power_swap_reject(self.pd_port)
             logging.info('Power Swap request rejected by DUT as expected')
         else:
             # Start with PDTester as source
@@ -176,9 +188,9 @@
                     direction = 'rx'
                 else:
                     direction = 'tx'
-                if self._attempt_power_swap(pd_port, direction):
+                if self._attempt_power_swap(self.pd_port, direction):
                     success += 1
-                new_state = self.dut_pd_utils.get_pd_state(pd_port)
+                new_state = self.dut_pd_utils.get_pd_state(self.pd_port)
                 logging.info('New DUT power role = %s', new_state)
 
             if success != self.POWER_SWAP_ITERATIONS:
@@ -191,14 +203,9 @@
             else:
                 dual_mode = 'snk'
             logging.info('Setting dualrole mode to %s', dual_mode)
-            self.dut_pd_utils.set_pd_dualrole(pd_port, dual_mode)
+            self.dut_pd_utils.set_pd_dualrole(self.pd_port, dual_mode)
             time.sleep(self.PD_ROLE_DELAY)
             # Expect behavior now is that DUT will reject power swap
-            self._test_power_swap_reject(pd_port)
+            self._test_power_swap_reject(self.pd_port)
             logging.info('Power Swap request rejected by DUT as expected')
-            # Restore DUT dual role operation
-            self.dut_pd_utils.set_pd_dualrole(pd_port, 'on')
-            # Set connection back to default arrangement
-            self.pdtester_pd_utils.set_pd_dualrole(pd_port, 'off')
-            self.pdtester_pd_utils.send_pd_command('fake disconnect 100 1000')