def test_delete(self):
     client = APIClient(self.access_key, self.secret_key, self.api_server)
     req = APIRequest(client, self.endpoint, self.version)
     r = req.delete('/resource')
     logger.debug(r.content)
     self.assertEqual(r.status_code, 200)
     self.assertEqual(r.content, utf8('delete'))
 def test_options(self):
     client = APIClient(self.access_key, self.secret_key, self.api_server)
     req = APIRequest(client, self.endpoint, self.version)
     r = req.options('/resource')
     logger.debug(r.headers)
     logger.debug(r.content)
     self.assertEqual(r.status_code, 200)
    def test_post_img(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client, self.endpoint, self.version)

        with open(IMG_FILE, 'rb') as f:
            body = f.read()
            r = req.post('/resource/', data=body)

            self.assertEqual(r.status_code, 200)
            self.assertEqual(utf8(r.content), utf8(body))
    def test_login_change_password(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client, self.endpoint, self.version)
        req2 = APIRequest(client, 'account', 'v1')

        json_data = {'name': 'name', 'password': '******'}
        r = req.post('/login', json=json_data)
        self.assertEqual(r.status_code, 200)
        schema = {
            'code': {
                'type': 'integer',
                'required': True,
                'allowed': [APIStatusCode.SUCCESS]
            },
            'msg': {
                'type': 'string',
                'required': True,
            }
        }

        access_token = r.json()['data']['access_token']
        json_data = {'new_password': '******', 'old_password': '******'}
        r = req2.post('/password/change',
                      json=json_data,
                      access_token=access_token)
        self.assertEqual(r.status_code, 200)
        v = Validator(schema=schema, allow_unknown=True)
        logger.debug(r.json())
        self.assertEqual(v.validate(r.json()), True)
        # 测试非法的 access_token 请求
        req3 = APIRequest(client, 'test_api_login', 'v1')
        r = req3.post('/protected/', access_token=access_token)
        logger.debug(r.content)
        self.assertEqual(r.status_code, GATEWAY_ERROR_STATUS_CODE)
    def test_aes_get(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client,
                         self.endpoint,
                         self.version,
                         encrypt_type='aes')

        r = req.get('/resource/')

        self.assertEqual(r.status_code, 200)
        self.assertEqual(utf8('get'), utf8(r.content))
    def test_post_json(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client, self.endpoint, self.version)
        json_data = {'a': 1, 'b': 'test string', 'c': '中文'}

        body = json.dumps(json_data, sort_keys=True)
        r = req.post('/resource/', json=json_data)

        self.assertEqual(r.status_code, 200)
        self.assertEqual(utf8(json.dumps(r.json(), sort_keys=True)),
                         utf8(body))
    def test_get(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client,
                         self.endpoint,
                         self.version,
                         require_hmac=False,
                         sign_response=False)

        r = req.get('/resource/')

        self.assertEqual(r.status_code, 200)
        self.assertEqual(utf8('get'), utf8(r.content))
    def test_aes_post(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client,
                         self.endpoint,
                         self.version,
                         encrypt_type='aes')

        json_data = {'a': 1, 'b': 'test string', 'c': '中文'}

        body = json.dumps(json_data)
        r = req.post('/resource/', json=json_data)

        self.assertEqual(r.status_code, 200)
        self.assertEqual(utf8(body), utf8(r.content))
    def test_post(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client,
                         self.endpoint,
                         self.version,
                         require_hmac=False,
                         sign_response=False)

        json_data = {'a': 1, 'b': 'test string', 'c': '中文'}

        body = json.dumps(json_data)
        r = req.post('/resource/', json=json_data)

        self.assertEqual(r.status_code, 200)
        self.assertEqual(utf8(body), utf8(r.content))
Beispiel #10
0
    def test_acl(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client, self.endpoint, self.version)
        r = req.get('/resource')
        self.assertEqual(r.status_code, 200)

        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client, self.endpoint, self.version)
        r = req.get('/forbidden/')
        self.assertEqual(r.status_code, GATEWAY_ERROR_STATUS_CODE)
Beispiel #11
0
    def test_signature(self):
        client = APIClient(self.access_key, 'bad secret key', self.api_server)
        req = APIRequest(client, self.endpoint, self.version)
        r = req.get('/resource/')
        self.assertEqual(r.status_code, GATEWAY_ERROR_STATUS_CODE)

        client = APIClient(self.access_key, 'bad secret key', self.api_server)
        req = APIRequest(client, self.endpoint, self.version)

        r = req.get('/resource/')
        self.assertEqual(r.status_code, GATEWAY_ERROR_STATUS_CODE)
Beispiel #12
0
 def test_auth(self):
     client = APIClient(self.access_key, self.secret_key, self.api_server)
     req = APIRequest(client, self.endpoint, self.version)
     r = req.get('/resource')
     self.assertEqual(r.status_code, 200)
     r = req.get('/')
     self.assertEqual(r.status_code, 200)
     r = req.get('')
     logger.debug(r.content)
     self.assertEqual(r.status_code, 200)
     r = req.get('/resource/not_exist')
     self.assertEqual(r.status_code, 404)
