registration_tickets_unittest.py revision c927d5825c831e0372a75b500a57cb545f06bcf7
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 registration_tickets.py."""
8
9import json
10import mox
11import unittest
12
13import common
14from cros_lib.fake_device_server import common_util
15from cros_lib.fake_device_server import registration_tickets
16from cros_lib.fake_device_server import resource_delegate
17from cros_lib.fake_device_server import server_errors
18
19
20class RegistrationTicketsTest(mox.MoxTestBase):
21    """Tests for the RegistrationTickets class."""
22
23    def setUp(self):
24        """Sets up mox and a ticket / registration objects."""
25        mox.MoxTestBase.setUp(self)
26        self.tickets = {}
27        self.registration = registration_tickets.RegistrationTickets(
28                resource_delegate.ResourceDelegate(self.tickets))
29
30
31    def testFinalize(self):
32        """Tests that the finalize workflow does the right thing."""
33        # Unclaimed ticket
34        self.tickets[(1234, None)] = dict(id=1234)
35        self.assertRaises(server_errors.HTTPError,
36                          self.registration.POST, 1234, 'finalize')
37
38        # Claimed ticket
39        expected_ticket = dict(id=1234, userEmail='buffet@tasty.org')
40        self.tickets[(1234, None)] = expected_ticket
41        returned_json = json.loads(self.registration.POST(1234, 'finalize'))
42
43        self.assertEquals(returned_json['id'], expected_ticket['id'])
44        self.assertEquals(returned_json['userEmail'],
45                          expected_ticket['userEmail'])
46        self.assertIn('robotAccountEmail', returned_json)
47        self.assertIn('robotAccountAuthorizationCode', returned_json)
48
49
50    def testClaim(self):
51        """Tests that we can claim a ticket."""
52        self.tickets[(1234, None)] = dict(id=1234)
53        self.mox.StubOutWithMock(common_util, 'grab_header_field')
54        self.mox.StubOutWithMock(common_util, 'parse_serialized_json')
55        update_ticket = dict(userEmail='me')
56        common_util.parse_serialized_json().AndReturn(update_ticket)
57        common_util.grab_header_field('Authorization').AndReturn(
58                'Bearer %s' % self.registration.TEST_ACCESS_TOKEN)
59
60        self.mox.ReplayAll()
61        returned_json = json.loads(self.registration.PATCH(1234))
62        self.assertIn('userEmail', returned_json)
63        # This should have changed to an actual user.
64        self.assertNotEquals(returned_json['userEmail'], 'me')
65        self.mox.VerifyAll()
66
67
68    def testInsert(self):
69        """Tests that we can create a new ticket."""
70        self.mox.StubOutWithMock(common_util, 'parse_serialized_json')
71        common_util.parse_serialized_json().AndReturn(None)
72
73        self.mox.ReplayAll()
74        returned_json = json.loads(self.registration.POST())
75        self.assertIn('id', returned_json)
76        self.mox.VerifyAll()
77
78
79    def testGet(self):
80        """Tests that we can retrieve a ticket correctly."""
81        self.tickets[(1234, None)] = dict(id=1234)
82        returned_json = json.loads(self.registration.GET(1234))
83        self.assertEquals(returned_json, self.tickets[(1234, None)])
84
85        # Non-existing ticket.
86        self.assertRaises(server_errors.HTTPError,
87                          self.registration.GET, 1235)
88
89
90    def testPatchTicket(self):
91        """Tests that we correctly patch a ticket."""
92        expected_ticket = dict(id=1234, blah='hi')
93        update_ticket = dict(blah='hi')
94        self.tickets[(1234, None)] = dict(id=1234)
95
96        self.mox.StubOutWithMock(common_util, 'parse_serialized_json')
97
98        common_util.parse_serialized_json().AndReturn(update_ticket)
99
100        self.mox.ReplayAll()
101        returned_json = json.loads(self.registration.PATCH(1234))
102        self.assertEquals(expected_ticket, returned_json)
103        self.mox.VerifyAll()
104
105
106    def testReplaceTicket(self):
107        """Tests that we correctly replace a ticket."""
108        update_ticket = dict(id=12345, blah='hi')
109        self.tickets[(12345, None)] = dict(id=12345)
110
111        self.mox.StubOutWithMock(common_util, 'parse_serialized_json')
112
113        common_util.parse_serialized_json().AndReturn(update_ticket)
114
115        self.mox.ReplayAll()
116        returned_json = json.loads(self.registration.PUT(12345))
117        self.assertEquals(update_ticket, returned_json)
118        self.mox.VerifyAll()
119
120        self.mox.ResetAll()
121
122        # Ticket id doesn't match.
123        update_ticket = dict(id=12346, blah='hi')
124        common_util.parse_serialized_json().AndReturn(update_ticket)
125
126        self.mox.ReplayAll()
127        self.assertRaises(server_errors.HTTPError,
128                          self.registration.PUT, 12345)
129        self.mox.VerifyAll()
130
131
132if __name__ == '__main__':
133    unittest.main()
134