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