1#!/usr/bin/python
2#
3# Copyright 2008 Google Inc. All Rights Reserved.
4
5"""Test for user."""
6
7import unittest, os, sys
8
9import common
10from autotest_lib.cli import cli_mock, user
11
12
13class user_list_unittest(cli_mock.cli_unittest):
14    def test_parse_user_not_required(self):
15        ul = user.user_list()
16        sys.argv = ['atest']
17        (options, leftover) = ul.parse()
18        self.assertEqual([], ul.users)
19        self.assertEqual([], leftover)
20
21
22    def test_parse_with_users(self):
23        ul = user.user_list()
24        ufile = cli_mock.create_file('user0\nuser3\nuser4\n')
25        sys.argv = ['atest', 'user1', '--ulist', ufile.name, 'user3']
26        (options, leftover) = ul.parse()
27        self.assertEqualNoOrder(['user0', 'user1','user3', 'user4'],
28                                ul.users)
29        self.assertEqual(leftover, [])
30        ufile.clean()
31
32
33    def test_parse_with_acl(self):
34        ul = user.user_list()
35        sys.argv = ['atest', '--acl', 'acl0']
36        (options, leftover) = ul.parse()
37        self.assertEqual('acl0', ul.acl)
38        self.assertEqual(leftover, [])
39
40
41    def test_parse_with_access_level(self):
42        ul = user.user_list()
43        sys.argv = ['atest', '--access_level', '3']
44        (options, leftover) = ul.parse()
45        self.assertEqual('3', ul.access_level)
46        self.assertEqual(leftover, [])
47
48
49    def test_parse_with_all(self):
50        ul = user.user_list()
51        ufile = cli_mock.create_file('user0\nuser3\nuser4\n')
52        sys.argv = ['atest', 'user1', '--ulist', ufile.name, 'user3',
53                    '-l', '4', '-a', 'acl0']
54        (options, leftover) = ul.parse()
55        self.assertEqualNoOrder(['user0', 'user1','user3', 'user4'],
56                                ul.users)
57        self.assertEqual('acl0', ul.acl)
58        self.assertEqual('4', ul.access_level)
59        self.assertEqual(leftover, [])
60        ufile.clean()
61
62
63    def test_execute_list_all(self):
64        self.run_cmd(argv=['atest', 'user', 'list'],
65                     rpcs=[('get_users', {},
66                            True,
67                            [{u'access_level': 0,
68                              u'login': u'user0',
69                              u'id': 41},
70                             {u'access_level': 0,
71                              u'login': u'user5',
72                              u'id': 42},
73                             {u'access_level': 2,
74                              u'login': u'user0',
75                              u'id': 3}])],
76                     out_words_ok=['user0', 'user5'],
77                     out_words_no=['1', '3', '41', '42'])
78
79
80    def test_execute_list_all_with_user(self):
81        self.run_cmd(argv=['atest', 'user', 'list', 'user0'],
82                     rpcs=[('get_users', {'login__in': ['user0']},
83                            True,
84                            [{u'access_level': 2,
85                              u'login': u'user0',
86                              u'id': 3}])],
87                     out_words_ok=['user0'],
88                     out_words_no=['2', '3'])
89
90
91    def test_execute_list_all_with_acl(self):
92        self.run_cmd(argv=['atest', 'user', 'list', '--acl', 'acl0'],
93                     rpcs=[('get_users', {'aclgroup__name__in': ['acl0']},
94                            True,
95                            [{u'access_level': 2,
96                              u'login': u'user0',
97                              u'id': 3}])],
98                     out_words_ok=['user0'],
99                     out_words_no=['2', '3'])
100
101
102    def test_execute_list_all_with_access_level(self):
103        self.run_cmd(argv=['atest', 'user', 'list', '--access_level', '2'],
104                     rpcs=[('get_users', {'access_level__in': ['2']},
105                            True,
106                            [{u'access_level': 2,
107                              u'login': u'user0',
108                              u'id': 3}])],
109                     out_words_ok=['user0'],
110                     out_words_no=['2', '3'])
111
112
113    def test_execute_list_all_verbose(self):
114        self.run_cmd(argv=['atest', 'user', 'list', '--verbose'],
115                     rpcs=[('get_users', {},
116                            True,
117                            [{u'access_level': 0,
118                              u'login': u'user0',
119                              u'id': 41},
120                             {u'access_level': 0,
121                              u'login': u'user5',
122                              u'id': 42},
123                             {u'access_level': 5,
124                              u'login': u'user0',
125                              u'id': 3}])],
126                     out_words_ok=['user0', 'user5', '41', '42', '0', '5'])
127
128
129    def test_execute_list_all_with_user_verbose(self):
130        ufile = cli_mock.create_file('user0 user1\n')
131        self.run_cmd(argv=['atest', 'user', 'list', '--ulist', ufile.name,
132                           '-v'],
133                     rpcs=[('get_users', {'login__in': ['user0', 'user1']},
134                            True,
135                            [{u'access_level': 2,
136                              u'login': u'user0',
137                              u'id': 3},
138                             {u'access_level': 5,
139                              u'login': u'user1',
140                              u'id': 4}])],
141                     out_words_ok=['user0', 'user1', '3', '4', '5'])
142        ufile.clean()
143
144
145    def test_execute_list_all_with_acl_verbose(self):
146        self.run_cmd(argv=['atest', 'user', 'list', '--acl', 'acl0', '-v'],
147                     rpcs=[('get_users', {'aclgroup__name__in': ['acl0']},
148                            True,
149                            [{u'access_level': 2,
150                              u'login': u'user0',
151                              u'id': 3}])],
152                     out_words_ok=['user0', '3', '2'])
153
154
155    def test_execute_list_all_with_access_level_verbose(self):
156        self.run_cmd(argv=['atest', 'user', 'list',
157                           '--access_level', '2', '-v'],
158                     rpcs=[('get_users', {'access_level__in': ['2']},
159                            True,
160                            [{u'access_level': 2,
161                              u'login': u'user0',
162                              u'id': 3}])],
163                     out_words_ok=['user0', '2', '3'])
164
165
166if __name__ == '__main__':
167    unittest.main()
168