Ejemplo n.º 1
0
 def test_init(self):
     """正常に初期化できること"""
     param = self.get_sample_param()
     service = baas.Service(param)
     assert service.param == param
     assert service.param["baseUrl"] == "http://localhost/api"
     assert service.session_token is None
Ejemplo n.º 2
0
    def test_execute_rest(self, mock):
        """正常に REST API を呼び出せること"""
        service = baas.Service(self.get_sample_param())

        service.session_token = "token1"

        query = {"a": 1}

        mock.return_value = {}
        ret = service.execute_rest("GET", "a/b/c", query=query)
        assert ret == {}

        method = mock.call_args[0][0]
        kwargs = mock.call_args[1]
        assert method == "GET"
        assert kwargs["url"] == "http://localhost/api/1/tenant1/a/b/c"
        assert kwargs["params"] == query

        headers = kwargs["headers"]
        assert headers["X-Application-Id"] == "app1"
        assert headers["X-Application-Key"] == "key1"
        assert headers["X-Session-Token"] == "token1"

        # timeout は含まれない
        assert "timeout" not in kwargs
Ejemplo n.º 3
0
    def test_verify_session_token(self):
        """正常にセッショントークンが検証できること"""
        service = baas.Service(self.get_sample_param())

        service.session_token = "testToken"
        service.session_token_expire = time.time() + 1

        service.verify_session_token()
Ejemplo n.º 4
0
 def get_service(self):
     param = {
         "baseUrl": "http://localhost/api",
         "tenantId": "tenant1",
         "appId": "app1",
         "appKey": "key1"
     }
     return baas.Service(param)
Ejemplo n.º 5
0
    def _test_load_session_token_file_invalid(self, mock_path, session_token):
        mock_path.exists.return_value = True

        service = baas.Service(self.get_sample_param())

        with patch(builtin + ".open", mock_open(read_data=session_token)):
            with pytest.raises(Exception):
                service.load_session_token()
Ejemplo n.º 6
0
    def test_verify_session_token_expired(self):
        """正常にセッショントークンが期限切れの場合は例外が raise されること"""
        service = baas.Service(self.get_sample_param())

        service.session_token = "testToken"
        service.session_token_expire = time.time()

        with pytest.raises(Exception):
            service.verify_session_token()
Ejemplo n.º 7
0
    def test_save_session_token_without_token(self, mock_path):
        """セッショントークンがない場合はエラーとなること"""
        mock_path.exists.return_value = True

        service = baas.Service(self.get_sample_param())

        service.session_token = None
        service.session_token_expire = None

        with pytest.raises(Exception):
            service.save_session_token()
Ejemplo n.º 8
0
    def test_load_session_token_file_not_exists(self, mock_path):
        """セッショントークンファイルがない場合はセッショントークンをクリアすること"""
        mock_path.exists.return_value = False

        service = baas.Service(self.get_sample_param())
        service.session_token = "testToken"
        service.session_token_expire = 1534847297

        service.load_session_token()

        assert service.session_token is None
        assert service.session_token_expire is None
Ejemplo n.º 9
0
    def test_execute_rest_with_headers(self, mock):
        """ヘッダ付きで正常に REST API を呼び出せること"""
        service = baas.Service(self.get_sample_param())

        mock.return_value = {}
        ret = service.execute_rest("GET",
                                   "a/b/c",
                                   headers={"X-header1": "xxx"})
        assert ret == {}

        headers = mock.call_args[1]["headers"]
        assert headers["X-header1"] == "xxx"
Ejemplo n.º 10
0
    def test_execute_rest_jp(self, mock):
        """正常に日本語ありの URL で REST API を呼び出せること"""
        param = self.get_sample_param()
        param["baseUrl"] = u"http://ホスト名/api"
        service = baas.Service(param)

        mock.return_value = {}
        ret = service.execute_rest("GET", "a/b/c")
        assert ret == {}

        kwargs = mock.call_args[1]
        assert kwargs["url"] == "http://ホスト名/api/1/tenant1/a/b/c"
