| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,104 @@ | |||
| 1 | + import json | ||
| 2 | + import os | ||
| 3 | + import threading | ||
| 4 | + import unittest | ||
| 5 | + | ||
| 6 | + from http.server import BaseHTTPRequestHandler, HTTPServer | ||
| 7 | + from test.support import EnvironmentVarGuard | ||
| 8 | + from urllib.parse import urlparse | ||
| 9 | + from kaggle_session import UserSessionClient | ||
| 10 | + from kaggle_web_client import (_KAGGLE_URL_BASE_ENV_VAR_NAME, | ||
| 11 | + _KAGGLE_USER_SECRETS_TOKEN_ENV_VAR_NAME, | ||
| 12 | + CredentialError, BackendError) | ||
| 13 | + | ||
| 14 | + class UserSessionHTTPHandler(BaseHTTPRequestHandler): | ||
| 15 | + | ||
| 16 | + def set_request(self): | ||
| 17 | + raise NotImplementedError() | ||
| 18 | + | ||
| 19 | + def get_response(self): | ||
| 20 | + raise NotImplementedError() | ||
| 21 | + | ||
| 22 | + def do_HEAD(s): | ||
| 23 | + s.send_response(200) | ||
| 24 | + | ||
| 25 | + def do_POST(s): | ||
| 26 | + s.set_request() | ||
| 27 | + s.send_response(200) | ||
| 28 | + s.send_header("Content-type", "application/json") | ||
| 29 | + s.end_headers() | ||
| 30 | + s.wfile.write(json.dumps(s.get_response()).encode("utf-8")) | ||
| 31 | + | ||
| 32 | + class TestUserSessionClient(unittest.TestCase): | ||
| 33 | + SERVER_ADDRESS = urlparse(os.getenv(_KAGGLE_URL_BASE_ENV_VAR_NAME, default="http://127.0.0.1:8001")) | ||
| 34 | + TEST_JWT = 'test-secrets-key' | ||
| 35 | + | ||
| 36 | + def _test_client(self, client_func, expected_path, expected_body, source=None, success=True): | ||
| 37 | + _request = {} | ||
| 38 | + | ||
| 39 | + class GetKernelRunSourceForCaipHandler(UserSessionHTTPHandler): | ||
| 40 | + def set_request(self): | ||
| 41 | + _request['path'] = self.path | ||
| 42 | + content_len = int(self.headers.get('Content-Length')) | ||
| 43 | + _request['body'] = json.loads(self.rfile.read(content_len)) | ||
| 44 | + _request['headers'] = self.headers | ||
| 45 | + | ||
| 46 | + def get_response(self): | ||
| 47 | + if success: | ||
| 48 | + return {'result': {'source': source}, 'wasSuccessful': 'true'} | ||
| 49 | + return {'wasSuccessful': 'false'} | ||
| 50 | + | ||
| 51 | + env = EnvironmentVarGuard() | ||
| 52 | + env.set(_KAGGLE_USER_SECRETS_TOKEN_ENV_VAR_NAME, self.TEST_JWT) | ||
| 53 | + with env: | ||
| 54 | + with HTTPServer((self.SERVER_ADDRESS.hostname, self.SERVER_ADDRESS.port), GetKernelRunSourceForCaipHandler) as httpd: | ||
| 55 | + threading.Thread(target=httpd.serve_forever).start() | ||
| 56 | + | ||
| 57 | + try: | ||
| 58 | + client_func() | ||
| 59 | + finally: | ||
| 60 | + httpd.shutdown() | ||
| 61 | + | ||
| 62 | + path, headers, body = _request['path'], _request['headers'], _request['body'] | ||
| 63 | + self.assertEqual( | ||
| 64 | + path, | ||
| 65 | + expected_path, | ||
| 66 | + msg="Fake server did not receive the right request from UserSessionClient.") | ||
| 67 | + self.assertEqual( | ||
| 68 | + body, | ||
| 69 | + expected_body, | ||
| 70 | + msg="Fake server did not receive the right body from UserSessionClient.") | ||
| 71 | + | ||
| 72 | + def test_no_token_fails(self): | ||
| 73 | + env = EnvironmentVarGuard() | ||
| 74 | + env.unset(_KAGGLE_USER_SECRETS_TOKEN_ENV_VAR_NAME) | ||
| 75 | + with env: | ||
| 76 | + with self.assertRaises(CredentialError): | ||
| 77 | + client = UserSessionClient() | ||
| 78 | + | ||
| 79 | + def test_get_exportable_ipynb_succeeds(self): | ||
| 80 | + source = "import foo" | ||
| 81 | + | ||
| 82 | + def call_get_ipynb(): | ||
| 83 | + client = UserSessionClient() | ||
| 84 | + response = client.get_exportable_ipynb() | ||
| 85 | + self.assertEqual(source, response['source']) | ||
| 86 | + | ||
| 87 | + self._test_client( | ||
| 88 | + call_get_ipynb, | ||
| 89 | + '/requests/GetKernelRunSourceForCaipRequest', | ||
| 90 | + {'UseDraft': True}, | ||
| 91 | + source=source, | ||
| 92 | + success=True) | ||
| 93 | + | ||
| 94 | + def test_get_exportable_ipynb_fails(self): | ||
| 95 | + def call_get_ipynb(): | ||
| 96 | + client = UserSessionClient() | ||
| 97 | + with self.assertRaises(BackendError): | ||
| 98 | + client.get_exportable_ipynb() | ||
| 99 | + | ||
| 100 | + self._test_client( | ||
| 101 | + call_get_ipynb, | ||
| 102 | + '/requests/GetKernelRunSourceForCaipRequest', | ||
| 103 | + {'UseDraft': True}, | ||
| 104 | + success=False) | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments