# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import file_verifier
import process_verifier
import registry_verifier


class VerifierRunner:
  """Runs all Verifiers."""

  def __init__(self):
    """Constructor."""
    # TODO(sukolsak): Implement other verifiers
    self._verifiers = {
      'Files': file_verifier.FileVerifier(),
      'Processes': process_verifier.ProcessVerifier(),
      'RegistryEntries': registry_verifier.RegistryVerifier(),
    }

  def VerifyAll(self, property, variable_expander):
    """Verifies that the current machine states match the property dictionary.

    A property dictionary is a dictionary where each key is a verifier's name
    and the associated value is the input to that verifier. For details about
    the input format for each verifier, take a look at http://goo.gl/1P85WL

    Args:
      property: A property dictionary.
      variable_expander: A VariableExpander object.
    """
    for verifier_name, verifier_input in property.iteritems():
      if verifier_name not in self._verifiers:
        raise KeyError('Unknown verifier %s' % verifier_name)
      self._verifiers[verifier_name].VerifyInput(verifier_input,
                                                 variable_expander)