# Copyright 2016 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.

from autotest_lib.server import utils

AUTHOR = "mzhuo@chromium.org"
NAME = "enterprise_CFM_Test.qual"
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "enterprise"
TEST_TYPE = "server"
DEPENDENCIES = ""
JOB_RETRIES = 1

DOC = """
This test verifies peripherals for Bluestreak.
Tests and verifications can be selected in control file.
action_list defines the list of all available tests, which are keys for dict
action_list, value for the key defines how many times this test will be run
in one loop.

verification_list defineds the list of all available verifications,
which are keys for dict verification_list. True means this verification specified
by this key will be performed.

Testing flow can be set in control file.
test_flow_control defines:
1. runtestonly, if True, no cleartmp and enrollment are done before test,
                and no cleartpm is done after test.  Before running test on CfM
                we assume the CfM is enrolled,
                else, cleartpm and enrollment will be done before test,
                and cleartmp is done afterwards.
2. setupcleanup, (TODO)if True, before exit from test cleanup is done,
                 else, no cleanup before exit.
                 This provides way to keep setup stays in original status when test
                 is aborted.
3. abort_on_failure: if True, test is aborted if test fails or verification fails,
                     else, test continutes.
4. random_mode: if True, sequence of multiple test in one loop is randomized everytime.
                else, sequence is same for all loops.
5. recovery_on_fatal_failure: if True, reboot CfM when fatal failure occurs,
                              else, no reboot.
6. skipcfmc: All working CfM should have speaker, camera connected.
             For Bluestreak in addition to speaker/camera, Mimo should be connected.
             If True script checks the above statement before starting test,
             else, no check will be done before test starts.
7. debug: If True, script prints more informations, for example, cli output, name of
          test and verification. This is intend to give user more output for information
          purpose. This is different from logging.debug which is turned on by "--debug"
          when  kickstarting script,
          else, less output.
8. report: If True, after each loop script prints out summary for test and verification.

Dict error_key_words provides the list of error logs which script checks and verify.
If script finds any of them in the log, script claims test failure. This list can be
updated on the fly. Dict has keys, the value for each key is the list which contains
the list of error log script looks for when scanning log files.

How to run it:
1. Run cros_sdk
2. Go to ~/chromiumos/src/third_party/autotest/files/server/site_tests/enterprise_CFM_Test
3. Edit control file. Replace meeting_code working for CfM to be tested.
4. Update test_config, action_config, verification_config, test_flow_control ane etc properly.
5. Issue command line to kickstart autotest:
test_that --autotest_dir ~/trunk/src/third_party/autotest/files/ --board=guado
100.123.174.2 enterprise_CFM_Test.demo

"""

args_dict = utils.args_to_dict(args)

error_key_words = {'usb': [
                   'Setup ERROR: setup context command',
                   'URB transfer length is wrong',
                   'device descriptor read',
                   'unable to enumerate USB device',
                   'hub_port_status failed',
                   'cannot reset port',
                   'nonzero write bulk status received',
                   'Device not responding to setup address',
                   'device not accepting address',
                   'Set SEL for device-initiated U2 failed',
                   'Set SEL for device-initiated U1 failed',
                   'Disable of device-initiated U1 failed',
                   'Disable of device-initiated U2 failed',
                   'usb_set_interface failed',
                   'MIMO has wedged; issuing hub reset'
                  ],
                   'kernel': [
                   'ERROR Transfer event TRB DMA ptr',
                   'crashes with segfault',
                   'segfault at',
                   'cut here',
                   'end trace',
                   'Failed to resubmit video URB',
                   'go2001_watchdog:',
                   'go2001_ctx_error_locked:'
                  ],
                   'video': [
                   'uvcvideo: Failed to query',
                   'VIDIOC_DQBUF failed',
                   'uvcvideo: Non-zero status'
                   'uvcvideo: Failed to set UVC commit control',
                   'uvcvideo: UVC non compliance',
                   'Failed to resubmit video URB',
                   'No streaming interface found',
                   'Dequeued v4l2 buffer contains corrupted data'
                  ],
                   'audio': [
                   'hw_params: Input/output error: rate:',
                   'Init device retry failed',
                   'Init Hangouts Meet speakermic: USB Audio',
                   'usb_set_interface failed',
                   'hw_params: Input/output error: rate:',
                   'Init device retry failed',
                  ],
                   'chrome': [
                   '#No match for getting seqNum',
                   'Cannot get RenderProcess',
                   'segfault at',
                   'ERR crash_reporter',
                   'Watchdog resetting firmware',
                   'Failed to create scanout buffer',
                   'Failed to enable controller',
                   'Failed to configure: device',
                   'Failed to export buffer to dma_buf',
                   'Failed to take control of the display',
                   'WARNING: texture bound to texture unit 0 is not renderable',
                   'Failed to modeset controller'
                  ],
                   'atrus': [
                   '#Internal TrueVoice parameters',
                   'write: Connection timed out',
                   'Error: report failed',
                   'write: Broken pipe',
                   'protocol error'
                  ],
                   'usb_stability': [
                   '#autotest',
                   'USB disconnect',
                   'New USB device found',
                  ]
}


