~ubuntu-branches/ubuntu/vivid/upower/vivid-proposed

« back to all changes in this revision

Viewing changes to src/linux/integration-test

  • Committer: Package Import Robot
  • Author(s): Andreas Henriksson
  • Date: 2014-07-12 20:45:10 UTC
  • mfrom: (17.1.6 experimental)
  • Revision ID: package-import@ubuntu.com-20140712204510-9rwc7jgforgc8301
Tags: 0.99.0-3
* Team upload.
* Bump Standards-Version to 3.9.5
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    sys.exit(0)
40
40
 
41
41
UP = 'org.freedesktop.UPower'
 
42
UP_DEVICE = 'org.freedesktop.UPower.Device'
 
43
UP_DISPLAY_OBJECT_PATH = '/org/freedesktop/UPower/devices/DisplayDevice'
42
44
 
43
45
(UP_DEVICE_STATE_UNKNOWN,
44
46
 UP_DEVICE_STATE_CHARGING,
46
48
 UP_DEVICE_STATE_EMPTY,
47
49
 UP_DEVICE_STATE_FULLY_CHARGED) = (0, 1, 2, 3, 4)
48
50
 
 
51
(UP_DEVICE_LEVEL_UNKNOWN,
 
52
 UP_DEVICE_LEVEL_NONE,
 
53
 UP_DEVICE_LEVEL_DISCHARGING,
 
54
 UP_DEVICE_LEVEL_LOW,
 
55
 UP_DEVICE_LEVEL_CRITICAL,
 
56
 UP_DEVICE_LEVEL_ACTION) = (0, 1, 2, 3, 4, 5)
49
57
 
50
58
class Tests(unittest.TestCase):
51
59
    @classmethod
166
174
            '/org/freedesktop/UPower', 'org.freedesktop.DBus.Properties', None)
167
175
        return proxy.Get('(ss)', UP, name)
168
176
 
 
177
    def get_dbus_display_property(self, name):
 
178
        '''Get property value from display device D-Bus interface.'''
 
179
 
 
180
        proxy = Gio.DBusProxy.new_sync(
 
181
            self.dbus, Gio.DBusProxyFlags.DO_NOT_AUTO_START, None, UP,
 
182
            UP_DISPLAY_OBJECT_PATH, 'org.freedesktop.DBus.Properties', None)
 
183
        return proxy.Get('(ss)', UP, name)
 
184
 
169
185
    def get_dbus_dev_property(self, device, name):
170
186
        '''Get property value from an upower device D-Bus path.'''
171
187
 
187
203
 
188
204
        # without any devices we should assume AC
189
205
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
190
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
206
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
191
207
 
192
208
    def test_battery_ac(self):
193
209
        '''battery properties with and without AC'''
195
211
        # without any devices we should assume AC
196
212
        self.start_daemon()
197
213
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
198
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
214
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
199
215
        self.stop_daemon()
200
216
 
201
217
        # online AC
208
224
        ac_up = devs[0]
209
225
        self.assertTrue('line_power_AC' in ac_up)
210
226
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
211
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
227
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
212
228
        self.assertEqual(self.get_dbus_dev_property(ac_up, 'PowerSupply'), True)
213
229
        self.assertEqual(self.get_dbus_dev_property(ac_up, 'Type'), 1)
214
230
        self.assertEqual(self.get_dbus_dev_property(ac_up, 'Online'), True)
222
238
        self.assertEqual(len(devs), 1)
223
239
        # we don't have any known online power device now, but still no battery
224
240
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
225
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
241
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
226
242
        self.assertEqual(self.get_dbus_dev_property(ac_up, 'Online'), False)
227
243
        self.stop_daemon()
228
244
 
245
261
            bat0_up = devs[0]
246
262
        # we don't have any known online power device now, but still no battery
247
263
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
248
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
264
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
249
265
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'IsPresent'), True)
250
266
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
251
267
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Percentage'), 80.0)
260
276
        self.testbed.set_attribute(bat0, 'energy_now', '1500000')
261
277
        self.start_daemon()
262
278
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
263
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), True)
 
279
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_CRITICAL)
264
280
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'IsPresent'), True)
265
281
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
266
282
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Percentage'), 2.5)
275
291
        self.assertEqual(len(devs), 2)
276
292
        # we don't have any known online power device now, but still no battery
277
293
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
278
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
294
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
279
295
        self.assertEqual(self.get_dbus_dev_property(ac_up, 'Online'), True)
280
296
        self.stop_daemon()
281
297
 
308
324
        # as we have one which is well-charged, the summary state is "not low
309
325
        # battery"
310
326
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
311
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
327
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
312
328
        self.stop_daemon()
313
329
 
314
330
        # now set both to low
315
331
        self.testbed.set_attribute(bat0, 'energy_now', '1500000')
316
332
        self.start_daemon()
317
333
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
318
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), True)
 
334
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_CRITICAL)
319
335
        self.stop_daemon()
320
336
 
321
337
    def test_unknown_battery_status(self):
