nebraska.py: Install requests version mismatch allowed

To support DLC(s) installation Omaha request, version will not match
that of platform AppID.

BUG=none
TEST=./run_unittests

Change-Id: If4f2e9f30323d61f971a373d87d18bbd9238ce41
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/2018462
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Andrew Lassalle <andrewlassalle@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
diff --git a/nebraska/nebraska.py b/nebraska/nebraska.py
index 72a2aaa..76bfe51 100755
--- a/nebraska/nebraska.py
+++ b/nebraska/nebraska.py
@@ -181,8 +181,9 @@
             'Attribute "%s" is not the same in all app tags.' % attribute)
       return unique_attrs.pop()
 
-    self.version = _CheckAttributesAndReturnIt(self.APP_VERSION_ATTR,
-                                               in_all=True)
+    if self.request_type == Request.RequestType.UPDATE:
+      self.version = _CheckAttributesAndReturnIt(self.APP_VERSION_ATTR,
+                                                 in_all=True)
     self.track = _CheckAttributesAndReturnIt(self.APP_CHANNEL_ATTR)
     self.board = _CheckAttributesAndReturnIt(self.APP_BOARD_ATTR)
 
diff --git a/nebraska/nebraska_unittest.py b/nebraska/nebraska_unittest.py
index cbadb2b..b6e1f38 100755
--- a/nebraska/nebraska_unittest.py
+++ b/nebraska/nebraska_unittest.py
@@ -763,8 +763,26 @@
 </request>
 """
 
-  # Mismatched versions.
-  MISMATCHED_VERSION_ATTR_REQUEST = """<?xml version="1.0" encoding="UTF-8"?>
+  # Mismatched versions UPDATE.
+  MISMATCHED_VERSION_ATTR_UPDATE_REQUEST = \
+  """<?xml version="1.0" encoding="UTF-8"?>
+<request protocol="3.0">
+  <os version="Indy" platform="Chrome OS" sp="10323.52.0_x86_64"></os>
+  <app appid="platform" version="1.0.0" delta_okay="false"
+       track="stable-channel" board="eve">
+    <ping active="1" a="1" r="1"></ping>
+    <updatecheck targetversionprefix=""></updatecheck>
+  </app>
+  <app appid="foo" version="2.0.0" delta_okay="false">
+    <ping active="1" a="1" r="1"></ping>
+    <updatecheck targetversionprefix=""></updatecheck>
+  </app>
+</request>
+"""
+
+  # Mismatched versions INSTALL.
+  MISMATCHED_VERSION_ATTR_INSTALL_REQUEST = \
+  """<?xml version="1.0" encoding="UTF-8"?>
 <request protocol="3.0">
   <os version="Indy" platform="Chrome OS" sp="10323.52.0_x86_64"></os>
   <app appid="platform" version="1.0.0" delta_okay="false"
@@ -807,10 +825,15 @@
     with self.assertRaises(nebraska.InvalidRequestError):
       nebraska.Request(XMLStrings.MISSING_REQUIRED_ATTR_REQUEST)
 
-  def testParseRequestMismatchedVersion(self):
-    """Tests ParseRequest handling of mismatched version numbers."""
+  def testParseRequestMismatchedVersionUpdate(self):
+    """Tests ParseRequest handling of mismatched update version numbers."""
     with self.assertRaises(nebraska.InvalidRequestError):
-      nebraska.Request(XMLStrings.MISMATCHED_VERSION_ATTR_REQUEST)
+      nebraska.Request(XMLStrings.MISMATCHED_VERSION_ATTR_UPDATE_REQUEST)
+
+  def testParseRequestMismatchedVersionInstall(self):
+    """Tests ParseRequest handling of mismatched install version numbers."""
+    # Not raises |nebraska.InvalidRequestError|.
+    nebraska.Request(XMLStrings.MISMATCHED_VERSION_ATTR_INSTALL_REQUEST)
 
   def testParseRequestInstall(self):
     """Tests ParseRequest handling of install requests."""