blob: d372242a5d1e1b7e574744110e814b9079182fa7 [file] [log] [blame]
"""Tests for rotate-related commands."""
import inspect
import json
import os
import time
import unittest
import requests
import testcase_base
from utils import util
TESTCASE_CALL_DIR = os.path.dirname(os.path.realpath(__file__))
SERVLET_ORIENTATION = 'http://localhost:8080/OrientationManagerService'
MAX_TRIES = 3
ROTATION_0 = 0
ROTATION_270 = 3
ROTATION_180 = 2
ROTATION_90 = 1
ORIENTATION_PORTRAIT = 1
ORIENTATION_LANDSCAPE = 2
class OrientationTest(testcase_base.BaseConsoleTest):
"""This class aims to test rotate-related emulator console commands."""
def __init__(self, method_name=None, avd=None):
if method_name:
super(OrientationTest, self).__init__(method_name)
else:
super(OrientationTest, self).__init__()
self.avd = avd
@classmethod
def setUpClass(cls):
util.run_script_run_adb_shell(TESTCASE_CALL_DIR)
@classmethod
def tearDownClass(cls):
util.unstall_apps(TESTCASE_CALL_DIR)
def _process_request_orientation_service(self, payload):
"""Processes post request to orientation service.
Sends post request to sms service, gets the orientation and rotation.
Args:
payload: The payload for sending POST request to sms server.
Returns:
orientation: The orientation of the screen.
rotation: The rotation of the screen.
"""
r = requests.post(SERVLET_ORIENTATION, data=json.dumps(payload))
if r.raise_for_status():
error_msg = ('Servlet Error: Post request to %s failed' %
SERVLET_ORIENTATION)
print error_msg
return False, error_msg
r_json = r.json()
if r_json['isFail']:
error_msg = ('Servlet Error: Failure occurred in servlet side => %s'
% SERVLET_ORIENTATION)
print error_msg
return False, error_msg
return int(r_json['screenOrientation']), int(r_json['screenRotation'])
def _poll_orientation_rotation_and_verify(self, expected_orientation,
expected_rotation):
"""Polls orientation/rotation information from emulator and verifies them.
Args:
expected_orientation: Expected orientation to get.
expected_rotation: Expected rotation to get.
"""
got_expected = False
for i in range(MAX_TRIES):
got_orientation, got_rotation = self._process_request_orientation_service(
{})
print ('got_orientation = %s, expected_orientation = %s' %
(got_orientation, expected_orientation))
print ('got_rotation = %s, expected_rotation = %s' %
(got_rotation, expected_rotation))
if (got_orientation == expected_orientation and
got_rotation == expected_rotation):
got_expected = True
break
else:
time.sleep(util.TRIAL_WAIT_TIMEOUT_S)
self.assertTrue(got_expected,
'Max tries reached, failed to get expected values.')
def _execute_rotate_command_and_verify(self, expected_orientation,
expected_rotation):
print '\n-------------------------'
is_command_successful, output = util.execute_console_command(
self.telnet, util.CMD_ROTATE, '')
self.assert_cmd_successful(
is_command_successful, 'Failed to properly get orientation/rotation.',
False, '', '', output)
self._poll_orientation_rotation_and_verify(expected_orientation,
expected_rotation)
def test_orientation(self):
"""Test command for: rotate
Test Rail ID: C14595295
Test steps:
1. Launch an emulator avd
2. Open any app, say Calculator, or maps
3. From command prompt, run: telnet localhost <port>
4. Copy the auth_token value from ~/.emulator_console_auth_token
5. Run: auth auth_token
6. Run: rotate, and verify
7. Run: rotate, and verify
8. Run: rotate, and verify
9. Run: rotate, and verify
Verify:
Check to orientation and rotation of the launched app.
"""
print 'Running test: %s' % (inspect.stack()[0][3])
self._poll_orientation_rotation_and_verify(ORIENTATION_PORTRAIT, ROTATION_0)
self._execute_rotate_command_and_verify(ORIENTATION_LANDSCAPE, ROTATION_270)
self._execute_rotate_command_and_verify(ORIENTATION_PORTRAIT, ROTATION_0)
self._execute_rotate_command_and_verify(ORIENTATION_LANDSCAPE, ROTATION_90)
self._execute_rotate_command_and_verify(ORIENTATION_PORTRAIT, ROTATION_0)
if __name__ == '__main__':
print '======= rotate Test ======='
unittest.main()