#!/usr/bin/env python
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This script verifies if the parameter is a valid autotest state file and able
# to continue running factory main controller/UI.
# Returns shell failure (exit(1)) for that case.

import sys
import pickle


def check_state(state_file):
    with open(state_file, "rb") as state_handle:
        state = pickle.load(state_handle)
        # A typical state should be:
        # {'client': {'_record_indent': 2, 'steps': [([], 'step_init', [], {})],
        # 'unexpected_reboot': ('factory_Dummy.e_0', 'factory_Dummy.e_0')}}
        # And the factory needs 'step_init' in client.steps.
        for record in state['client']['steps']:
            if 'step_init' in record:
                return True
    return False


def main(argv):
    for state_file in argv[1:]:
        try:
            if check_state(state_file):
                continue
            raise Exception('Unknown format')
        except:
            sys.stderr.write("Invalid state file: %s\n" % state_file)
            exit(1)


if __name__ == '__main__':
    main(sys.argv)
