1 #! /usr/bin/python 2 3 # Copyright 2014 The Chromium OS Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 """Unit tests for devices.py.""" 8 9 import mox 10 import unittest 11 12 import common 13 from fake_device_server import commands 14 from fake_device_server import devices 15 from fake_device_server import fail_control 16 from fake_device_server import oauth 17 from fake_device_server import resource_delegate 18 from fake_device_server import server_errors 19 20 21 class DevicesTest(mox.MoxTestBase): 22 """Tests for the Devices class.""" 23 24 def setUp(self): 25 """Sets up mox and a ticket / registration objects.""" 26 mox.MoxTestBase.setUp(self) 27 self.devices_resource = {} 28 self.fail_control = fail_control.FailControl() 29 self.oauth = oauth.OAuth(self.fail_control) 30 self.commands = commands.Commands(self.oauth, self.fail_control) 31 self.devices = devices.Devices( 32 resource_delegate.ResourceDelegate(self.devices_resource), 33 self.commands, 34 self.oauth, 35 self.fail_control) 36 37 38 def testCreateDevice(self): 39 """Tests that we can create a new device.""" 40 good_device_config = dict(userEmail='buffet (at] tasty.org', 41 name='buffet_device', 42 channel=dict(supportedType='xmpp')) 43 44 new_device = self.devices.create_device(None, good_device_config) 45 self.assertTrue('id' in new_device) 46 device_id = new_device['id'] 47 # New device should be registered with commands handler. 48 self.assertTrue(device_id in self.commands.device_commands) 49 50 bad_device_config = dict(name='buffet_device') 51 self.assertRaises(server_errors.HTTPError, 52 self.devices.create_device, None, bad_device_config) 53 54 55 def testGet(self): 56 """Tests that we can retrieve a device correctly.""" 57 self.devices_resource[(1234, None)] = dict(id=1234) 58 returned_json = self.devices.GET(1234) 59 self.assertEquals(returned_json, self.devices_resource[(1234, None)]) 60 61 # Non-existing device. 62 self.assertRaises(server_errors.HTTPError, 63 self.devices.GET, 1235) 64 65 66 def testListing(self): 67 """Tests that we can get a listing back correctly using the GET method. 68 """ 69 self.devices_resource[(1234, None)] = dict(id=1234) 70 self.devices_resource[(1235, None)] = dict(id=1235, boogity='taco') 71 72 returned_json = self.devices.GET() 73 self.assertEqual('clouddevices#devicesListResponse', 74 returned_json['kind']) 75 self.assertTrue('devices' in returned_json) 76 for device in self.devices_resource.values(): 77 self.assertIn(device, returned_json['devices']) 78 79 80 def testDeleteDevice(self): 81 """Tests that we correctly delete a device.""" 82 # Register device with commands handler first. 83 self.commands.new_device(12345) 84 self.devices_resource[(12345, None)] = dict(id=12345, nobody='care') 85 self.devices.DELETE(12345) 86 87 self.assertTrue(12345 not in self.devices_resource) 88 # Make sure the device is deleted from the command handler. 89 self.assertRaises(KeyError, self.commands.remove_device, 12345) 90 91 # Should error out if we try to delete something that doesn't exist. 92 self.assertRaises(server_errors.HTTPError, 93 self.devices.DELETE, 12500) 94 95 96 if __name__ == '__main__': 97 unittest.main() 98