1
+ using System ;
2
+ using System . Net ;
3
+ using System . Net . Http ;
4
+ using System . Net . Http . Headers ;
5
+ using System . Security . Principal ;
6
+ using System . Threading ;
7
+ using System . Web . Http ;
8
+ using Autofac ;
9
+ using Autofac . Integration . WebApi ;
10
+ using Moq ;
11
+ using NUnit . Framework ;
12
+ using WebApi . OutputCache . Core ;
13
+ using WebApi . OutputCache . Core . Cache ;
14
+ using System . Collections . Generic ;
15
+ using System . Linq ;
16
+
17
+ namespace WebApi . OutputCache . V2 . Tests
18
+ {
19
+ [ TestFixture ]
20
+ public class CustomHeadersTests
21
+ {
22
+ private HttpServer _server ;
23
+ private string _url = "http://www.strathweb.com/api/customheaders/" ;
24
+ private IApiOutputCache _cache ;
25
+
26
+ [ SetUp ]
27
+ public void init ( )
28
+ {
29
+ Thread . CurrentPrincipal = null ;
30
+
31
+ _cache = new SimpleCacheForTests ( ) ;
32
+
33
+ var conf = new HttpConfiguration ( ) ;
34
+ var builder = new ContainerBuilder ( ) ;
35
+ builder . RegisterInstance ( _cache ) ;
36
+
37
+ conf . DependencyResolver = new AutofacWebApiDependencyResolver ( builder . Build ( ) ) ;
38
+ conf . Routes . MapHttpRoute (
39
+ name : "DefaultApi" ,
40
+ routeTemplate : "api/{controller}/{action}/{id}" ,
41
+ defaults : new { id = RouteParameter . Optional }
42
+ ) ;
43
+
44
+ _server = new HttpServer ( conf ) ;
45
+ }
46
+
47
+ [ Test ]
48
+ public void cache_custom_content_header ( ) {
49
+ var client = new HttpClient ( _server ) ;
50
+ var req = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Content_Header" ) ;
51
+ var result = client . SendAsync ( req ) . Result ;
52
+
53
+ var req2 = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Content_Header" ) ;
54
+ var result2 = client . SendAsync ( req2 ) . Result ;
55
+
56
+ Assert . That ( result . Content . Headers . ContentDisposition . DispositionType , Is . EqualTo ( "attachment" ) ) ;
57
+ Assert . That ( result2 . Content . Headers . ContentDisposition . DispositionType , Is . EqualTo ( "attachment" ) ) ;
58
+ }
59
+
60
+ [ Test ]
61
+ public void cache_custom_content_header_with_multiply_values ( )
62
+ {
63
+ var client = new HttpClient ( _server ) ;
64
+ var req = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Content_Header_Multiply_Values" ) ;
65
+ var result = client . SendAsync ( req ) . Result ;
66
+
67
+ var req2 = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Content_Header_Multiply_Values" ) ;
68
+ var result2 = client . SendAsync ( req2 ) . Result ;
69
+
70
+ Assert . That ( result . Content . Headers . ContentEncoding . Count , Is . EqualTo ( 2 ) ) ;
71
+ Assert . That ( result . Content . Headers . ContentEncoding . First ( ) , Is . EqualTo ( "deflate" ) ) ;
72
+ Assert . That ( result . Content . Headers . ContentEncoding . Last ( ) , Is . EqualTo ( "gzip" ) ) ;
73
+
74
+ Assert . That ( result2 . Content . Headers . ContentEncoding . Count , Is . EqualTo ( 2 ) ) ;
75
+ Assert . That ( result2 . Content . Headers . ContentEncoding . First ( ) , Is . EqualTo ( "deflate" ) ) ;
76
+ Assert . That ( result2 . Content . Headers . ContentEncoding . Last ( ) , Is . EqualTo ( "gzip" ) ) ;
77
+ }
78
+
79
+ [ Test ]
80
+ public void cache_custom_response_header ( )
81
+ {
82
+ var client = new HttpClient ( _server ) ;
83
+ var req = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Response_Header" ) ;
84
+ var result = client . SendAsync ( req ) . Result ;
85
+
86
+ var req2 = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Response_Header" ) ;
87
+ var result2 = client . SendAsync ( req2 ) . Result ;
88
+
89
+ Assert . That ( result . Headers . GetValues ( "RequestHeader1" ) . First ( ) , Is . EqualTo ( "value1" ) ) ;
90
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader1" ) . First ( ) , Is . EqualTo ( "value1" ) ) ;
91
+ }
92
+
93
+ [ Test ]
94
+ public void cache_custom_response_header_with_multiply_values ( )
95
+ {
96
+ var client = new HttpClient ( _server ) ;
97
+ var req = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Response_Header_Multiply_Values" ) ;
98
+ var result = client . SendAsync ( req ) . Result ;
99
+
100
+ var req2 = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Custom_Response_Header_Multiply_Values" ) ;
101
+ var result2 = client . SendAsync ( req2 ) . Result ;
102
+
103
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . Count ( ) , Is . EqualTo ( 2 ) ) ;
104
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . First ( ) , Is . EqualTo ( "value2" ) ) ;
105
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . Last ( ) , Is . EqualTo ( "value3" ) ) ;
106
+
107
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader2" ) . Count ( ) , Is . EqualTo ( 2 ) ) ;
108
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader2" ) . First ( ) , Is . EqualTo ( "value2" ) ) ;
109
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader2" ) . Last ( ) , Is . EqualTo ( "value3" ) ) ;
110
+ }
111
+
112
+ [ Test ]
113
+ public void cache_multiply_custom_headers ( )
114
+ {
115
+ var client = new HttpClient ( _server ) ;
116
+ var req = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Multiply_Custom_Headers" ) ;
117
+ var result = client . SendAsync ( req ) . Result ;
118
+
119
+ var req2 = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Multiply_Custom_Headers" ) ;
120
+ var result2 = client . SendAsync ( req2 ) . Result ;
121
+
122
+ Assert . That ( result . Content . Headers . ContentDisposition . DispositionType , Is . EqualTo ( "attachment" ) ) ;
123
+ Assert . That ( result . Content . Headers . ContentEncoding . Count , Is . EqualTo ( 2 ) ) ;
124
+ Assert . That ( result . Content . Headers . ContentEncoding . First ( ) , Is . EqualTo ( "deflate" ) ) ;
125
+ Assert . That ( result . Content . Headers . ContentEncoding . Last ( ) , Is . EqualTo ( "gzip" ) ) ;
126
+ Assert . That ( result . Headers . GetValues ( "RequestHeader1" ) . First ( ) , Is . EqualTo ( "value1" ) ) ;
127
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . Count ( ) , Is . EqualTo ( 2 ) ) ;
128
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . First ( ) , Is . EqualTo ( "value2" ) ) ;
129
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . Last ( ) , Is . EqualTo ( "value3" ) ) ;
130
+
131
+ Assert . That ( result2 . Content . Headers . ContentDisposition . DispositionType , Is . EqualTo ( "attachment" ) ) ;
132
+ Assert . That ( result2 . Content . Headers . ContentEncoding . Count , Is . EqualTo ( 2 ) ) ;
133
+ Assert . That ( result2 . Content . Headers . ContentEncoding . First ( ) , Is . EqualTo ( "deflate" ) ) ;
134
+ Assert . That ( result2 . Content . Headers . ContentEncoding . Last ( ) , Is . EqualTo ( "gzip" ) ) ;
135
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader1" ) . First ( ) , Is . EqualTo ( "value1" ) ) ;
136
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader2" ) . Count ( ) , Is . EqualTo ( 2 ) ) ;
137
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader2" ) . First ( ) , Is . EqualTo ( "value2" ) ) ;
138
+ Assert . That ( result2 . Headers . GetValues ( "RequestHeader2" ) . Last ( ) , Is . EqualTo ( "value3" ) ) ;
139
+ }
140
+
141
+ [ Test ]
142
+ public void cache_part_of_custom_headers ( )
143
+ {
144
+ var client = new HttpClient ( _server ) ;
145
+ var req = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Part_Of_Custom_Headers" ) ;
146
+ var result = client . SendAsync ( req ) . Result ;
147
+
148
+ var req2 = new HttpRequestMessage ( HttpMethod . Get , _url + "Cache_Part_Of_Custom_Headers" ) ;
149
+ var result2 = client . SendAsync ( req2 ) . Result ;
150
+
151
+ Assert . That ( result . Content . Headers . ContentDisposition . DispositionType , Is . EqualTo ( "attachment" ) ) ;
152
+ Assert . That ( result . Content . Headers . ContentEncoding . Count , Is . EqualTo ( 2 ) ) ;
153
+ Assert . That ( result . Content . Headers . ContentEncoding . First ( ) , Is . EqualTo ( "deflate" ) ) ;
154
+ Assert . That ( result . Content . Headers . ContentEncoding . Last ( ) , Is . EqualTo ( "gzip" ) ) ;
155
+ Assert . That ( result . Headers . GetValues ( "RequestHeader1" ) . First ( ) , Is . EqualTo ( "value1" ) ) ;
156
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . Count ( ) , Is . EqualTo ( 2 ) ) ;
157
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . First ( ) , Is . EqualTo ( "value2" ) ) ;
158
+ Assert . That ( result . Headers . GetValues ( "RequestHeader2" ) . Last ( ) , Is . EqualTo ( "value3" ) ) ;
159
+
160
+ Assert . That ( result2 . Content . Headers . ContentDisposition , Is . Null ) ;
161
+ Assert . That ( result2 . Content . Headers . ContentEncoding . Count , Is . EqualTo ( 2 ) ) ;
162
+ Assert . That ( result2 . Content . Headers . ContentEncoding . First ( ) , Is . EqualTo ( "deflate" ) ) ;
163
+ Assert . That ( result2 . Content . Headers . ContentEncoding . Last ( ) , Is . EqualTo ( "gzip" ) ) ;
164
+
165
+ IEnumerable < string > headerValue = null ;
166
+ Assert . That ( result2 . Headers . TryGetValues ( "RequestHeader1" , out headerValue ) , Is . False ) ;
167
+ Assert . That ( result2 . Headers . TryGetValues ( "RequestHeader2" , out headerValue ) , Is . False ) ;
168
+ }
169
+
170
+ [ TearDown ]
171
+ public void fixture_dispose ( )
172
+ {
173
+ if ( _server != null ) _server . Dispose ( ) ;
174
+ }
175
+ }
176
+ }
0 commit comments