1
# Copyright (c) 2010-2011 OpenStack, LLC.
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
7
# http://www.apache.org/licenses/LICENSE-2.0
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
13
# See the License for the specific language governing permissions and
14
# limitations under the License.
19
from swift.stats import access_processor
22
class TestAccessProcessor(unittest.TestCase):
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'
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:
45
expected['query'] = query
46
self.assertEquals(res, expected)
48
def test_log_line_parser_field_count(self):
49
p = access_processor.AccessLogProcessor({})
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)
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)
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)
93
if __name__ == '__main__':