1d56e8d2d80f3f877b97da601ba90ca5233743c2clmr#!/usr/bin/python 23d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 33d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showardimport unittest 43d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showardimport common 53d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showardfrom autotest_lib.frontend import setup_django_environment 63d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showardfrom autotest_lib.frontend import setup_test_environment 7250d84d0a9716ece8ec4eb50b3702a167cda038dshowardfrom autotest_lib.frontend.tko import csv_encoder 83d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 93d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showardclass CsvEncodingTest(unittest.TestCase): 1037059dfb50063124bce014d3217e3610499d917fshoward def _make_request(self, method, columns=None): 1137059dfb50063124bce014d3217e3610499d917fshoward request = dict(method=method) 1237059dfb50063124bce014d3217e3610499d917fshoward if columns: 1337059dfb50063124bce014d3217e3610499d917fshoward request['columns'] = columns 1437059dfb50063124bce014d3217e3610499d917fshoward return request 153d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 163d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 173d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard def _make_group(self, header_indices, pass_count, complete_count, 183d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard incomplete_count=0): 193d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard return dict(header_indices=header_indices, pass_count=pass_count, 203d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard complete_count=complete_count, 213d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard incomplete_count=incomplete_count) 223d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 233d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 2437059dfb50063124bce014d3217e3610499d917fshoward def _encode_and_check_result(self, request, result, *expected_csv_rows): 253d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard encoder = csv_encoder.encoder(request, result) 263d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard response = encoder.encode() 273d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard csv_result = response.content 2837059dfb50063124bce014d3217e3610499d917fshoward expected_csv = '\r\n'.join(expected_csv_rows) + '\r\n' 293d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard self.assertEquals(csv_result, expected_csv) 303d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 313d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 323d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard def test_spreadsheet_encoder(self): 333d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard request = self._make_request('get_status_counts') 343d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard response = {'header_values' : 353d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard [[('row1',), ('row2',), ('comma,header',)], 363d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard [('col1', 'sub1'), ('col1', 'sub2'), 373d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard ('col2', 'sub1')]], 383d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 'groups' : [self._make_group((0, 0), 1, 2), 393d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard self._make_group((1, 2), 3, 4, 5)]} 403d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 413d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard self._encode_and_check_result(request, response, 4237059dfb50063124bce014d3217e3610499d917fshoward ',col1/sub1,col1/sub2,col2/sub1', 4337059dfb50063124bce014d3217e3610499d917fshoward 'row1,1 / 2,,', 4437059dfb50063124bce014d3217e3610499d917fshoward 'row2,,,3 / 4 (5 incomplete)', 4537059dfb50063124bce014d3217e3610499d917fshoward '"comma,header",,,') 4637059dfb50063124bce014d3217e3610499d917fshoward 4737059dfb50063124bce014d3217e3610499d917fshoward 4837059dfb50063124bce014d3217e3610499d917fshoward def test_table_encoder(self): 4937059dfb50063124bce014d3217e3610499d917fshoward request = self._make_request('get_test_views', [['col1', 'Column 1'], 5037059dfb50063124bce014d3217e3610499d917fshoward ['col2', 'Column 2']]) 5137059dfb50063124bce014d3217e3610499d917fshoward response = [{'col1' : 'foo', 'col2' : 'bar'}, 5237059dfb50063124bce014d3217e3610499d917fshoward {'col1' : 'baz', 'col2' : 'asdf'}] 5337059dfb50063124bce014d3217e3610499d917fshoward self._encode_and_check_result(request, response, 5437059dfb50063124bce014d3217e3610499d917fshoward 'Column 1,Column 2', 5537059dfb50063124bce014d3217e3610499d917fshoward 'foo,bar', 5637059dfb50063124bce014d3217e3610499d917fshoward 'baz,asdf') 5737059dfb50063124bce014d3217e3610499d917fshoward 5837059dfb50063124bce014d3217e3610499d917fshoward 5937059dfb50063124bce014d3217e3610499d917fshoward def test_grouped_table_encoder(self): 6037059dfb50063124bce014d3217e3610499d917fshoward request = self._make_request('get_group_counts', 6137059dfb50063124bce014d3217e3610499d917fshoward [['col1', 'Column 1'], 6237059dfb50063124bce014d3217e3610499d917fshoward ['group_count', 'Count in group']]) 6337059dfb50063124bce014d3217e3610499d917fshoward response = {'header_values' : 'unused', 6437059dfb50063124bce014d3217e3610499d917fshoward 'groups' : [{'col1' : 'foo', 'group_count' : 1}, 6537059dfb50063124bce014d3217e3610499d917fshoward {'col1' : 'baz', 'group_count' : 3}]} 6637059dfb50063124bce014d3217e3610499d917fshoward self._encode_and_check_result(request, response, 6737059dfb50063124bce014d3217e3610499d917fshoward 'Column 1,Count in group', 6837059dfb50063124bce014d3217e3610499d917fshoward 'foo,1', 6937059dfb50063124bce014d3217e3610499d917fshoward 'baz,3') 7037059dfb50063124bce014d3217e3610499d917fshoward 7137059dfb50063124bce014d3217e3610499d917fshoward 7237059dfb50063124bce014d3217e3610499d917fshoward def _status_count_dict(self, col1_value, pass_count, complete_count, 7337059dfb50063124bce014d3217e3610499d917fshoward incomplete_count): 7437059dfb50063124bce014d3217e3610499d917fshoward return dict(col1=col1_value, pass_count=pass_count, 7537059dfb50063124bce014d3217e3610499d917fshoward complete_count=complete_count, 7637059dfb50063124bce014d3217e3610499d917fshoward incomplete_count=incomplete_count) 7737059dfb50063124bce014d3217e3610499d917fshoward 7837059dfb50063124bce014d3217e3610499d917fshoward 7937059dfb50063124bce014d3217e3610499d917fshoward def test_status_count_table_encoder(self): 8037059dfb50063124bce014d3217e3610499d917fshoward request = self._make_request('get_status_counts', 8137059dfb50063124bce014d3217e3610499d917fshoward [['col1', 'Column 1'], 8237059dfb50063124bce014d3217e3610499d917fshoward ['_unused_', 'Test pass rate']]) 8337059dfb50063124bce014d3217e3610499d917fshoward response = {'header_values' : 'unused', 8437059dfb50063124bce014d3217e3610499d917fshoward 'groups' : [self._status_count_dict('foo', 1, 2, 0), 8537059dfb50063124bce014d3217e3610499d917fshoward self._status_count_dict('baz', 4, 5, 6)]} 8637059dfb50063124bce014d3217e3610499d917fshoward self._encode_and_check_result(request, response, 8737059dfb50063124bce014d3217e3610499d917fshoward 'Column 1,Test pass rate', 8837059dfb50063124bce014d3217e3610499d917fshoward 'foo,1 / 2', 8937059dfb50063124bce014d3217e3610499d917fshoward 'baz,4 / 5 (6 incomplete)') 903d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 913d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 92194a59d6976a5dbd5b464fb2b14ceb089f91c050showard def test_extra_info_spreadsheet_encoder(self): 93194a59d6976a5dbd5b464fb2b14ceb089f91c050showard request = self._make_request('get_latest_tests') 94194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 95194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 96194a59d6976a5dbd5b464fb2b14ceb089f91c050showard group1 = self._make_group((0, 0), 1, 1) 97194a59d6976a5dbd5b464fb2b14ceb089f91c050showard group2 = self._make_group((1, 0), 1, 1) 98194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 99194a59d6976a5dbd5b464fb2b14ceb089f91c050showard group1['extra_info'] = ['info1', 'info2'] 100194a59d6976a5dbd5b464fb2b14ceb089f91c050showard group2['extra_info'] = ['', 'info3'] 101194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 102194a59d6976a5dbd5b464fb2b14ceb089f91c050showard response = {'header_values' : 103194a59d6976a5dbd5b464fb2b14ceb089f91c050showard [[('row1',), ('row2',)], 104194a59d6976a5dbd5b464fb2b14ceb089f91c050showard [('col1',), ('col2',)]], 105194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 'groups' : [group1, group2]} 106194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 107194a59d6976a5dbd5b464fb2b14ceb089f91c050showard self._encode_and_check_result(request, response, 108194a59d6976a5dbd5b464fb2b14ceb089f91c050showard ',col1,col2', 109194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 'row1,"1 / 1\ninfo1\ninfo2",', 110194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 'row2,"1 / 1\n\ninfo3",') 111194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 112194a59d6976a5dbd5b464fb2b14ceb089f91c050showard 1133d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard def test_unhandled_method(self): 1143d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard request = self._make_request('foo') 1153d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard self._encode_and_check_result(request, None, 1163d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 'Unhandled method foo (this indicates a ' 11737059dfb50063124bce014d3217e3610499d917fshoward 'bug)') 1183d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 1193d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard 1203d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showardif __name__ == '__main__': 1213d6ae118f69717e68bc15b9aed7b6a6c7dd9bab0showard unittest.main() 122