• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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