~ttx/swift/release-1.4.2

« back to all changes in this revision

Viewing changes to test/unit/stats/test_access_processor.py

  • Committer: Tarmac
  • Author(s): gholt, FUJITA Tomonori, John Dickinson, David Goetz, John Dickinson, Joe Arnold, Scott Simpson, joe at cloudscaling, Thierry Carrez
  • Date: 2011-07-26 09:08:37 UTC
  • mfrom: (305.1.1 milestone-proposed)
  • Revision ID: tarmac-20110726090837-fwlvja8dnk7nkppw
Merge 1.4.2 development from trunk (rev331)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (c) 2010-2011 OpenStack, LLC.
2
 
#
3
 
# Licensed under the Apache License, Version 2.0 (the "License");
4
 
# you may not use this file except in compliance with the License.
5
 
# You may obtain a copy of the License at
6
 
#
7
 
#    http://www.apache.org/licenses/LICENSE-2.0
8
 
#
9
 
# Unless required by applicable law or agreed to in writing, software
10
 
# distributed under the License is distributed on an "AS IS" BASIS,
11
 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12
 
# implied.
13
 
# See the License for the specific language governing permissions and
14
 
# limitations under the License.
15
 
 
16
 
# TODO: Tests
17
 
 
18
 
import unittest
19
 
from swift.stats import access_processor
20
 
 
21
 
 
22
 
class TestAccessProcessor(unittest.TestCase):
23
 
 
24
 
    def test_log_line_parser_query_args(self):
25
 
        p = access_processor.AccessLogProcessor({})
26
 
        log_line = [str(x) for x in range(18)]
27
 
        log_line[1] = 'proxy-server'
28
 
        log_line[4] = '1/Jan/3/4/5/6'
29
 
        query = 'foo'
30
 
        for param in access_processor.LISTING_PARAMS:
31
 
            query += '&%s=blah' % param
32
 
        log_line[6] = '/v1/a/c/o?%s' % query
33
 
        log_line = 'x'*16 + ' '.join(log_line)
34
 
        res = p.log_line_parser(log_line)
35
 
        expected = {'code': 8, 'processing_time': '17', 'auth_token': '11',
36
 
                    'month': '01', 'second': '6', 'year': '3', 'tz': '+0000',
37
 
                    'http_version': '7', 'object_name': 'o', 'etag': '14',
38
 
                    'method': '5', 'trans_id': '15', 'client_ip': '2',
39
 
                    'bytes_out': 13, 'container_name': 'c', 'day': '1',
40
 
                    'minute': '5', 'account': 'a', 'hour': '4',
41
 
                    'referrer': '9', 'request': '/v1/a/c/o',
42
 
                    'user_agent': '10', 'bytes_in': 12, 'lb_ip': '3'}
43
 
        for param in access_processor.LISTING_PARAMS:
44
 
            expected[param] = 1
45
 
        expected['query'] = query
46
 
        self.assertEquals(res, expected)
47
 
        
48
 
    def test_log_line_parser_field_count(self):
49
 
        p = access_processor.AccessLogProcessor({})
50
 
        # too few fields
51
 
        log_line = [str(x) for x in range(17)]
52
 
        log_line[1] = 'proxy-server'
53
 
        log_line[4] = '1/Jan/3/4/5/6'
54
 
        log_line[6] = '/v1/a/c/o'
55
 
        log_line = 'x'*16 + ' '.join(log_line)
56
 
        res = p.log_line_parser(log_line)
57
 
        expected = {}
58
 
        self.assertEquals(res, expected)
59
 
        # right amount of fields
60
 
        log_line = [str(x) for x in range(18)]
61
 
        log_line[1] = 'proxy-server'
62
 
        log_line[4] = '1/Jan/3/4/5/6'
63
 
        log_line[6] = '/v1/a/c/o'
64
 
        log_line = 'x'*16 + ' '.join(log_line)
65
 
        res = p.log_line_parser(log_line)
66
 
        expected = {'code': 8, 'processing_time': '17', 'auth_token': '11',
67
 
                    'month': '01', 'second': '6', 'year': '3', 'tz': '+0000',
68
 
                    'http_version': '7', 'object_name': 'o', 'etag': '14',
69
 
                    'method': '5', 'trans_id': '15', 'client_ip': '2',
70
 
                    'bytes_out': 13, 'container_name': 'c', 'day': '1',
71
 
                    'minute': '5', 'account': 'a', 'hour': '4',
72
 
                    'referrer': '9', 'request': '/v1/a/c/o',
73
 
                    'user_agent': '10', 'bytes_in': 12, 'lb_ip': '3'}
74
 
        self.assertEquals(res, expected)
75
 
        # too many fields
76
 
        log_line = [str(x) for x in range(19)]
77
 
        log_line[1] = 'proxy-server'
78
 
        log_line[4] = '1/Jan/3/4/5/6'
79
 
        log_line[6] = '/v1/a/c/o'
80
 
        log_line = 'x'*16 + ' '.join(log_line)
81
 
        res = p.log_line_parser(log_line)
82
 
        expected = {'code': 8, 'processing_time': '17', 'auth_token': '11',
83
 
                    'month': '01', 'second': '6', 'year': '3', 'tz': '+0000',
84
 
                    'http_version': '7', 'object_name': 'o', 'etag': '14',
85
 
                    'method': '5', 'trans_id': '15', 'client_ip': '2',
86
 
                    'bytes_out': 13, 'container_name': 'c', 'day': '1',
87
 
                    'minute': '5', 'account': 'a', 'hour': '4',
88
 
                    'referrer': '9', 'request': '/v1/a/c/o',
89
 
                    'user_agent': '10', 'bytes_in': 12, 'lb_ip': '3'}
90
 
        self.assertEquals(res, expected)
91
 
 
92
 
 
93
 
if __name__ == '__main__':
94
 
    unittest.main()