1 #!/usr/bin/env python 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 import os 7 8 import pyauto_functional # must be imported before pyauto 9 import pyauto 10 import test_utils 11 12 13 class CroshTest(pyauto.PyUITest): 14 """Tests for crosh.""" 15 16 def setUp(self): 17 """Close all windows at startup.""" 18 pyauto.PyUITest.setUp(self) 19 for _ in range(self.GetBrowserWindowCount()): 20 self.CloseBrowserWindow(0) 21 22 def testBasic(self): 23 """Verify crosh basic flow.""" 24 test_utils.OpenCroshVerification(self) 25 26 # Verify crosh prompt. 27 self.WaitForHtermText(text='crosh> ', 28 msg='Could not find "crosh> " prompt') 29 self.assertTrue( 30 self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), 31 msg='Could not find "crosh> " prompt') 32 33 # Run a crosh command. 34 self.SendKeysToHterm('help\\n') 35 self.WaitForHtermText(text='help_advanced', 36 msg='Could not find "help_advanced" in help output.') 37 38 # Exit crosh and close tab. 39 self.SendKeysToHterm('exit\\n') 40 self.WaitForHtermText(text='command crosh completed with exit code 0', 41 msg='Could not exit crosh.') 42 43 def testAddBookmark(self): 44 """Test crosh URL can be bookmarked""" 45 test_utils.OpenCroshVerification(self) 46 47 # Add bookmark. 48 bookmarks = self.GetBookmarkModel() 49 bar_id = bookmarks.BookmarkBar()['id'] 50 name = 'crosh' 51 url = self.GetActiveTabURL() 52 count = bookmarks.NodeCount() 53 self.AddBookmarkURL(bar_id, 0, name, url.spec()) 54 bookmarks = self.GetBookmarkModel() 55 node = bookmarks.BookmarkBar()['children'][0] 56 self.assertEqual(count + 1, bookmarks.NodeCount()) 57 self.assertEqual(node['type'], 'url') 58 self.assertEqual(node['name'], name) 59 self.assertEqual(url.spec(), node['url']) 60 61 def testMultipleWindowCrosh(self): 62 """Test that crosh can be opened in multiple windows.""" 63 test_utils.OpenCroshVerification(self) 64 65 for windex in range (1, 4): # 3 new windows 66 self.OpenNewBrowserWindow(True) 67 self.OpenCrosh() 68 self.assertEqual('crosh', self.GetActiveTabTitle()) 69 70 # Verify crosh prompt. 71 self.WaitForHtermText(text='crosh> ', tab_index=1, windex=windex, 72 msg='Could not find "crosh> " prompt') 73 self.assertTrue( 74 self.GetHtermRowsText(start=0, end=2, tab_index=1, 75 windex=windex).endswith('crosh> '), 76 msg='Could not find "crosh> " prompt') 77 78 # Exit crosh. 79 self.SendKeysToHterm('exit\\n', tab_index=1, windex=windex) 80 self.WaitForHtermText(text='command crosh completed with exit code 0', 81 tab_index=1, windex=windex, 82 msg='Could not exit crosh.') 83 84 def testShell(self): 85 """Test shell can be opened in crosh.""" 86 test_utils.OpenCroshVerification(self) 87 88 # Verify crosh prompt. 89 self.WaitForHtermText(text='crosh> ', 90 msg='Could not find "crosh> " prompt') 91 self.assertTrue( 92 self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), 93 msg='Could not find "crosh> " prompt') 94 95 # Run a shell command. 96 self.SendKeysToHterm(r'shell\n') 97 self.WaitForHtermText(text='chronos@localhost', 98 msg='Could not find "chronos@localhost" in shell output.') 99 100 def testConnectToAnotherhost(self): 101 """Test ssh to another host.""" 102 test_utils.OpenCroshVerification(self) 103 104 # Verify crosh prompt. 105 self.WaitForHtermText(text='crosh> ', 106 msg='Could not find "crosh> " prompt') 107 self.assertTrue( 108 self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), 109 msg='Could not find "crosh> " prompt') 110 111 # Ssh to another host: chronos@localhost. 112 self.SendKeysToHterm(r'ssh chronos@localhost\n') 113 self.WaitForHtermText(text='Password', 114 msg='Could not find "Password" in shell output.') 115 self.SendKeysToHterm(r'test0000\n') 116 self.WaitForHtermText(text='chronos@localhost', 117 msg='Could not find "chronos@localhost" in shell output.') 118 119 def testTabSwitching(self): 120 """Test tab can be switched in crosh.""" 121 test_utils.OpenCroshVerification(self) 122 123 # Open 6 tabs 124 for x in xrange(3): 125 self.AppendTab(self.GetHttpURLForDataPath('title2.html')) 126 self.assertEqual('Title Of Awesomeness', self.GetActiveTabTitle(), 127 msg='Unable to navigate to title2.html and ' 128 'verify tab title.') 129 self.OpenCrosh() 130 self.assertEqual(7, len(self.GetBrowserInfo()['windows'][0]['tabs'])) 131 132 # Select tab 5 133 self.ApplyAccelerator(pyauto.IDC_SELECT_TAB_4) 134 self.assertEqual('crosh', self.GetActiveTabTitle(), 135 msg='Unable to naviage to crosh.') 136 137 # Run a crosh command. 138 self.SendKeysToHterm('help\\n', tab_index=4, windex=0) 139 self.WaitForHtermText(text='help_advanced', tab_index=4, windex=0, 140 msg='Could not find "help_advanced" in help output.') 141 142 def testLargefileCrosh(self): 143 """Test large file is displayed in crosh.""" 144 test_utils.OpenCroshVerification(self) 145 146 # Verify crosh prompt. 147 self.WaitForHtermText(text='crosh> ', 148 msg='Could not find "crosh> " prompt') 149 self.assertTrue( 150 self.GetHtermRowsText(start=0, end=2).endswith('crosh> '), 151 msg='Could not find "crosh> " prompt') 152 153 # Login to localhost. 154 self.SendKeysToHterm(r'ssh chronos@localhost\n') 155 self.WaitForHtermText(text='Password', 156 msg='Could not find "Password" in shell output.') 157 self.SendKeysToHterm(r'test0000\n') 158 self.WaitForHtermText(text='chronos@localhost', 159 msg='Could not find "chronos@localhost" in shell output.') 160 161 # Create a file with 140 characters per line, 50000 lines. 162 bigfn = '/tmp/bigfile.txt' 163 with open(bigfn, 'w') as file: 164 file.write(('0' * 140 + '\n') * 50000 + 'complete\n') 165 166 # Cat a large file. 167 self.SendKeysToHterm(r'cat %s\n' % bigfn) 168 self.WaitForHtermText(text='complete', 169 msg='Could not find "complete" in shell output.') 170 os.remove(bigfn) 171 172 173 if __name__ == '__main__': 174 pyauto_functional.Main() 175