Ejemplo n.º 11
0
    def test_execute_rest_with_timeout(self, mock):
        """正常にタイムアウト付きで REST API を呼び出せること"""
        baas.Service.set_default_timeout(10)

        service = baas.Service(self.get_sample_param())

        mock.return_value = {}
        ret = service.execute_rest("GET", "a/b/c")
        assert ret == {}

        timeout = mock.call_args[1]["timeout"]
        assert timeout is 10
Ejemplo n.º 12
0
    def test_load_session_token(self, mock_path):
        """正常にセッショントークンが load できること"""
        mock_path.exists.return_value = True
        session_token = '{"sessionTokenExpire": 1534847297, "sessionToken": "testToken"}'

        service = baas.Service(self.get_sample_param())

        with patch(builtin + ".open", mock_open(read_data=session_token)):
            service.load_session_token()

        assert service.session_token == "testToken"
        assert service.session_token_expire == 1534847297
Ejemplo n.º 13
0
    def test_init_file_not_found(self):
        """設定ファイルが存在しない場合はエラーとなること"""
        m = mock_open()
        with patch("io.open", m) as mocked_open:
            mocked_open.side_effect = IOError()
            with pytest.raises(Exception):
                baas.Service()

        args_list = m.call_args_list
        assert args_list[0][0][0] == os.path.expanduser(
            "~/.baas/python/python_config.yaml")
        assert args_list[1][0][0] == "/etc/baas/python/python_config.yaml"
Ejemplo n.º 14
0
    def test_init_home_file(self):
        """ホームディレクトリの設定ファイルでサービス初期化すること"""
        # ファイルが存在しない場合はエラー
        with pytest.raises(Exception):
            baas.Service()

        # パラメータ指定で初期化
        c = util.load_config()
        param = c["service"]
        service = baas.Service(param)

        # ファイル保存
        service.save_config(
            os.path.expanduser("~/.baas/python/python_config.yaml"))

        # 設定ファイルで初期化
        service2 = baas.Service(param)
        assert service2.param == param

        param2 = {
            "baseUrl": "http://テストホスト/api",
            "tenantId": "tenant1",
            "appId": "app1",
            "appKey": "key1",
            "proxy": {
                "http": "proxy.example.com:8080",
                "https": "proxy.example2.com:8080"
            }
        }

        service3 = baas.Service(param2)

        # ファイル上書き保存
        service3.save_config(
            os.path.expanduser("~/.baas/python/python_config.yaml"))

        # 設定ファイルで初期化
        service4 = baas.Service()
        assert service4.param == param2
Ejemplo n.º 15
0
    def test_execute_rest_with_json(self, mock):
        """JSONボディ付きで正常に REST API を呼び出せること"""
        service = baas.Service(self.get_sample_param())

        mock.return_value = {}
        service.execute_rest("POST", "a/b/c", json={"a": 1})

        kwargs = mock.call_args[1]
        assert kwargs["json"] == {"a": 1}

        # json 指定時は Content-Type ヘッダなし (requests 側で自動設定)
        headers = kwargs["headers"]
        assert "Content-Type" not in headers
Ejemplo n.º 16
0
    def test_execute_rest_with_data(self, mock):
        """data付きで正常に REST API を呼び出せること"""
        service = baas.Service(self.get_sample_param())

        mock.return_value = {}
        service.execute_rest("POST", "a/b/c", data="xxxxx")

        kwargs = mock.call_args[1]
        assert kwargs["data"] == "xxxxx"

        # data 指定時は Content-Type デフォルトは application/octet-stream
        headers = kwargs["headers"]
        assert headers["Content-Type"] == "application/octet-stream"
Ejemplo n.º 17
0
    def test_save_config(self):
        """正常に設定情報を保存できること"""
        param = self.get_sample_param()
        service = baas.Service(param)

        path = "/tmp/config.yaml"
        m = mock_open()
        with patch("io.open", m, create=True):
            service.save_config(path)

        m.assert_called_with(path, 'w', encoding='utf-8')
        write_data = self._get_write_data(m)
        assert param == yaml.load(write_data)
