| #!/usr/bin/env impala-python |
| # -*- coding: utf-8 -*- |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| import unittest |
| |
| from datetime import datetime, timedelta |
| from shell.cookie_util import (cookie_matches_path, get_cookie_expiry, |
| get_first_matching_cookie) |
| |
| |
| class TestCookieUtil(unittest.TestCase): |
| def test_cookie_matches_path(self): |
| assert cookie_matches_path({}, '/') |
| assert cookie_matches_path({}, '') |
| assert cookie_matches_path({}, 'cliservice') |
| assert cookie_matches_path({}, '/cliservice') |
| assert cookie_matches_path({}, '/cliservice/') |
| |
| assert cookie_matches_path({'path': ''}, '/') |
| assert cookie_matches_path({'path': '/'}, '') |
| assert cookie_matches_path({'path': '/'}, 'clisevice') |
| assert cookie_matches_path({'path': '/'}, '/clisevice') |
| |
| assert not cookie_matches_path({'path': '/cliservice'}, '') |
| assert not cookie_matches_path({'path': '/cliservice'}, '/') |
| assert cookie_matches_path({'path': '/cliservice'}, 'cliservice') |
| assert cookie_matches_path({'path': 'cliservice'}, '/cliservice') |
| assert cookie_matches_path({'path': '/cliservice/'}, '/cliservice/') |
| assert cookie_matches_path({'path': '/cliservice'}, 'cliservice/abc/def/ghi') |
| assert cookie_matches_path({'path': '/cliservice/'}, 'cliservice/?q=abcd') |
| |
| assert not cookie_matches_path({'path': '/a/b/c//'}, '/a') |
| assert not cookie_matches_path({'path': '/a/b/c//'}, '/a/b') |
| assert cookie_matches_path({'path': '/a/b/c//'}, 'a/b/c') |
| assert cookie_matches_path({'path': '/a/b/c//'}, '/a/b/c') |
| assert cookie_matches_path({'path': '/a/b/c//'}, 'a/b/c/d') |
| assert cookie_matches_path({'path': '/a/b/c//'}, '/a/b/c/d') |
| assert cookie_matches_path({'path': '/a/b/c//'}, '/a/b/c/d/e/f/g/h') |
| |
| def test_get_cookie_expiry(self): |
| assert get_cookie_expiry({}) is None |
| assert get_cookie_expiry({'max-age': ''}) is None |
| |
| hour = timedelta(hours=1) |
| sec = timedelta(seconds=1) |
| now = datetime.now() |
| assert now <= get_cookie_expiry({'max-age': '0'}) <= now + sec |
| now = datetime.now() |
| assert now - sec <= get_cookie_expiry({'max-age': '-1'}) <= now |
| |
| now = datetime.now() |
| assert now - hour <= get_cookie_expiry({'max-age': '-3600'}) <= now - hour + sec |
| now = datetime.now() |
| assert now + hour <= get_cookie_expiry({'max-age': '3600'}) <= now + hour + sec |
| |
| now = datetime.now() |
| days2k = timedelta(days=2000) |
| assert now - days2k <= \ |
| get_cookie_expiry({'max-age': '-172800000'}) <= \ |
| now - days2k + sec |
| now = datetime.now() |
| assert now + days2k <= \ |
| get_cookie_expiry({'max-age': '172800000'}) <= \ |
| now + days2k + sec |
| |
| def test_get_first_matching_cookie(self): |
| assert get_first_matching_cookie(['a', 'b'], '/path', {}) is None |
| |
| headers = {'Set-Cookie': '''c_cookie=c_value |
| b_cookie=b_value |
| a_cookie=a_value'''} |
| c = get_first_matching_cookie(['a_cookie', 'b_cookie'], '/path', headers) |
| assert c.key == 'a_cookie' and c.value == 'a_value' |
| c = get_first_matching_cookie(['b_cookie', 'a_cookie'], '/path', headers) |
| assert c.key == 'b_cookie' and c.value == 'b_value' |
| |
| headers = {'Set-Cookie': '''c_cookie=c_value;Path=/ |
| b_cookie=b_value;Path=/path |
| a_cookie=a_value;Path=/'''} |
| c = get_first_matching_cookie(['a_cookie', 'b_cookie'], '/path', headers) |
| assert c.key == 'a_cookie' and c.value == 'a_value' |
| c = get_first_matching_cookie(['b_cookie', 'a_cookie'], '/path', headers) |
| assert c.key == 'b_cookie' and c.value == 'b_value' |
| |
| headers = {'Set-Cookie': '''c_cookie=c_value;Path=/ |
| b_cookie=b_value;Path=/path |
| a_cookie=a_value;Path=/path/path2'''} |
| c = get_first_matching_cookie(['a_cookie', 'b_cookie'], '/path', headers) |
| assert c.key == 'b_cookie' and c.value == 'b_value' |
| c = get_first_matching_cookie(['b_cookie', 'a_cookie'], '/path', headers) |
| assert c.key == 'b_cookie' and c.value == 'b_value' |
| |
| headers = {'Set-Cookie': '''c_cookie=c_value;Path=/ |
| b_cookie=b_value;Path=/path |
| a_cookie=a_value;Path=/path'''} |
| c = get_first_matching_cookie(['a_cookie', 'b_cookie'], '/path/path1', headers) |
| assert c.key == 'a_cookie' and c.value == 'a_value' |
| c = get_first_matching_cookie(['b_cookie', 'a_cookie'], '/path/path1', headers) |
| assert c.key == 'b_cookie' and c.value == 'b_value' |
| |
| headers = {'Set-Cookie': '''c_cookie=c_value;Path=/ |
| b_cookie=b_value;Path=/path1 |
| a_cookie=a_value;Path=/path2'''} |
| c = get_first_matching_cookie(['a_cookie', 'b_cookie'], '/path', headers) |
| assert c is None |
| |
| headers = {'Set-Cookie': '''c_cookie=c_value;Path=/ |
| b_cookie=b_value;Path=/path1 |
| a_cookie=a_value;Path=/path2'''} |
| c = get_first_matching_cookie(['a_cookie', 'b_cookie', 'c_cookie'], '/path', |
| headers) |
| assert c.key == 'c_cookie' and c.value == 'c_value' |