Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1229)

Side by Side Diff: server/site_wlan_connect.py

Issue 3135051: Add more DBus exception trampolines (Closed) Base URL: ssh://gitrw.chromium.org/autotest.git
Patch Set: Dump logs if there are quirks, too Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 import dbus, dbus.mainloop.glib, gobject, logging, re, sys, time, subprocess 1 import dbus, dbus.mainloop.glib, gobject, logging, re, sys, time, subprocess
2 2
3 ssid = sys.argv[1] 3 ssid = sys.argv[1]
4 security = sys.argv[2] 4 security = sys.argv[2]
5 psk = sys.argv[3] 5 psk = sys.argv[3]
6 assoc_timeout = float(sys.argv[4]) 6 assoc_timeout = float(sys.argv[4])
7 config_timeout = float(sys.argv[5]) 7 config_timeout = float(sys.argv[5])
8 reset_timeout = float(sys.argv[6]) if len(sys.argv) > 6 else assoc_timeout 8 reset_timeout = float(sys.argv[6]) if len(sys.argv) > 6 else assoc_timeout
9 9
10 bus_loop = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 10 bus_loop = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
(...skipping 16 matching lines...) Expand all
27 connection_settings["Passphrase"] = psk 27 connection_settings["Passphrase"] = psk
28 28
29 def DbusSetup(): 29 def DbusSetup():
30 try: 30 try:
31 path = manager.GetService((connection_settings)) 31 path = manager.GetService((connection_settings))
32 service = dbus.Interface( 32 service = dbus.Interface(
33 bus.get_object("org.chromium.flimflam", path), 33 bus.get_object("org.chromium.flimflam", path),
34 "org.chromium.flimflam.Service") 34 "org.chromium.flimflam.Service")
35 except Exception, e: 35 except Exception, e:
36 print "FAIL(GetService): ssid %s exception %s" %(ssid, e) 36 print "FAIL(GetService): ssid %s exception %s" %(ssid, e)
37 sys.exit(1) 37 ErrExit(1)
38 38
39 return (path, service) 39 return (path, service)
40 40
41 41
42 def ParseProps(props): 42 def ParseProps(props):
43 proplist = [] 43 proplist = []
44 if props is not None: 44 if props is not None:
45 for p in props: 45 for p in props:
46 proplist.append("'%s': '%s'" % (str(p), str(props[p]))) 46 proplist.append("'%s': '%s'" % (str(p), str(props[p])))
47 return '{ %s }' % ', '.join(proplist) 47 return '{ %s }' % ', '.join(proplist)
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 time.sleep(5) 104 time.sleep(5)
105 return (None, 'FAIL') 105 return (None, 'FAIL')
106 if e.get_dbus_name() == 'org.freedesktop.DBus.Error.UnknownMethod': 106 if e.get_dbus_name() == 'org.freedesktop.DBus.Error.UnknownMethod':
107 # We can hope that a ResetService in the next call will solve this 107 # We can hope that a ResetService in the next call will solve this
108 connect_quirks['lost_dbus_connect'] = 1 108 connect_quirks['lost_dbus_connect'] = 1
109 print>>sys.stderr, "Lost the service handle during Connect()!" 109 print>>sys.stderr, "Lost the service handle during Connect()!"
110 time.sleep(0.5) 110 time.sleep(0.5)
111 return (None, 'FAIL') 111 return (None, 'FAIL')
112 # What is this exception? 112 # What is this exception?
113 print "FAIL(Connect): ssid %s DBus exception %s" %(ssid, e) 113 print "FAIL(Connect): ssid %s DBus exception %s" %(ssid, e)
114 sys.exit(2) 114 ErrExit(2)
115 except Exception, e: 115 except Exception, e:
116 print "FAIL(Connect): ssid %s exception %s" %(ssid, e) 116 print "FAIL(Connect): ssid %s exception %s" %(ssid, e)
117 sys.exit(2) 117 ErrExit(2)
118 118
119 properties = None 119 properties = None
120 # wait up to assoc_timeout seconds to associate 120 # wait up to assoc_timeout seconds to associate
121 while assoc_time < assoc_timeout: 121 while assoc_time < assoc_timeout:
122 properties = service.GetProperties() 122 try:
123 properties = service.GetProperties()
124 except dbus.exceptions.DBusException, e:
125 connect_quirks['get_prop'] = 1
126 print>>sys.stderr, "Got exception trying GetProperties()!"
127 return (None, 'DBUSFAIL')
123 status = properties.get("State", None) 128 status = properties.get("State", None)
124 # print>>sys.stderr, "time %3.1f state %s" % (assoc_time, status) 129 # print>>sys.stderr, "time %3.1f state %s" % (assoc_time, status)
125 if status == "failure": 130 if status == "failure":
126 if assoc_time == init_assoc_time: 131 if assoc_time == init_assoc_time:
127 connect_quirks['fast_fail'] = 1 132 connect_quirks['fast_fail'] = 1
128 print>>sys.stderr, "failure on first try! Sleep 5 seconds" 133 print>>sys.stderr, "failure on first try! Sleep 5 seconds"
129 time.sleep(5) 134 time.sleep(5)
130 return (properties, 'FAIL') 135 return (properties, 'FAIL')
131 if status == "configuration" or status == "ready": 136 if status == "configuration" or status == "ready":
132 return (properties, None) 137 return (properties, None)
133 time.sleep(.5) 138 time.sleep(.5)
134 assoc_time += .5 139 assoc_time += .5
135 if assoc_time >= assoc_timeout: 140 if assoc_time >= assoc_timeout:
136 if properties is None: 141 if properties is None:
137 properties = service.GetProperties() 142 properties = service.GetProperties()
138 return (properties, 'TIMEOUT') 143 return (properties, 'TIMEOUT')
139 sys.exit(4) 144 ErrExit(4)
140 145
141 146
142 # Open /var/log/messages and seek to the current end 147 # Open /var/log/messages and seek to the current end
143 def OpenLogs(*logfiles): 148 def OpenLogs(*logfiles):
144 logs = [] 149 logs = []
145 for logfile in logfiles: 150 for logfile in logfiles:
146 try: 151 try:
147 msgs = open(logfile) 152 msgs = open(logfile)
148 msgs.seek(0, 2) 153 msgs.seek(0, 2)
149 logs.append({ 'name': logfile, 'file': msgs }) 154 logs.append({ 'name': logfile, 'file': msgs })
150 except Exception, e: 155 except Exception, e:
151 # If we cannot open the file, this is not necessarily an error 156 # If we cannot open the file, this is not necessarily an error
152 pass 157 pass
153 158
154 return logs 159 return logs
155 160
156 161
157 def DumpLogs(logs): 162 def DumpLogs(logs):
158 for log in logs: 163 for log in logs:
159 print>>sys.stderr, "Content of %s during our run:" % log['name'] 164 print>>sys.stderr, "Content of %s during our run:" % log['name']
160 print>>sys.stderr, " ))) ".join(log['file'].readlines()) 165 print>>sys.stderr, " ))) ".join(log['file'].readlines())
161 166
162 print>>sys.stderr, "iw dev wlan0 scan output: %s" % \ 167 print>>sys.stderr, "iw dev wlan0 scan output: %s" % \
163 subprocess.Popen(["iw", "dev", "wlan0", "scan"], 168 subprocess.Popen(["iw", "dev", "wlan0", "scan"],
164 stdout=subprocess.PIPE).communicate()[0] 169 stdout=subprocess.PIPE).communicate()[0]
165 170
171 def ErrExit(code):
172 try:
173 service.Disconnect()
174 except:
175 pass
176 DumpLogs(logs)
177 sys.exit(code)
166 178
167 logs = OpenLogs('/var/log/messages', '/var/log/hostap.log') 179 logs = OpenLogs('/var/log/messages', '/var/log/hostap.log')
168 180
169 (path, service) = DbusSetup() 181 (path, service) = DbusSetup()
170 182
171 assoc_start = time.time() 183 assoc_start = time.time()
172 for attempt in range(5): 184 for attempt in range(5):
173 assoc_time = time.time() - assoc_start 185 assoc_time = time.time() - assoc_start
174 print>>sys.stderr, "connect attempt #%d %3.1f secs" % (attempt, assoc_time) 186 print>>sys.stderr, "connect attempt #%d %3.1f secs" % (attempt, assoc_time)
175 (properties, failure_type) = TryConnect(assoc_time) 187 (properties, failure_type) = TryConnect(assoc_time)
176 if failure_type is None or failure_type == 'TIMEOUT': 188 if failure_type is None or failure_type == 'TIMEOUT':
177 break 189 break
178 if failure_type == 'DBUSFAIL': 190 if failure_type == 'DBUSFAIL':
179 (path, service) = DbusSetup() 191 (path, service) = DbusSetup()
180 192
181 assoc_time = time.time() - assoc_start 193 assoc_time = time.time() - assoc_start
182 194
183 if attempt > 0: 195 if attempt > 0:
184 connect_quirks['multiple_attempts'] = 1 196 connect_quirks['multiple_attempts'] = 1
185 197
186 if failure_type is not None: 198 if failure_type is not None:
187 print "%s(assoc): ssid %s assoc %3.1f secs props %s" \ 199 print "%s(assoc): ssid %s assoc %3.1f secs props %s" \
188 %(failure_type, ssid, assoc_time, ParseProps(properties)) 200 %(failure_type, ssid, assoc_time, ParseProps(properties))
189 DumpLogs(logs) 201 ErrExit(3)
190 sys.exit(3)
191 202
192 # wait another config_timeout seconds to get an ip address 203 # wait another config_timeout seconds to get an ip address
193 config_time = 0 204 config_time = 0
194 status = properties.get("State", None) 205 status = properties.get("State", None)
195 if status != "ready": 206 if status != "ready":
196 while config_time < config_timeout: 207 while config_time < config_timeout:
197 properties = service.GetProperties() 208 properties = service.GetProperties()
198 status = properties.get("State", None) 209 status = properties.get("State", None)
199 # print>>sys.stderr, "time %3.1f state %s" % (config_time, status) 210 # print>>sys.stderr, "time %3.1f state %s" % (config_time, status)
200 if status == "failure": 211 if status == "failure":
201 print "FAIL(config): ssid %s assoc %3.1f config %3.1f secs" \ 212 print "FAIL(config): ssid %s assoc %3.1f config %3.1f secs" \
202 %(ssid, assoc_time, config_time) 213 %(ssid, assoc_time, config_time)
203 sys.exit(5) 214 ErrExit(5)
204 if status == "ready": 215 if status == "ready":
205 break 216 break
206 if status != "configuration": 217 if status != "configuration":
207 print "FAIL(config): ssid %s assoc %3.1f config %3.1f secs *%s*" \ 218 print "FAIL(config): ssid %s assoc %3.1f config %3.1f secs *%s*" \
208 %(ssid, assoc_time, config_time, status) 219 %(ssid, assoc_time, config_time, status)
209 break 220 ErrExit(4)
210 time.sleep(.5) 221 time.sleep(.5)
211 config_time += .5 222 config_time += .5
212 if config_time >= config_timeout: 223 if config_time >= config_timeout:
213 print "TIMEOUT(config): ssid %s assoc %3.1f config %3.1f secs" \ 224 print "TIMEOUT(config): ssid %s assoc %3.1f config %3.1f secs" \
214 %(ssid, assoc_time, config_time) 225 %(ssid, assoc_time, config_time)
215 DumpLogs(logs) 226 ErrExit(6)
216 sys.exit(6)
217 227
218 print "OK %3.1f %3.1f %s (assoc and config times in sec, quirks)" \ 228 print "OK %3.1f %3.1f %s (assoc and config times in sec, quirks)" \
219 %(assoc_time, config_time, str(connect_quirks.keys())) 229 %(assoc_time, config_time, str(connect_quirks.keys()))
230
231 if connect_quirks:
232 DumpLogs(logs)
220 sys.exit(0) 233 sys.exit(0)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698