Beispiel #13
0
    def test_login_refresh_logout(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client, self.endpoint, self.version)
        req2 = APIRequest(client, 'account', 'v1')

        r = req.get('/login')
        print(r.content)
        self.assertEqual(r.status_code, 405)
        json_data = {'name': 'name', 'password': '******'}
        r = req.post('/login', json=json_data)
        self.assertEqual(r.status_code, 200)
        schema = {
            'code': {
                'type': 'integer',
                'required': True,
                'allowed': [APIStatusCode.SUCCESS]
            },
            'msg': {
                'type': 'string',
                'required': True,
            },
            'data': {
                'type': 'dict',
                'required': True,
            }
        }
        v = Validator(schema=schema, allow_unknown=True)
        self.assertEqual(v.validate(r.json()), True)

        # 测试access_token存活性
        access_token = r.json()['data']['access_token']
        refresh_token = r.json()['data']['refresh_token']
        json_data = {'access_token': access_token}
        r = req.post('/token/alive/', json=json_data)
        self.assertEqual(r.status_code, 200)
        v = Validator(schema=schema, allow_unknown=True)
        self.assertEqual(v.validate(r.json()), True)
        # 无效的 access_token
        json_data = {'access_token': 'test_test'}
        r = req.post('/token/alive/', json=json_data)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json()['data']['expires_in'] < 0, True)

        # refresh_token
        json_data = {'refresh_token': refresh_token}
        logger.debug(json_data)

        r = req.post('/token/refresh/', json=json_data)
        self.assertEqual(r.status_code, 200)
        v = Validator(schema=schema, allow_unknown=True)
        logger.debug(r.json())
        self.assertEqual(v.validate(r.json()), True)

        # ---------------------
        json_data = {'test': 'test'}

        auth_req = APIRequest(client, 'test_api_login', 'v1')

        access_token = r.json()['data']['access_token']
        ar = auth_req.post('/protected/?access_token=%s' % access_token,
                           json=json_data)
        self.assertEqual(r.status_code, 200)
        v = Validator(schema=schema, allow_unknown=True)
        self.assertEqual(v.validate(ar.json()), True)

        # 测试非法的 access_token 请求
        r = auth_req.post('/protected/', json=json_data)
        self.assertEqual(r.status_code, GATEWAY_ERROR_STATUS_CODE)
        r = auth_req.post('/protected/', json=json_data, access_token='123')
        self.assertEqual(r.status_code, GATEWAY_ERROR_STATUS_CODE)
        # ---------------------
        # logout
        # 通过 headers 传递 access_token
        r = req2.post('/logout', access_token=access_token)
        self.assertEqual(r.status_code, 200)
        schema = {
            'code': {
                'type': 'integer',
                'required': True,
                'allowed': [APIStatusCode.SUCCESS]
            },
            'msg': {
                'type': 'string',
                'required': True,
            }
        }
        v = Validator(schema=schema, allow_unknown=True)
        self.assertEqual(v.validate(r.json()), True)
Beispiel #14
0
    def test_aes_login_refresh_logout(self):
        client = APIClient(self.access_key, self.secret_key, self.api_server)
        req = APIRequest(client,
                         self.endpoint,
                         self.version,
                         encrypt_type='aes')
        req2 = APIRequest(client, 'account', 'v1', encrypt_type='aes')

        json_data = {'name': 'name', 'password': '******'}
        r = req.post('/login', json=json_data)
        self.assertEqual(r.status_code, 200)
        schema = {
            'code': {
                'type': 'integer',
                'required': True,
                'allowed': [APIStatusCode.SUCCESS]
            },
            'msg': {
                'type': 'string',
                'required': True,
            },
            'data': {
                'type': 'dict',
                'required': True,
            }
        }
        v = Validator(schema=schema, allow_unknown=True)
        self.assertEqual(v.validate(r.json()), True)

        # refresh_token
        json_data = {'refresh_token': r.json()['data']['refresh_token']}
        logger.debug(json_data)

        r = req.post('/token/refresh/', json=json_data)
        self.assertEqual(r.status_code, 200)
        v = Validator(schema=schema, allow_unknown=True)
        logger.debug(r.json())
        self.assertEqual(v.validate(r.json()), True)

        # ---------------------
        json_data = {'test': 'test'}

        auth_req = APIRequest(client,
                              'test_api_login',
                              'v1',
                              encrypt_type='aes')

        access_token = r.json()['data']['access_token']
        ar = auth_req.post('/protected/?access_token=%s' % access_token,
                           json=json_data)
        self.assertEqual(r.status_code, 200)
        v = Validator(schema=schema, allow_unknown=True)
        logger.debug(ar.content)
        logger.debug(ar.json())
        self.assertEqual(v.validate(ar.json()), True)
        # ---------------------
        # logout
        r = req2.post('/logout', access_token=access_token)
        self.assertEqual(r.status_code, 200)
        schema = {
            'code': {
                'type': 'integer',
                'required': True,
                'allowed': [APIStatusCode.SUCCESS]
            },
            'msg': {
                'type': 'string',
                'required': True,
            }
        }
        v = Validator(schema=schema, allow_unknown=True)
        self.assertEqual(v.validate(r.json()), True)