suite-scheduler: Add skylab_model limit.

Add skylab_model entry support in lab_config.ini. This limits the models
which could run the given suites in skylab.

BUG=chromium:914467
TEST=Ran unittest.

Change-Id: Ia40d67adde1cee72673f8ee4de84e22753a16a6e
Reviewed-on: https://chromium-review.googlesource.com/1398402
Commit-Ready: Xixuan Wu <xixuan@chromium.org>
Tested-by: Xixuan Wu <xixuan@chromium.org>
Reviewed-by: Xixuan Wu <xixuan@chromium.org>
diff --git a/trigger_receiver_unittest.py b/trigger_receiver_unittest.py
index 671917c..4729422 100644
--- a/trigger_receiver_unittest.py
+++ b/trigger_receiver_unittest.py
@@ -144,6 +144,10 @@
     """Mock config_reader.LabConfig.get_skylab_suite_list."""
     return set(['ent-nightly'])
 
+  def get_skylab_model_map(self):
+    """Mock config_reader.LabConfig.get_skylab_model_map."""
+    return {'coral': ['santa']}
+
   def get_firmware_ro_build_list(self, release_board):
     """Mock config_reader.LabConfig.get_firmware_ro_build_list."""
     del release_board  # unused
@@ -608,6 +612,32 @@
     self.assertNotIn('model=santa', tasks[0].payload)
     self.assertIn('model=astronaut', tasks[0].payload)
 
+  def testNewBuildWithModelsInSkylab(self):
+    """Test the new_build suite in skylab."""
+    normal_suite = 'FakeModelsInSkylab'
+    self.fake_config.add_section(normal_suite)
+    self.fake_config.set(normal_suite, 'run_on', 'new_build')
+    self.fake_config.set(normal_suite, 'suite', 'ent-nightly')
+    self.fake_config.set(normal_suite, 'exclude_boards', 'link, zako')
+    self._mock_config_reader.return_value = self.fake_config
+
+    queue = taskqueue.Queue(task_executor.SUITES_QUEUE)
+    suite_trigger = trigger_receiver.TriggerReceiver()
+    suite_trigger.cron()
+
+    self.assertEqual(len(suite_trigger.event_results), 1)
+    self.assertEqual(suite_trigger.event_results['new_build'],
+                     [normal_suite])
+    self.assertIn('new_build', suite_trigger.event_results)
+    tasks = queue.lease_tasks(3600, 10, deadline=0.5)
+    self.assertEqual(len(tasks), 2)
+    for t in tasks:
+      if 'model=santa' in t.payload:
+        self.assertIn('is_skylab=True', t.payload)
+
+      if 'model=astronaut' in t.payload:
+        self.assertIn('is_skylab=False', t.payload)
+
   def testNewBuildWithNoModelList(self):
     """Test the new_build suite with models and empty board_model mapping."""
     normal_suite = 'FakeModelsExcludeModelsNewBuildTask'