def test_case_sensitive_update_with_insensitive_method(self): conn_str = 'enDpoiNT=XXXXENDPOINTXXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' conn_str2 = 'hostName=XXXXENDPOINTXXXX;ACCessKEy=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=;' parse_result_insensitive = parse_connection_string(conn_str, False) parse_result_sensitive = parse_connection_string(conn_str2, True) parse_result_sensitive.update(parse_result_insensitive) assert len(parse_result_sensitive) == 5 assert parse_result_sensitive["hostName"] == "XXXXENDPOINTXXXX" with pytest.raises(KeyError): parse_result_sensitive["hostname"]
def test_case_insensitive_get_method(self): conn_str = 'Endpoint=XXXXENDPOINTXXXX;SharedAccessKeyName=XXXXPOLICYXXXX;SharedAccessKey=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' parse_result = parse_connection_string(conn_str, False) assert parse_result.get("sharedaccesskeyname") == 'XXXXPOLICYXXXX' assert parse_result.get("sharedaccesskey") == 'THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' assert parse_result.get("accesskey") is None assert parse_result.get("accesskey", "XXothertestkeyXX=") == "XXothertestkeyXX="
def test_error_with_duplicate_case_sensitive_keys_for_sensitive_conn_str( self, **kwargs): conn_str = 'Endpoint=XXXXENDPOINTXXXX;Endpoint=XXXXENDPOINT2XXXX;SharedAccessKeyName=XXXXPOLICYXXXX;SharedAccessKey=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' with pytest.raises(ValueError) as e: parse_result = parse_connection_string(conn_str, True) assert str( e.value) == "Connection string is either blank or malformed."
def test_case_insensitive_pop_method(self): conn_str = 'enDpoiNT=XXXXENDPOINTXXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' parse_result = parse_connection_string(conn_str, False) endpoint = parse_result.pop("endpoint") sharedaccesskey = parse_result.pop("sharedaccesskey") assert len(parse_result) == 1 assert endpoint == "XXXXENDPOINTXXXX" assert sharedaccesskey == "THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX="
def test_parsing_with_case_insensitive_keys_for_insensitive_conn_str( self, **kwargs): conn_str = 'enDpoiNT=XXXXENDPOINTXXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' parse_result = parse_connection_string(conn_str, False) assert parse_result["endpoint"] == 'XXXXENDPOINTXXXX' assert parse_result["sharedaccesskeyname"] == 'XXXXPOLICYXXXX' assert parse_result[ "sharedaccesskey"] == 'THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX='
def test_case_insensitive_update_with_insensitive_method(self): conn_str = 'enDpoiNT=XXXXENDPOINTXXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' conn_str2 = 'hostName=XXXXENDPOINTXXXX;ACCessKEy=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=;' parse_result_insensitive = parse_connection_string(conn_str, False) parse_result_insensitive2 = parse_connection_string(conn_str2, False) parse_result_insensitive.update(parse_result_insensitive2) assert len(parse_result_insensitive) == 5 assert parse_result_insensitive["hostname"] == "XXXXENDPOINTXXXX" assert parse_result_insensitive["accesskey"] == "THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=" # check that update replace duplicate case insensitive keys conn_str_duplicate_key = "endpoint=XXXXENDPOINT2XXXX;ACCessKEy=TestKey" parse_result_insensitive_dupe = parse_connection_string(conn_str_duplicate_key, False) parse_result_insensitive.update(parse_result_insensitive_dupe) assert parse_result_insensitive_dupe["endpoint"] == "XXXXENDPOINT2XXXX" assert parse_result_insensitive_dupe["accesskey"] == "TestKey" assert len(parse_result_insensitive) == 5
def test_error_with_malformed_conn_str(self): for conn_str in [ "", "foobar", "foo;bar;baz", ";", "foo=;bar=;", "=", "=;==" ]: with pytest.raises(ValueError) as e: parse_result = parse_connection_string(conn_str) self.assertEqual( str(e.value), "Connection string is either blank or malformed.")
def test_parsing_with_case_sensitive_keys_for_sensitive_conn_str(self, **kwargs): conn_str = 'Endpoint=XXXXENDPOINTXXXX;SharedAccessKeyName=XXXXPOLICYXXXX;SharedAccessKey=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' parse_result = parse_connection_string(conn_str, True) assert parse_result["Endpoint"] == 'XXXXENDPOINTXXXX' assert parse_result["SharedAccessKeyName"] == 'XXXXPOLICYXXXX' assert parse_result["SharedAccessKey"] == 'THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' with pytest.raises(KeyError): parse_result["endPoint"] with pytest.raises(KeyError): parse_result["sharedAccESSkEynAME"] with pytest.raises(KeyError): parse_result["sharedaccesskey"]
def parse_connection_str(conn_str, credential, keyword_args): conn_settings = parse_connection_string(conn_str) primary = None secondary = None if not credential: try: credential = AzureNamedKeyCredential( name=conn_settings["accountname"], key=conn_settings["accountkey"]) except KeyError: credential = conn_settings.get("sharedaccesssignature", None) if not credential: raise ValueError( "Connection string missing required connection details.") credential = AzureSasCredential(credential) primary = conn_settings.get("tableendpoint") secondary = conn_settings.get("tablesecondaryendpoint") if not primary: if secondary: raise ValueError( "Connection string specifies only secondary endpoint.") try: primary = "{}://{}.table.{}".format( conn_settings["defaultendpointsprotocol"], conn_settings["accountname"], conn_settings["endpointsuffix"], ) secondary = "{}-secondary.table.{}".format( conn_settings["accountname"], conn_settings["endpointsuffix"]) except KeyError: pass if not primary: try: primary = "https://{}.table.{}".format( conn_settings["accountname"], conn_settings.get("endpointsuffix", SERVICE_HOST_BASE), ) except KeyError: raise ValueError( "Connection string missing required connection details.") if "secondary_hostname" not in keyword_args: keyword_args["secondary_hostname"] = secondary return primary, credential
def test_case_insensitive_keys_method(self): conn_str = 'enDpoiNT=XXXXENDPOINTXXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' parse_result = parse_connection_string(conn_str, False) keys = parse_result.keys() assert len(keys) == 3 assert "endpoint" in keys
def test_case_insensitive_copy_method(self): conn_str = 'enDpoiNT=XXXXENDPOINTXXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' parse_result = parse_connection_string(conn_str, False) copied = parse_result.copy() assert copied == parse_result
def test_error_with_duplicate_case_insensitive_keys_for_insensitive_conn_str(self, **kwargs): conn_str = 'endPoinT=XXXXENDPOINTXXXX;eNdpOint=XXXXENDPOINT2XXXX;sharedaccesskeyname=XXXXPOLICYXXXX;SHAREDACCESSKEY=THISISATESTKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXX=' with pytest.raises(ValueError) as e: parse_result = parse_connection_string(conn_str, False) assert str(e.value) == "Duplicate key in connection string: endpoint"
def test_success_with_duplicate_case_sensitive_keys_for_sensitive_conn_str(self, **kwargs): conn_str = 'enDpoInt=XXXXENDPOINTXXXX;Endpoint=XXXXENDPOINT2XXXX;' parse_result = parse_connection_string(conn_str, True) assert parse_result["enDpoInt"] == 'XXXXENDPOINTXXXX' assert parse_result["Endpoint"] == 'XXXXENDPOINT2XXXX'