1# pylint: disable-msg=C0111
2#!/usr/bin/python
3#
4# Copyright 2008 Google Inc. All Rights Reserved.
5
6"""Tests for label."""
7
8import unittest
9
10import common
11from autotest_lib.cli import cli_mock
12
13
14class label_list_unittest(cli_mock.cli_unittest):
15    values = [{u'id': 180,          # Valid label
16               u'platform': False,
17               u'name': u'label0',
18               u'invalid': False,
19               u'kernel_config': u'',
20               u'only_if_needed': False},
21              {u'id': 338,          # Valid label
22               u'platform': False,
23               u'name': u'label1',
24               u'invalid': False,
25               u'kernel_config': u'',
26               u'only_if_needed': False},
27              {u'id': 340,          # Invalid label
28               u'platform': False,
29               u'name': u'label2',
30               u'invalid': True,
31               u'kernel_config': u'',
32               u'only_if_needed': False},
33              {u'id': 350,          # Valid platform
34               u'platform': True,
35               u'name': u'plat0',
36               u'invalid': False,
37               u'kernel_config': u'',
38               u'only_if_needed': False},
39              {u'id': 420,          # Invalid platform
40               u'platform': True,
41               u'name': u'plat1',
42               u'invalid': True,
43               u'kernel_config': u'',
44               u'only_if_needed': False}]
45
46
47    def test_label_list_labels_only(self):
48        self.run_cmd(argv=['atest', 'label', 'list', '--ignore_site_file'],
49                     rpcs=[('get_labels', {}, True, self.values)],
50                     out_words_ok=['label0', 'label1', 'label2'],
51                     out_words_no=['plat0', 'plat1'])
52
53
54    def test_label_list_labels_only_valid(self):
55        self.run_cmd(argv=['atest', 'label', 'list', '-d',
56                           '--ignore_site_file'],
57                     rpcs=[('get_labels', {}, True, self.values)],
58                     out_words_ok=['label0', 'label1'],
59                     out_words_no=['label2', 'plat0', 'plat1'])
60
61
62    def test_label_list_labels_and_platforms(self):
63        self.run_cmd(argv=['atest', 'label', 'list', '--all',
64                           '--ignore_site_file'],
65                     rpcs=[('get_labels', {}, True, self.values)],
66                     out_words_ok=['label0', 'label1', 'label2',
67                                   'plat0', 'plat1'])
68
69
70    def test_label_list_platforms_only(self):
71        self.run_cmd(argv=['atest', 'label', 'list', '-t',
72                           '--ignore_site_file'],
73                     rpcs=[('get_labels', {}, True, self.values)],
74                     out_words_ok=['plat0', 'plat1'],
75                     out_words_no=['label0', 'label1', 'label2'])
76
77
78    def test_label_list_platforms_only_valid(self):
79        self.run_cmd(argv=['atest', 'label', 'list',
80                           '-t', '--valid-only', '--ignore_site_file'],
81                     rpcs=[('get_labels', {}, True, self.values)],
82                     out_words_ok=['plat0'],
83                     out_words_no=['label0', 'label1', 'label2',
84                                   'plat1'])
85
86
87class label_create_unittest(cli_mock.cli_unittest):
88    def test_execute_create_two_labels(self):
89        self.run_cmd(argv=['atest', 'label', 'create', 'label0', 'label1',
90                           '--ignore_site_file'],
91                     rpcs=[('add_label',
92                            {'name': 'label0', 'platform': False,
93                             'only_if_needed': False},
94                            True, 42),
95                           ('add_label',
96                            {'name': 'label1', 'platform': False,
97                             'only_if_needed': False},
98                            True, 43)],
99                     out_words_ok=['Created', 'label0', 'label1'])
100
101
102    def test_execute_create_two_labels_bad(self):
103        self.run_cmd(argv=['atest', 'label', 'create', 'label0', 'label1',
104                           '--ignore_site_file'],
105                     rpcs=[('add_label',
106                            {'name': 'label0', 'platform': False,
107                             'only_if_needed': False},
108                            True, 3),
109                           ('add_label',
110                            {'name': 'label1', 'platform': False,
111                             'only_if_needed': False},
112                            False,
113                            '''ValidationError: {'name':
114                            'This value must be unique (label0)'}''')],
115                     out_words_ok=['Created', 'label0'],
116                     out_words_no=['label1'],
117                     err_words_ok=['label1', 'ValidationError'])
118
119
120
121class label_delete_unittest(cli_mock.cli_unittest):
122    def test_execute_delete_labels(self):
123        self.run_cmd(argv=['atest', 'label', 'delete', 'label0', 'label1',
124                           '--ignore_site_file', '--no-confirmation'],
125                     rpcs=[('delete_label', {'id': 'label0'}, True, None),
126                           ('delete_label', {'id': 'label1'}, True, None)],
127                     out_words_ok=['Deleted', 'label0', 'label1'])
128
129
130class label_add_unittest(cli_mock.cli_unittest):
131    def test_execute_add_labels_to_hosts(self):
132        self.run_cmd(argv=['atest', 'label', 'add', 'label0',
133                           '--machine', 'host0,host1', '--ignore_site_file'],
134                     rpcs=[('label_add_hosts', {'id': 'label0',
135                                                'hosts': ['host1', 'host0']},
136                            True, None)],
137                     out_words_ok=['Added', 'label0', 'host0', 'host1'])
138
139
140class label_remove_unittest(cli_mock.cli_unittest):
141    def test_execute_remove_labels_from_hosts(self):
142        self.run_cmd(argv=['atest', 'label', 'remove', 'label0',
143                           '--machine', 'host0,host1', '--ignore_site_file'],
144                     rpcs=[('label_remove_hosts', {'id': 'label0',
145                                               'hosts': ['host1', 'host0']},
146                            True, None)],
147                     out_words_ok=['Removed', 'label0', 'host0', 'host1'])
148
149
150if __name__ == '__main__':
151    unittest.main()
152