# Copyright (c) 2012 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.

AUTHOR = "Chrome OS Team"
NAME = "power_LoadTest.video_1hour"
PURPOSE = "Measure power draw when system is under load."
CRITERIA = "This test is a benchmark."
TIME = "LONG"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "power"
TEST_TYPE = "client"

DOC = """
This test runs a load test consisting of cycling though web pages, playing
videos, etc. and measures battery power draw. The duration of this test is
determined by the seconds variable.


The following manual steps need to be performed on the device under test
before this test can be run:
  - make sure that Ethernet cable is disconnected and WiFi is connected
  - disconnect power cable

You are now ready to run the test.
"""

# TODO (bleung): Find a way to do automatic Facebook login for test account.
# TODO (tbroch): Find way to not replicate all these parameters that are common
# between this control file and the original
loop_time = 3600
loop_count = 1

# Task format:
# This sets the tasks variable in the extension directly via javascript.
#
# Args:
# type: [window, cycle] Window will open a window with tabs for the duration of
# the window. Cycle will cycle through the urls for the duration of the window
# every delay ms.
# name: name of the window
# start: start time (ms)
# duration: duration of task (ms)
# delay: time for each url for the cycle type (ms)
# timeout: time before loading a url times out for the cycle type (ms)
# focus: whether the window should be in the foreground
# tabs: list of urls for the window type
# urls: list of urls to cycle through for the cycle type

tasks='[{' + \
'    type: \'window\',' + \
'    name: \'background\',' + \
'    start: 0,' + \
'    duration: 3600000,' + \
'    focus: false,' + \
'    tabs: [' + \
'     \'http://www.google.com\',' + \
'     \'http://news.google.com\',' + \
'     \'http://www.reddit.com\',' + \
'     \'http://clothing.shop.ebay.com/Womens-Shoes-/63889/i.html\',' + \
'     \'http://www.facebook.com\'' + \
'    ]}, {' + \
'    type: \'window\',' + \
'    name: \'video\',' + \
'    start: 1000,' + \
'    duration: 3600000,' + \
'    focus: true,' + \
'    tabs: [' + \
'     \'http://www.youtube.com/embed/YE7VzlLtp-4?autoplay=1&loop=1&' + \
'playlist=YE7VzlLtp-4\'' + \
'    ]}]'


args_dict = utils.args_to_dict(args)
pdash_note = args_dict.get('pdash_note', '')
job.run_test('power_LoadTest', loop_time=loop_time, loop_count=loop_count,
             test_low_batt_p=6, tasks=tasks, tag=NAME.split('.')[1],
             pdash_note=pdash_note)
