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() |