autotest: Set servo_type when init servo host.

This changes temporally till we upload deploy script and fill al missed servo_types in inventory.

BUG=chromium:1071524
TEST=run local

./server/autoserv -s --host-info-subdir host_info_store -m chromeos4-row9-rack8-host21  --lab True --local-only-host-info True -R -r /usr/local/google/home/otabek/test_result/

Change-Id: I1a85a5ee3df289d7986641368cc821a57b9b780b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2182035
Commit-Queue: Otabek Kasimov <[email protected]>
Tested-by: Otabek Kasimov <[email protected]>
Reviewed-by: Garry Wang <[email protected]>
diff --git a/server/cros/servo/servo.py b/server/cros/servo/servo.py
index 0c90203..15796c2 100644
--- a/server/cros/servo/servo.py
+++ b/server/cros/servo/servo.py
@@ -1142,6 +1142,10 @@
         return servo_type
 
 
+    def get_servo_type(self):
+        return self._servo_type
+
+
     def get_main_servo_device(self):
         """Return the main servo device"""
         return self._servo_type.split('_with_')[-1].split('_and_')[0]
diff --git a/server/hosts/cros_host.py b/server/hosts/cros_host.py
index fb64f63..63ecbc3 100644
--- a/server/hosts/cros_host.py
+++ b/server/hosts/cros_host.py
@@ -1004,7 +1004,7 @@
             servo_state = self._servo_host.get_servo_state()
         else:
             self.servo = None
-
+        self.set_servo_type()
         self.set_servo_state(servo_state)
 
 
@@ -1031,6 +1031,30 @@
             self.set_servo_host(self._servo_host)
 
 
+    def set_servo_type(self):
+        """Set servo info labels to dut host_info"""
+        if not self.servo:
+            logging.warning('Servo is not initialized to get servo_type.')
+            return
+        servo_type = self.servo.get_servo_type()
+        if not servo_type:
+            logging.warning('Cannot collect servo_type from servo'
+                ' by `dut-control servo_type`! Please file a bug'
+                ' and inform infra team as we are not expected '
+                ' to reach this point.')
+            return
+        host_info = self.host_info_store.get()
+        prefix = servo_constants.SERVO_TYPE_LABEL_PREFIX
+        old_type = host_info.get_label_value(prefix)
+        if old_type == servo_type:
+            # do not need update
+            return
+        host_info.set_version_label(prefix, servo_type)
+        self.host_info_store.commit(host_info)
+        logging.info('ServoHost: servo_type updated to %s '
+                    '(previous: %s)', servo_type, old_type)
+
+
     def set_servo_state(self, servo_state):
         """Set servo info labels to dut host_info"""
         if servo_state is not None:
@@ -1051,6 +1075,7 @@
         servo_state_prefix = servo_constants.SERVO_STATE_LABEL_PREFIX
         return host_info.get_label_value(servo_state_prefix)
 
+
     def repair(self):
         """Attempt to get the DUT to pass `self.verify()`.
 
diff --git a/server/hosts/cros_host_unittest.py b/server/hosts/cros_host_unittest.py
index cb7b1b5..924548d 100755
--- a/server/hosts/cros_host_unittest.py
+++ b/server/hosts/cros_host_unittest.py
@@ -125,7 +125,9 @@
         host = MockHost()
         host.servo = None
         host._servo_host = mock.Mock()
-        host._servo_host.get_servo.return_value = 'Not Empty'
+        servo = mock.Mock()
+        servo.get_servo_type.return_value = None
+        host._servo_host.get_servo.return_value = servo
         host._servo_host.get_servo_state.return_value = 'SOME_STATE'
         host.host_info_store = host_info.InMemoryHostInfoStore()
         return host
@@ -169,7 +171,9 @@
     def test_set_servo_host_update_servo_state_when_host_exist(self):
         host = self.create_host()
         host._servo_host = mock.Mock()
-        host._servo_host.get_servo.return_value = 'Not Empty'
+        servo = mock.Mock()
+        servo.get_servo_type.return_value = None
+        host._servo_host.get_servo.return_value = servo
         host._servo_host.get_servo_state.return_value = 'SOME_STATE'
         self.assertEqual(host.host_info_store.get().get_label_value(SERVO_STATE_PREFIX), '')
 
@@ -190,7 +194,9 @@
     def test_set_servo_host_use_servo_state_from_host_when_host_is_passed(self):
         host = self.create_host()
         servo_host = mock.Mock()
-        servo_host.get_servo.return_value = 'Not Empty'
+        servo = mock.Mock()
+        servo.get_servo_type.return_value = None
+        servo_host.get_servo.return_value = servo
         servo_host.get_servo_state.return_value = 'state_of_host'
 
         host.set_servo_host(servo_host)