Add common_checks dir and call from checker.

- Checker attempts to discover checks in 3 places:
1. common_checks dir.
2. Project repo.
3. Program repo.

- Add basic ConstraintSuite that checks ids are
consistent as an example.

- Right now just fail a check by throwing an
error and do basic logging when a check is run.
Logging and failure handling can be improved in
the future.

- Also added an exclude_pattern arg to
discover_suites to allow excluding tests. If tests
import a constraint suite, the suite would be
defined twice, and run twice.

BUG=chromium:1051187
TEST=payload_utils/checker.py \
--program ../program/volteer \
--project ../project/volteer/volteer
TEST=python unittests

Change-Id: Ida593429f5bbb85d23027db7db27f4f2f1e3f781
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/config/+/2056867
Commit-Queue: Andrew Lamb <andrewlamb@chromium.org>
Tested-by: Andrew Lamb <andrewlamb@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
diff --git a/payload_utils/checker.py b/payload_utils/checker.py
index c0ab275..64ae625 100755
--- a/payload_utils/checker.py
+++ b/payload_utils/checker.py
@@ -7,8 +7,12 @@
 import argparse
 import os
 
+from checker import constraint_suite_discovery
 from checker import io_utils
 
+COMMON_CHECKS_PATH = os.path.join(
+    os.path.dirname(__file__), 'checker', 'common_checks')
+
 
 def argument_parser():
   parser = argparse.ArgumentParser(description=__doc__)
@@ -34,8 +38,20 @@
   project_config = io_utils.read_repo_config(args.project)
   program_config = io_utils.read_repo_config(args.program)
 
-  print('Read project config: {}'.format(project_config))
-  print('Read program config: {}'.format(program_config))
+  constraint_suite_directories = [
+      COMMON_CHECKS_PATH,
+      os.path.join(args.program, 'checks'),
+      os.path.join(args.project, 'checks')
+  ]
+
+  constraint_suites = []
+  for directory in constraint_suite_directories:
+    constraint_suites.extend(
+        constraint_suite_discovery.discover_suites(directory))
+
+  for suite in constraint_suites:
+    suite.run_checks(
+        program_config=program_config, project_config=project_config, verbose=1)
 
 
 if __name__ == '__main__':