# !!! Please change meeting code working for CfM.
# !!! If meeting_code for different domain is used, meeting might be timeout.
# vol_change_mode: if set to 1, make one call to set voluem to target volume,
#                  else, make multiple calls to update volume until volume
#                  equals to target volume.
test_config = {
               'gpio_list': ['218','219', '209'],
               'gpiopause': 8,
               'puts': "",
               'is_meeting': 1,
               'meeting_code': 'otg-dkps-ovj', # this works for crosprq4.com
               'repeat': 200,
               'reboot_timeout': 30,
               'loop_timeout': 60,
               'action_timeout': 20,
               'min_timeout': 5,
               'debug_timeout': 5,
               'vol_change_step': 6,
               'vol_change_mode': 1,
               'reboot_after_min_meets': 5,
               'gpio_after_min_meets': 10
}

#action_config['meeting_test'] should be 0, 1.
#  0: no meeting test to be done
#  1: In each loop first CfM joins meeting, after all tests are done,
#     CfM leaves meeting.
#the value of 'mute_unmute_camera_test', 'mute_unmute_mic_test' and
#'speaker_volume_test" and etc is number of test for each key to be done in
#one meeting.
action_config = {
                 'meeting_test': 1,
                 'mute_unmute_camera_test': 5,
                 'mute_unmute_mic_test': 5,
                 'speaker_volume_test': 5,
                 'gpio_test': 1,
                 'reboot_test': 1,
                 'reset_usb_test': 0,
                 'flap_monitor_test': 0
}


verification_config = {
                      'check_usb_enumeration':True,
                      'check_usb_inf_init': True,
                      'check_v4l2_interface': True,
                      'check_audio_card':  True,
                      'check_cras_speaker': True,
                      'check_cras_mic': True,
                      'check_cras_pspeaker': True,
                      'check_cras_pmic': True,
                      'check_cras_speaker_vol': True,
                      'check_cras_mic_mute': True,
                      'check_prefer_camera': False,
                      'check_camera_mute': False,
                      'check_audio_stream': True,
                      'check_video_stream': True,
                      'check_hotrod_speaker': False,
                      'check_hotrod_mic': False,
                      'check_hotrod_camera': False,
                      'check_hotrod_pspeaker': False,
                      'check_hotrod_pmic': False,
                      'check_hotrod_pcamera': False,
                      'check_hotrod_speaker_vol': False,
                      'check_hotrod_mic_state': False,
                      'check_hotrod_camera_state': False,
                      'check_usb_errorlog': True,
                      'check_kernel_errorlog': True,
                      'check_video_errorlog': True,
                      'check_audio_errorlog': True,
                      'check_chrome_errorlog': True,
                      'check_atrus_errorlog': True,
                      'check_usb_stability': True,
                      'check_process_crash': False,
                      'check_kernel_panic': False
}


test_flow_control = {
                     'runtestonly': True,
                     'setupcleanup': True,
                     'abort_on_failure': False,
                     'random_mode': True,
                     'recovery_on_fatal_failure': True,
                     'skipcfmc': True,
                     'debug': True,
                     'report': True
}


servo_args = hosts.CrosHost.get_servo_arguments(args_dict)


def run_test(machine):
    host = hosts.create_host(machine, servo_args=None)
    run_test_only = test_flow_control['runtestonly']
    job.run_test('enterprise_CFM_Test', host=host,
                  run_test_only=run_test_only,
                  test_config=test_config, action_config=action_config,
                  verification_config=verification_config,
                  error_key_words=error_key_words,
                  test_flow_control=test_flow_control,
                  tag='qual')


parallel_simple(run_test, machines)
