nebraska: Ignore miniOS app mismatches

MiniOS version is not atomic with OS version.

BUG=b:205716602
TEST=./run_unittests

Change-Id: Ie98a6b57eade8b860fde735af8ebdffb8cec1ba2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/3274107
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Kyle Shimabukuro <kyleshima@chromium.org>
Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
diff --git a/nebraska/nebraska.py b/nebraska/nebraska.py
index 984d6eb..9ae40ef 100755
--- a/nebraska/nebraska.py
+++ b/nebraska/nebraska.py
@@ -38,6 +38,8 @@
 # This is the same for all images on canary channel.
 _CANARY_APP_ID = '{90F229CE-83E2-4FAF-8479-E368A34938B1}'
 
+_MINIOS_APP_ID_SUFFIX = '_minios'
+
 
 class Error(Exception):
   """The base class for failures raised by Nebraska."""
@@ -165,6 +167,8 @@
       for all apps if existed. It can optionally be in one or more apps, but
       they are all equal.
 
+      Ignores all miniOS apps due to the out of sync nature for updates.
+
       Args:
         attribute: An attribute of the app tag.
         in_all: If true, the attribute should exist among all apps.
@@ -175,7 +179,10 @@
         The value of the attribute. If no valid attribute value is found,
         ignore_value will be returned.
       """
-      all_attrs = [getattr(x, attribute) for x in self.app_requests]
+      # Exclude miniOS apps.
+      all_attrs = [getattr(x, attribute)
+                   for x in self.app_requests
+                   if not x.appid.endswith(_MINIOS_APP_ID_SUFFIX)]
       if in_all and (ignore_value in all_attrs):
         raise InvalidRequestError(
             'All apps should have "%s" attribute.' % attribute)
diff --git a/nebraska/nebraska_unittest.py b/nebraska/nebraska_unittest.py
index 782b500..60503b8 100755
--- a/nebraska/nebraska_unittest.py
+++ b/nebraska/nebraska_unittest.py
@@ -18,9 +18,9 @@
 import shutil
 import tempfile
 import unittest
+import unittest.mock as mock
 
 from xml.etree import ElementTree
-import mock
 
 import nebraska
 
@@ -726,6 +726,16 @@
     with self.assertRaises(nebraska.InvalidRequestError):
       nebraska.Request(request)
 
+  def testParseRequestMiniOSMismatchedVersion(self):
+    """Tests ParseRequest handling of miniOS mismtach update."""
+    request = GenerateXMLRequest([
+        GenerateXMLAppRequest(version='1.0.0'),
+        GenerateXMLAppRequest(appid='foo' + nebraska._MINIOS_APP_ID_SUFFIX,
+                              version='2.0.0'),
+    ])
+    # Should not assert.
+    nebraska.Request(request)
+
   def testParseRequestMismatchedVersionInstall(self):
     """Tests ParseRequest handling of mismatched install version numbers."""
     request = GenerateXMLRequest([