Ejemplo n.º 18
0
def create_service(master=False, key="service"):
    """
    Create service from config file.

    Args:
        master (bool): use master key
        key (str): service key in config
    Returns:
        Service: service"
    """
    c = load_config()
    param = c[key]
    if master:
        param["appKey"] = param["masterKey"]
    return baas.Service(param)
Ejemplo n.º 19
0
    def test_init_with_file(self):
        """ファイルを使用して正常に初期化できること"""
        config_file = "baseUrl: http://localhost/api\n" \
            "tenantId: tenant1\n" \
            "appId: app1\n" \
            "appKey: key1\n" \
            "proxy:\n" \
            "  http: proxy.example.com:8080\n" \
            "  https: proxy.example2.com:8080\n"

        with patch("io.open", mock_open(read_data=config_file)):
            service = baas.Service()

        assert service.param["baseUrl"] == "http://localhost/api"
        assert service.param["tenantId"] == "tenant1"
        assert service.param["appId"] == "app1"
        assert service.param["appKey"] == "key1"
        proxy = service.param["proxy"]
        assert proxy["http"] == "proxy.example.com:8080"
        assert proxy["https"] == "proxy.example2.com:8080"
Ejemplo n.º 20
0
    def test_save_session_token(self, mock_mkdirs, mock_path):
        """正常にセッショントークンが save できること"""
        mock_path.exists.return_value = False
        session_token = {
            "sessionToken": "testToken",
            "sessionTokenExpire": 1534847297
        }
        expected_token = json.dumps(session_token)

        service = baas.Service(self.get_sample_param())

        service.session_token = "testToken"
        service.session_token_expire = 1534847297

        m = mock_open()
        with patch(builtin + ".open", m, create=True):
            service.save_session_token()

        m.assert_called_with(baas.Service._SESSION_TOKEN_FILE_PATH, 'w')
        assert self._get_write_data(m) == expected_token

        mock_mkdirs.assert_called_once()
Ejemplo n.º 21
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys

sys.path.append(
    os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + "/../"))
import necbaas as baas

from config import CONFIG

service = baas.Service(CONFIG)

# login test
res = baas.User.login(service, username="******", password="******")
print("login result:", res)

print()

# object bucket
objectBucket = baas.ObjectBucket(service, "test2")

obj = objectBucket.insert({"score": 90})
print("insert:", obj)

obj["score"] = 95
res = objectBucket.update(obj["_id"], obj, obj["etag"])
print("update:", res)

res = objectBucket.query(where={})
print("query:", res)
Ejemplo n.º 22
0
    def test_execute_rest_invalid_method(self):
        """不正なメソッドはエラーとなること"""
        service = baas.Service(self.get_sample_param())

        with pytest.raises(Exception):
            service.execute_rest("PATCH", "/a/b/c")
Ejemplo n.º 23
0
    def test_verify_session_token_no_token(self):
        """正常にセッショントークンがない場合は例外が raise されること"""
        service = baas.Service(self.get_sample_param())

        with pytest.raises(Exception):
            service.verify_session_token()
Ejemplo n.º 24
0
 def test_init_normalize_base_url(self):
     """baseUrl が正常に正規化されること"""
     param = self.get_sample_param()
     param["baseUrl"] = "http://localhost/api/"  # trailing slash
     service = baas.Service(param)
     assert service.param["baseUrl"] == "http://localhost/api"
Ejemplo n.º 25
0
 def test_init_base_url_jp(self, base_url):
     """日本語 baseUrl が正常に初期化されること"""
     param = self.get_sample_param()
     param["baseUrl"] = base_url
     service = baas.Service(param)
     assert service.param["baseUrl"] == u"http://ホスト名/api"
Ejemplo n.º 26
0
 def _test_init_bad_sub(self, key):
     param = self.get_sample_param()
     del param[key]
     with pytest.raises(ValueError):
         baas.Service(param)