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