@@ -788,6 +788,152 @@ def test_retry_config_external():
788
788
assert retry_err .value .reason == error
789
789
790
790
791
+ @responses .activate
792
+ def test_redirect_ibm_to_ibm_success ():
793
+ url_from = 'http://region1.cloud.ibm.com/'
794
+ url_to = 'http://region2.cloud.ibm.com/'
795
+
796
+ safe_headers = {
797
+ 'Authorization' : 'foo' ,
798
+ 'WWW-Authenticate' : 'bar' ,
799
+ 'Cookie' : 'baz' ,
800
+ 'Cookie2' : 'baz2' ,
801
+ }
802
+
803
+ responses .add (responses .GET , url_from , status = 302 , adding_headers = {'Location' : url_to }, body = 'just about to redirect' )
804
+ responses .add (responses .GET , url_to , status = 200 , body = 'successfully redirected' )
805
+
806
+ service = BaseService (service_url = url_from , authenticator = NoAuthAuthenticator ())
807
+
808
+ prepped = service .prepare_request ('GET' , '' , headers = safe_headers )
809
+ response = service .send (prepped )
810
+ result = response .get_result ()
811
+
812
+ assert result .status_code == 200
813
+ assert result .url == url_to
814
+ assert result .text == 'successfully redirected'
815
+
816
+ # Make sure the headers are included in the 2nd, redirected request.
817
+ redirected_headers = responses .calls [1 ].request .headers
818
+ for key in safe_headers :
819
+ assert key in redirected_headers
820
+
821
+
822
+ @responses .activate
823
+ def test_redirect_not_ibm_to_ibm_fail ():
824
+ url_from = 'http://region1.notcloud.ibm.com/'
825
+ url_to = 'http://region2.cloud.ibm.com/'
826
+
827
+ safe_headers = {
828
+ 'Authorization' : 'foo' ,
829
+ 'WWW-Authenticate' : 'bar' ,
830
+ 'Cookie' : 'baz' ,
831
+ 'Cookie2' : 'baz2' ,
832
+ }
833
+
834
+ responses .add (responses .GET , url_from , status = 302 , adding_headers = {'Location' : url_to }, body = 'just about to redirect' )
835
+ responses .add (responses .GET , url_to , status = 200 , body = 'successfully redirected' )
836
+
837
+ service = BaseService (service_url = url_from , authenticator = NoAuthAuthenticator ())
838
+
839
+ prepped = service .prepare_request ('GET' , '' , headers = safe_headers )
840
+ response = service .send (prepped )
841
+ result = response .get_result ()
842
+
843
+ assert result .status_code == 200
844
+ assert result .url == url_to
845
+ assert result .text == 'successfully redirected'
846
+
847
+ # Make sure the headers have been excluded from the 2nd, redirected request.
848
+ redirected_headers = responses .calls [1 ].request .headers
849
+ for key in safe_headers :
850
+ assert key not in redirected_headers
851
+
852
+
853
+ @responses .activate
854
+ def test_redirect_ibm_to_not_ibm_fail ():
855
+ url_from = 'http://region1.cloud.ibm.com/'
856
+ url_to = 'http://region2.notcloud.ibm.com/'
857
+
858
+ safe_headers = {
859
+ 'Authorization' : 'foo' ,
860
+ 'WWW-Authenticate' : 'bar' ,
861
+ 'Cookie' : 'baz' ,
862
+ 'Cookie2' : 'baz2' ,
863
+ }
864
+
865
+ responses .add (responses .GET , url_from , status = 302 , adding_headers = {'Location' : url_to }, body = 'just about to redirect' )
866
+ responses .add (responses .GET , url_to , status = 200 , body = 'successfully redirected' )
867
+
868
+ service = BaseService (service_url = url_from , authenticator = NoAuthAuthenticator ())
869
+
870
+ prepped = service .prepare_request ('GET' , '' , headers = safe_headers )
871
+ response = service .send (prepped )
872
+ result = response .get_result ()
873
+
874
+ assert result .status_code == 200
875
+ assert result .url == url_to
876
+ assert result .text == 'successfully redirected'
877
+
878
+ # Make sure the headers have been excluded from the 2nd, redirected request.
879
+ redirected_headers = responses .calls [1 ].request .headers
880
+ for key in safe_headers :
881
+ assert key not in redirected_headers
882
+
883
+
884
+ @responses .activate
885
+ def test_redirect_not_ibm_to_not_ibm_fail ():
886
+ url_from = 'http://region1.notcloud.ibm.com/'
887
+ url_to = 'http://region2.notcloud.ibm.com/'
888
+
889
+ safe_headers = {
890
+ 'Authorization' : 'foo' ,
891
+ 'WWW-Authenticate' : 'bar' ,
892
+ 'Cookie' : 'baz' ,
893
+ 'Cookie2' : 'baz2' ,
894
+ }
895
+
896
+ responses .add (responses .GET , url_from , status = 302 , adding_headers = {'Location' : url_to }, body = 'just about to redirect' )
897
+ responses .add (responses .GET , url_to , status = 200 , body = 'successfully redirected' )
898
+
899
+ service = BaseService (service_url = url_from , authenticator = NoAuthAuthenticator ())
900
+
901
+ prepped = service .prepare_request ('GET' , '' , headers = safe_headers )
902
+ response = service .send (prepped )
903
+ result = response .get_result ()
904
+
905
+ assert result .status_code == 200
906
+ assert result .url == url_to
907
+ assert result .text == 'successfully redirected'
908
+
909
+ # Make sure the headers have been excluded from the 2nd, redirected request.
910
+ redirected_headers = responses .calls [1 ].request .headers
911
+ for key in safe_headers :
912
+ assert key not in redirected_headers
913
+
914
+
915
+ @responses .activate
916
+ def test_redirect_ibm_to_ibm_exhausted_fail ():
917
+ redirects = 11
918
+ safe_headers = {
919
+ 'Authorization' : 'foo' ,
920
+ 'WWW-Authenticate' : 'bar' ,
921
+ 'Cookie' : 'baz' ,
922
+ 'Cookie2' : 'baz2' ,
923
+ }
924
+
925
+ for i in range (redirects ):
926
+ responses .add (responses .GET , f'http://region{ i + 1 } .cloud.ibm.com/' , status = 302 , adding_headers = {'Location' : f'http://region{ i + 2 } .cloud.ibm.com/' }, body = 'just about to redirect' )
927
+
928
+ service = BaseService (service_url = f'http://region1.cloud.ibm.com/' , authenticator = NoAuthAuthenticator ())
929
+
930
+ with pytest .raises (MaxRetryError ) as ex :
931
+ prepped = service .prepare_request ('GET' , '' , headers = safe_headers )
932
+ service .send (prepped )
933
+
934
+ assert ex .value .reason == 'reached the maximum number of redirects: 10'
935
+
936
+
791
937
@responses .activate
792
938
def test_user_agent_header ():
793
939
service = AnyServiceV1 ('2018-11-20' , authenticator = NoAuthAuthenticator ())
0 commit comments