| #!/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 os |
| |
| import pyauto_functional # must be imported before pyauto |
| import pyauto |
| import test_utils |
| |
| |
| class CroshTest(pyauto.PyUITest): |
| """Tests for crosh.""" |
| |
| def setUp(self): |
| """Close all windows at startup.""" |
| pyauto.PyUITest.setUp(self) |
| for _ in range(self.GetBrowserWindowCount()): |
| self.CloseBrowserWindow(0) |
| |
| def testBasic(self): |
| """Verify crosh basic flow.""" |
| test_utils.OpenCroshVerification(self) |
| |
| # Verify crosh prompt. |
| self.WaitForHtermText(text='crosh> ', |
| msg='Could not find "crosh> " prompt') |
| self.assertTrue( |
| self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), |
| msg='Could not find "crosh> " prompt') |
| |
| # Run a crosh command. |
| self.SendKeysToHterm('help\\n') |
| self.WaitForHtermText(text='help_advanced', |
| msg='Could not find "help_advanced" in help output.') |
| |
| # Exit crosh and close tab. |
| self.SendKeysToHterm('exit\\n') |
| self.WaitForHtermText(text='command crosh completed with exit code 0', |
| msg='Could not exit crosh.') |
| |
| def testAddBookmark(self): |
| """Test crosh URL can be bookmarked""" |
| test_utils.OpenCroshVerification(self) |
| |
| # Add bookmark. |
| bookmarks = self.GetBookmarkModel() |
| bar_id = bookmarks.BookmarkBar()['id'] |
| name = 'crosh' |
| url = self.GetActiveTabURL() |
| count = bookmarks.NodeCount() |
| self.AddBookmarkURL(bar_id, 0, name, url.spec()) |
| bookmarks = self.GetBookmarkModel() |
| node = bookmarks.BookmarkBar()['children'][0] |
| self.assertEqual(count + 1, bookmarks.NodeCount()) |
| self.assertEqual(node['type'], 'url') |
| self.assertEqual(node['name'], name) |
| self.assertEqual(url.spec(), node['url']) |
| |
| def testMultipleWindowCrosh(self): |
| """Test that crosh can be opened in multiple windows.""" |
| test_utils.OpenCroshVerification(self) |
| |
| for windex in range (1, 4): # 3 new windows |
| self.OpenNewBrowserWindow(True) |
| self.OpenCrosh() |
| self.assertEqual('crosh', self.GetActiveTabTitle()) |
| |
| # Verify crosh prompt. |
| self.WaitForHtermText(text='crosh> ', tab_index=1, windex=windex, |
| msg='Could not find "crosh> " prompt') |
| self.assertTrue( |
| self.GetHtermRowsText(start=0, end=2, tab_index=1, |
| windex=windex).endswith('crosh> '), |
| msg='Could not find "crosh> " prompt') |
| |
| # Exit crosh. |
| self.SendKeysToHterm('exit\\n', tab_index=1, windex=windex) |
| self.WaitForHtermText(text='command crosh completed with exit code 0', |
| tab_index=1, windex=windex, |
| msg='Could not exit crosh.') |
| |
| def testShell(self): |
| """Test shell can be opened in crosh.""" |
| test_utils.OpenCroshVerification(self) |
| |
| # Verify crosh prompt. |
| self.WaitForHtermText(text='crosh> ', |
| msg='Could not find "crosh> " prompt') |
| self.assertTrue( |
| self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), |
| msg='Could not find "crosh> " prompt') |
| |
| # Run a shell command. |
| self.SendKeysToHterm(r'shell\n') |
| self.WaitForHtermText(text='chronos@localhost', |
| msg='Could not find "chronos@localhost" in shell output.') |
| |
| def testConnectToAnotherhost(self): |
| """Test ssh to another host.""" |
| test_utils.OpenCroshVerification(self) |
| |
| # Verify crosh prompt. |
| self.WaitForHtermText(text='crosh> ', |
| msg='Could not find "crosh> " prompt') |
| self.assertTrue( |
| self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), |
| msg='Could not find "crosh> " prompt') |
| |
| # Ssh to another host: chronos@localhost. |
| self.SendKeysToHterm(r'ssh chronos@localhost\n') |
| self.WaitForHtermText(text='Password', |
| msg='Could not find "Password" in shell output.') |
| self.SendKeysToHterm(r'test0000\n') |
| self.WaitForHtermText(text='chronos@localhost', |
| msg='Could not find "chronos@localhost" in shell output.') |
| |
| def testTabSwitching(self): |
| """Test tab can be switched in crosh.""" |
| test_utils.OpenCroshVerification(self) |
| |
| # Open 6 tabs |
| for x in xrange(3): |
| self.AppendTab(self.GetHttpURLForDataPath('title2.html')) |
| self.assertEqual('Title Of Awesomeness', self.GetActiveTabTitle(), |
| msg='Unable to navigate to title2.html and ' |
| 'verify tab title.') |
| self.OpenCrosh() |
| self.assertEqual(7, len(self.GetBrowserInfo()['windows'][0]['tabs'])) |
| |
| # Select tab 5 |
| self.ApplyAccelerator(pyauto.IDC_SELECT_TAB_4) |
| self.assertEqual('crosh', self.GetActiveTabTitle(), |
| msg='Unable to naviage to crosh.') |
| |
| # Run a crosh command. |
| self.SendKeysToHterm('help\\n', tab_index=4, windex=0) |
| self.WaitForHtermText(text='help_advanced', tab_index=4, windex=0, |
| msg='Could not find "help_advanced" in help output.') |
| |
| def testLargefileCrosh(self): |
| """Test large file is displayed in crosh.""" |
| test_utils.OpenCroshVerification(self) |
| |
| # Verify crosh prompt. |
| self.WaitForHtermText(text='crosh> ', |
| msg='Could not find "crosh> " prompt') |
| self.assertTrue( |
| self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), |
| msg='Could not find "crosh> " prompt') |
| |
| # Login to localhost. |
| self.SendKeysToHterm(r'ssh chronos@localhost\n') |
| self.WaitForHtermText(text='Password', |
| msg='Could not find "Password" in shell output.') |
| self.SendKeysToHterm(r'test0000\n') |
| self.WaitForHtermText(text='chronos@localhost', |
| msg='Could not find "chronos@localhost" in shell output.') |
| |
| # Create a file with 140 characters per line, 50000 lines. |
| bigfn = '/tmp/bigfile.txt' |
| with open(bigfn, 'w') as file: |
| file.write(('0' * 140 + '\n') * 50000 + 'complete\n') |
| |
| # Cat a large file. |
| self.SendKeysToHterm(r'cat %s\n' % bigfn) |
| self.WaitForHtermText(text='complete', |
| msg='Could not find "complete" in shell output.') |
| os.remove(bigfn) |
| |
| |
| if __name__ == '__main__': |
| pyauto_functional.Main() |