334
350
        # arbitrary, so don't test it. The only thing we know for sure is that
335
351
        # we aren't on low battery
336
352
        self.start_daemon()
337
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
353
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
338
354
        self.stop_daemon()
339
355
 
340
356
        # However, if we have an AC, we can infer
342
358
                                     ['type', 'Mains', 'online', '0'], [])
343
359
        self.start_daemon()
344
360
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
345
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
361
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
346
362
        self.stop_daemon()
347
363
 
348
364
        self.testbed.set_attribute(ac, 'online', '1')
349
365
        self.start_daemon()
350
366
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
351
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
367
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
352
368
        self.stop_daemon()
353
369
 
354
370
    def test_battery_charge(self):
372
388
        bat0_up = devs[0]
373
389
 
374
390
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
375
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
391
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
376
392
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'IsPresent'), True)
377
393
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
378
394
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Percentage'), 75.0)
401
417
        bat0_up = devs[0]
402
418
 
403
419
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
404
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
420
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
405
421
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'IsPresent'), True)
406
422
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
407
423
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Energy'), 50.4)
439
455
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Type'), 2)
440
456
 
441
457
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
442
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
458
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
443
459
        self.stop_daemon()
444
460
 
445
461
    def test_battery_overfull(self):
497
513
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Percentage'), 2.5)
498
514
        self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Energy'), 1.5)
499
515
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
500
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), True)
 
516
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_CRITICAL)
501
517
        self.stop_daemon()
502
518
 
503
519
    def test_ups_ac(self):
516
532
        self.assertEqual(len(devs), 1)
517
533
        ups0_up = devs[0]
518
534
 
 
535
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'Vendor'), 'APC')
519
536
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'IsPresent'), True)
520
537
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'Percentage'), 70.0)
521
538
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'State'), UP_DEVICE_STATE_CHARGING)
523
540
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'Type'), 3)
524
541
 
525
542
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
526
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
543
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
527
544
        self.stop_daemon()
528
545
 
529
546
        # now switch to discharging UPS
538
555
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'Percentage'), 70.0)
539
556
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
540
557
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
541
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
558
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_DISCHARGING)
542
559
        self.stop_daemon()
543
560
 
544
561
        # low UPS charge
547
564
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'Percentage'), 2.0)
548
565
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
549
566
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
550
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), True)
 
567
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_ACTION)
551
568
        self.stop_daemon()
552
569
 
553
570
        # now add an offline AC, should still be on battery
560
577
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'Percentage'), 2.0)
561
578
        self.assertEqual(self.get_dbus_dev_property(ups0_up, 'State'), UP_DEVICE_STATE_DISCHARGING)
562
579
        self.assertEqual(self.get_dbus_property('OnBattery'), True)
563
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), True)
 
580
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_ACTION)
564
581
        self.stop_daemon()
565
582
 
566
583
        # now plug in the AC, should switch to OnBattery=False
567
584
        self.testbed.set_attribute(ac, 'online', '1')
568
585
        self.start_daemon()
569
586
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
570
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
587
        # FIXME this is completely wrong
 
588
        # The AC status doesn't change anything, the AC is what powers the UPS
 
589
        # and the UPS powers the desktop
 
590
        #
 
591
        # A plugged in UPS is always the one supplying the computer
 
592
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_ACTION)
571
593
        self.stop_daemon()
572
594
 
573
595
    def test_vendor_strings(self):
646
668
        # 5 == mouse
647
669
        self.assertEqual(self.get_dbus_dev_property(mousebat0_up, 'Type'), 5)
648
670
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
649
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
671
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
650
672
        self.stop_daemon()
651
673
 
652
674
    def test_bluetooth_mouse_reconnect(self):
741
763
        # 6 == keyboard
742
764
        self.assertEqual(self.get_dbus_dev_property(kbdbat0_up, 'Type'), 6)
743
765
        self.assertEqual(self.get_dbus_property('OnBattery'), False)
744
 
        self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
 
766
        self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
745
767
        self.stop_daemon()
746
768
 
747
769
    #
753
775
 
754
776
        self.start_daemon()
755
777
        client = UPowerGlib.Client.new()
756
 
        self.assertTrue(client.get_properties_sync(None))
757
778
        self.assertRegex(client.get_daemon_version(), '^[0-9.]+$')
758
 
        self.assertIn(client.get_can_hibernate(), [False, True])
759
 
        self.assertIn(client.get_can_suspend(), [False, True])
760
779
        self.assertIn(client.get_is_docked(), [False, True])
761
780
        self.assertIn(client.get_lid_is_present(), [False, True])
762
781
        self.assertIn(client.get_lid_is_closed(), [False, True])
763
782
        self.assertEqual(client.get_on_battery(), False)
764
 
        self.assertEqual(client.get_on_low_battery(), False)
 
783
        # FIXME: When we have a fake logind
 
784
        # self.assertEqual(client.get_critical_action(), 'PowerOff')
765
785
 
766
786
    #
767
787
    # Helper methods