1
+ using System . Collections . Specialized ;
2
+ using System . Linq ;
3
+ using System . Net ;
4
+ using RestSharp . IntegrationTests . Helpers ;
5
+ using Xunit ;
6
+
7
+ namespace RestSharp . IntegrationTests
8
+ {
9
+ public class RequestHeadTests
10
+ {
11
+ private const string BASE_URL = "http://localhost:8080/" ;
12
+
13
+ public RequestHeadTests ( )
14
+ {
15
+ RequestHeadCapturer . Initialize ( ) ;
16
+ }
17
+
18
+ [ Fact ]
19
+ public void Does_Not_Pass_Default_Credentials_When_Server_Does_Not_Negotiate ( )
20
+ {
21
+ const Method httpMethod = Method . GET ;
22
+ using ( SimpleServer . Create ( BASE_URL , Handlers . Generic < RequestHeadCapturer > ( ) ) )
23
+ {
24
+ var client = new RestClient ( BASE_URL ) ;
25
+ var request = new RestRequest ( RequestHeadCapturer . RESOURCE , httpMethod )
26
+ {
27
+ UseDefaultCredentials = true
28
+ } ;
29
+
30
+ client . Execute ( request ) ;
31
+
32
+ Assert . NotNull ( RequestHeadCapturer . CapturedHeaders ) ;
33
+ var keys = RequestHeadCapturer . CapturedHeaders . Keys . Cast < string > ( ) . ToArray ( ) ;
34
+ Assert . False ( keys . Contains ( "Authorization" ) , "Authorization header was present in HTTP request from client, even though server does not use the Negotiate scheme" ) ;
35
+ }
36
+ }
37
+
38
+ [ Fact ]
39
+ public void Passes_Default_Credentials_When_UseDefaultCredentials_Is_True ( )
40
+ {
41
+ const Method httpMethod = Method . GET ;
42
+ using ( SimpleServer . Create ( BASE_URL , Handlers . Generic < RequestHeadCapturer > ( ) , AuthenticationSchemes . Negotiate ) )
43
+ {
44
+ var client = new RestClient ( BASE_URL ) ;
45
+ var request = new RestRequest ( RequestHeadCapturer . RESOURCE , httpMethod )
46
+ {
47
+ UseDefaultCredentials = true
48
+ } ;
49
+
50
+ var response = client . Execute ( request ) ;
51
+
52
+ Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
53
+ Assert . NotNull ( RequestHeadCapturer . CapturedHeaders ) ;
54
+ var keys = RequestHeadCapturer . CapturedHeaders . Keys . Cast < string > ( ) . ToArray ( ) ;
55
+ Assert . True ( keys . Contains ( "Authorization" ) , "Authorization header not present in HTTP request from client, even though UseDefaultCredentials = true" ) ;
56
+ }
57
+ }
58
+
59
+ [ Fact ]
60
+ public void Does_Not_Pass_Default_Credentials_When_UseDefaultCredentials_Is_False ( )
61
+ {
62
+ const Method httpMethod = Method . GET ;
63
+ using ( SimpleServer . Create ( BASE_URL , Handlers . Generic < RequestHeadCapturer > ( ) , AuthenticationSchemes . Negotiate ) )
64
+ {
65
+ var client = new RestClient ( BASE_URL ) ;
66
+ var request = new RestRequest ( RequestHeadCapturer . RESOURCE , httpMethod )
67
+ {
68
+ // UseDefaultCredentials is currently false by default, but to make the test more robust in case that ever
69
+ // changes, it's better to explicitly set it here.
70
+ UseDefaultCredentials = false
71
+ } ;
72
+
73
+ var response = client . Execute ( request ) ;
74
+
75
+ Assert . Equal ( HttpStatusCode . Unauthorized , response . StatusCode ) ;
76
+ Assert . Null ( RequestHeadCapturer . CapturedHeaders ) ;
77
+ }
78
+ }
79
+
80
+ private class RequestHeadCapturer
81
+ {
82
+ public const string RESOURCE = "Capture" ;
83
+
84
+ public static NameValueCollection CapturedHeaders { get ; set ; }
85
+
86
+ public static void Initialize ( )
87
+ {
88
+ CapturedHeaders = null ;
89
+ }
90
+
91
+ public static void Capture ( HttpListenerContext context )
92
+ {
93
+ var request = context . Request ;
94
+ CapturedHeaders = request . Headers ;
95
+ }
96
+ }
97
+ }
98
+ }
0 commit comments