| Index: chrome/test/functional/netflix.py
|
| ===================================================================
|
| --- chrome/test/functional/netflix.py (revision 261231)
|
| +++ chrome/test/functional/netflix.py (working copy)
|
| @@ -1,256 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 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 logging
|
| -import os
|
| -import time
|
| -
|
| -import pyauto_functional
|
| -import pyauto
|
| -import test_utils
|
| -
|
| -
|
| -class NetflixTestHelper():
|
| - """Helper functions for Netflix tests.
|
| -
|
| - For sample usage, look at class NetflixTest.
|
| - """
|
| -
|
| - # Netflix player states.
|
| - IS_GUEST_MODE_ERROR = '0'
|
| - IS_PLAYING = '4'
|
| -
|
| - TITLE_HOMEPAGE = 'http://movies.netflix.com/WiHome'
|
| - SIGNOUT_PAGE = 'https://account.netflix.com/Logout'
|
| - # 30 Rock.
|
| - VIDEO_URL = 'https://movies.netflix.com/WiPlayer?movieid=70136124'
|
| - ALT_VIDEO_URL = 'https://movies.netflix.com/WiPlayer?movieid=70133713'
|
| - _pyauto = None
|
| -
|
| - def __init__(self, pyauto):
|
| - self._pyauto = pyauto
|
| -
|
| - def _IsNetflixPluginEnabled(self):
|
| - """Determine Netflix plugin availability and its state."""
|
| - return [x for x in self._pyauto.GetPluginsInfo().Plugins() \
|
| - if x['name'] == 'Netflix' and x['enabled']]
|
| -
|
| - def _LoginToNetflix(self):
|
| - """Login to Netflix."""
|
| - credentials = self._pyauto.GetPrivateInfo()['test_netflix_acct']
|
| - board_name = self._pyauto.ChromeOSBoard()
|
| - assert credentials.get(board_name), \
|
| - 'No netflix credentials for %s.' % board_name
|
| - self._pyauto.NavigateToURL(credentials['login_url'])
|
| - login_js = """
|
| - document.getElementById('email').value='%s';
|
| - document.getElementById('password').value='%s';
|
| - window.domAutomationController.send('ok');
|
| - """ % (credentials[board_name], credentials['password'])
|
| - self._pyauto.assertEqual(self._pyauto.ExecuteJavascript(login_js), 'ok',
|
| - msg='Failed to set login credentials.')
|
| - self._pyauto.assertTrue(self._pyauto.SubmitForm('login-form'),
|
| - msg='Login to Netflix failed. We think this is an authetication '
|
| - 'problem from the Netflix side. Sometimes we also see this while '
|
| - 'login in manually.')
|
| -
|
| - def _GetVideoDroppedFrames(self, tab_index=0, windex=0):
|
| - """Returns total Netflix video dropped frames."""
|
| - js = """
|
| - var frames = nrdp.video.droppedFrames;
|
| - window.domAutomationController.send(frames + '');
|
| - """
|
| - return int(self._pyauto.ExecuteJavascript(js, tab_index=tab_index,
|
| - windex=windex))
|
| -
|
| - def _GetVideoFrames(self, tab_index=0, windex=0):
|
| - """Returns Netflix video total frames."""
|
| - js = """
|
| - var frames = nrdp.video.totalFrames;
|
| - window.domAutomationController.send(frames + '');
|
| - """
|
| - return int(self._pyauto.ExecuteJavascript(js, tab_index=tab_index,
|
| - windex=windex))
|
| -
|
| - def _HandleInfobars(self, err_msg):
|
| - """Manage infobars that come up during the test."""
|
| - def _HandleNetflixInfobar():
|
| - tab_info = self._pyauto.GetBrowserInfo()['windows'][0]['tabs'][0]
|
| - infobars = tab_info['infobars']
|
| - index = 0
|
| - for infobar in infobars:
|
| - if 'netflix' in infobar['text']:
|
| - # After storage infobar pops up, clicking the Ok button immediately
|
| - # returns the Storage error on faster machines like Stumpy/Lumpy so
|
| - # adding a delay of 1 second here.
|
| - time.sleep(1)
|
| - self._pyauto.PerformActionOnInfobar('accept', infobar_index=index)
|
| - return True
|
| - index = index + 1
|
| - return False
|
| - self._pyauto.assertTrue(self._pyauto.WaitUntil(_HandleNetflixInfobar),
|
| - msg=err_msg)
|
| -
|
| - def CurrentPlaybackTime(self):
|
| - """Returns the current playback time in seconds."""
|
| - time = self._pyauto.ExecuteJavascript("""
|
| - time = nrdp.video.currentTime;
|
| - window.domAutomationController.send(time + '');
|
| - """)
|
| - return int(float(time))
|
| -
|
| - def SignOut(self):
|
| - """Sign out from Netflix Login."""
|
| - self._pyauto.NavigateToURL(self.SIGNOUT_PAGE)
|
| -
|
| - def LoginAndStartPlaying(self):
|
| - """Login and start playing the video."""
|
| - self._pyauto.assertTrue(self._pyauto._IsNetflixPluginEnabled(),
|
| - msg='Netflix plugin is disabled or not available.')
|
| - self._pyauto._LoginToNetflix()
|
| - self._pyauto.assertTrue(self._pyauto.WaitUntil(
|
| - lambda: self._pyauto.GetActiveTabURL().spec(),
|
| - expect_retval=self.TITLE_HOMEPAGE),
|
| - msg='Login to Netflix failed.')
|
| - self._pyauto.NavigateToURL(self.VIDEO_URL)
|
| - self._pyauto._HandleInfobars(err_msg='Netflix infobar did not show up')
|
| -
|
| - def CheckNetflixPlaying(self, expected_result, error_msg):
|
| - """Check if Netflix is playing the video or not.
|
| -
|
| - Args:
|
| - expected_result: expected return value from Netflix player.
|
| - error_msg: If expected value isn't matching, error message to throw.
|
| - """
|
| - self._pyauto.assertTrue(self._pyauto.WaitUntil(
|
| - lambda: self._pyauto.ExecuteJavascript("""
|
| - if (typeof nrdp == 'undefined') {
|
| - window.domAutomationController.send('not ready');
|
| - }
|
| - player_status = nrdp.video.readyState;
|
| - window.domAutomationController.send(player_status + '');
|
| - """), expect_retval=expected_result),
|
| - msg=error_msg)
|
| -
|
| -
|
| -class NetflixTest(pyauto.PyUITest, NetflixTestHelper):
|
| - """Test case for Netflix player."""
|
| -
|
| - def __init__(self, methodName='runTest', **kwargs):
|
| - pyauto.PyUITest.__init__(self, methodName, **kwargs)
|
| - NetflixTestHelper.__init__(self, self)
|
| -
|
| - def ShouldAutoLogin(self):
|
| - return False
|
| -
|
| - def _Login(self):
|
| - """Perform login"""
|
| - credentials = self.GetPrivateInfo()['test_google_account']
|
| - self.Login(credentials['username'], credentials['password'])
|
| - logging.info('Logged in as %s' % credentials['username'])
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_logged_in'], msg='Login failed.')
|
| - self.assertFalse(login_info['is_guest'],
|
| - msg='Should not be logged in as guest.')
|
| -
|
| - def setUp(self):
|
| - assert os.geteuid() == 0, 'Run test as root since we might need to logout'
|
| - pyauto.PyUITest.setUp(self)
|
| - if self.GetLoginInfo()['is_logged_in']:
|
| - self.Logout()
|
| - self._Login()
|
| -
|
| - def tearDown(self):
|
| - self.SignOut()
|
| - pyauto.PyUITest.tearDown(self)
|
| -
|
| - def testPlayerLoadsAndPlays(self):
|
| - """Test that Netflix player loads and plays the title."""
|
| - self.LoginAndStartPlaying()
|
| - self._HandleInfobars(err_msg='Netflix plugin access infobar did not show up')
|
| - self.CheckNetflixPlaying(self.IS_PLAYING,
|
| - 'Player did not start playing the title.')
|
| -
|
| - def testMultiplePlayback(self):
|
| - """Test that playing two titles, Netflix returns multiple play error."""
|
| - self.LoginAndStartPlaying()
|
| - self._HandleInfobars(err_msg='Netflix plugin access infobar did not show up')
|
| - self.CheckNetflixPlaying(self.IS_PLAYING,
|
| - 'Player did not start playing the title.')
|
| - self.AppendTab(self.ALT_VIDEO_URL)
|
| - self.assertTrue('Multiple Play Error' in self.GetTabContents(),
|
| - msg='Multiple Play Error is not found on the page.')
|
| -
|
| - def testPlaying(self):
|
| - """Test that title playing progresses."""
|
| - self.LoginAndStartPlaying()
|
| - self._HandleInfobars(err_msg='Netflix plugin access infobar did not show up')
|
| - self.CheckNetflixPlaying(self.IS_PLAYING,
|
| - 'Player did not start playing the title.')
|
| - title_length = self.ExecuteJavascript("""
|
| - time = nrdp.video.duration;
|
| - window.domAutomationController.send(time + '');
|
| - """)
|
| - title_length = int(float(title_length))
|
| - prev_time = 0
|
| - current_time = 0
|
| - count = 0
|
| - while current_time < title_length:
|
| - # We want to test playing only for ten seconds.
|
| - count = count + 1
|
| - if count == 10:
|
| - break
|
| - current_time = self.CurrentPlaybackTime()
|
| - self.assertTrue(prev_time <= current_time,
|
| - msg='Prev playing time %s is greater than current time %s.'
|
| - % (prev_time, current_time))
|
| - prev_time = current_time
|
| - # play video for some time
|
| - time.sleep(1)
|
| - # In case player doesn't start playing at all, above while loop may
|
| - # still pass. So re-verifying and assuming that player did play something
|
| - # during last 10 seconds.
|
| - self.assertTrue(current_time > 0,
|
| - msg='Netflix player did not start playing.')
|
| -
|
| -
|
| -class NetflixGuestModeTest(pyauto.PyUITest, NetflixTestHelper):
|
| - """Netflix in guest mode."""
|
| -
|
| - def __init__(self, methodName='runTest', **kwargs):
|
| - pyauto.PyUITest.__init__(self, methodName, **kwargs)
|
| - NetflixTestHelper.__init__(self, self)
|
| -
|
| - def setUp(self):
|
| - assert os.geteuid() == 0, 'Run test as root since we might need to logout'
|
| - pyauto.PyUITest.setUp(self)
|
| - if self.GetLoginInfo()['is_logged_in']:
|
| - self.Logout()
|
| - self.LoginAsGuest()
|
| - login_info = self.GetLoginInfo()
|
| - self.assertTrue(login_info['is_logged_in'], msg='Not logged in at all.')
|
| - self.assertTrue(login_info['is_guest'], msg='Not logged in as guest.')
|
| -
|
| - def ShouldAutoLogin(self):
|
| - return False
|
| -
|
| - def tearDown(self):
|
| - self.AppendTab(self.SIGNOUT_PAGE)
|
| - self.Logout()
|
| - pyauto.PyUITest.tearDown(self)
|
| -
|
| - def testGuestMode(self):
|
| - """Test that Netflix doesn't play in guest mode login."""
|
| - self.LoginAndStartPlaying()
|
| - self.CheckNetflixPlaying(
|
| - self.IS_GUEST_MODE_ERROR,
|
| - 'Netflix player did not return a Guest mode error.')
|
| - # crosbug.com/p/14009
|
| - self.assertTrue('Netflix Video Player Unavailable' in self.GetTabContents(),
|
| - msg='Guest Mode error is not found on the page.')
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|