1616# under the License.
1717
1818
19+ import itertools
1920import threading
2021import unittest
2122from http .server import BaseHTTPRequestHandler , HTTPServer
@@ -48,8 +49,9 @@ def test_database_and_table_names_are_url_encoded(self):
4849 paths .table ("sales db" , "orders/all" ))
4950 self .assertEqual (
5051 "/v1/catalog%2Fid/databases/sales+db/table-details" , paths .table_details ("sales db" ))
52+ self .assertEqual ("/v1/catalog%2Fid/tables/id/a%2Fb+c" , paths .table_by_id ("a/b c" ))
5153
52- def test_table_details_signature_matches_the_path_sent (self ):
54+ def test_signature_matches_the_path_sent (self ):
5355 received = []
5456
5557 class Handler (BaseHTTPRequestHandler ):
@@ -74,22 +76,24 @@ def do_GET(self):
7476 token = DLFToken ("test-ak" , "test-sk" , "test-token" , None )
7577 paths = ResourcePaths ("catalog~id" )
7678
79+ builders = ((paths .table_details , "/v1/catalog~id/databases/{}/table-details" ),
80+ (paths .table_by_id , "/v1/catalog~id/tables/id/{}" ))
7781 for algorithm in ("default" , "openapi-v4" ):
7882 provider = DLFAuthProvider (uri , "cn-hangzhou" , algorithm , token = token )
79- for database , encoded in (("sales~db" , "sales~db" ),
80- ("sales~ db/a+b*" , "sales~+db%2Fa%2Bb*" ),
81- ("sales%7Edb" , "sales%257Edb" )):
82- with self .subTest (algorithm = algorithm , database = database ):
83+ for (build , template ), (name , encoded ) in itertools .product (
84+ builders , (("sales~db" , "sales~db" ),
85+ ("sales~ db/a+b*" , "sales~+db%2Fa%2Bb*" ),
86+ ("sales%7Edb" , "sales%257Edb" ))):
87+ with self .subTest (algorithm = algorithm , path = template , name = name ):
8388 signed = []
8489
8590 def sign (parameter ):
8691 signed .append (parameter .path )
8792 return provider .merge_auth_header ({}, parameter )
8893
89- client .get (paths . table_details ( database ), None , sign )
94+ client .get (build ( name ), None , sign )
9095 path , headers = received [- 1 ]
91- self .assertEqual (
92- "/v1/catalog~id/databases/{}/table-details" .format (encoded ), path )
96+ self .assertEqual (template .format (encoded ), path )
9397 expected = provider .signer .authorization (
9498 RESTAuthParameter ("GET" , path , "" , {}), token ,
9599 provider .extract_host (uri ), headers )
0 commit comments