HttpWebResponseTest.cs 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  1. //
  2. // HttpWebResponseTest.cs - NUnit Test Cases for System.Net.HttpWebResponse
  3. //
  4. // Authors:
  5. // Gert Driesen ([email protected])
  6. //
  7. // Copyright (c) 2008 Gert Driesen
  8. //
  9. using System;
  10. using System.Globalization;
  11. using System.IO;
  12. using System.Net;
  13. using System.Net.Sockets;
  14. using System.Text;
  15. using MonoTests.Helpers;
  16. using NUnit.Framework;
  17. namespace MonoTests.System.Net
  18. {
  19. [TestFixture]
  20. public class HttpWebResponseTest
  21. {
  22. [Test]
  23. public void CharacterSet_Disposed ()
  24. {
  25. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  26. string url = "http://" + ep.ToString () + "/test/";
  27. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  28. responder.Start ();
  29. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  30. req.Method = "GET";
  31. req.Timeout = 2000;
  32. req.ReadWriteTimeout = 2000;
  33. req.KeepAlive = false;
  34. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  35. ((IDisposable) resp).Dispose ();
  36. try {
  37. string charset = resp.CharacterSet;
  38. Assert.Fail ("#1:" + charset);
  39. } catch (ObjectDisposedException ex) {
  40. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  41. Assert.IsNull (ex.InnerException, "#3");
  42. Assert.IsNotNull (ex.Message, "#4");
  43. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  44. }
  45. }
  46. }
  47. [Test]
  48. public void Close_Disposed ()
  49. {
  50. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  51. string url = "http://" + ep.ToString () + "/test/";
  52. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  53. responder.Start ();
  54. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  55. req.Method = "GET";
  56. req.Timeout = 2000;
  57. req.ReadWriteTimeout = 2000;
  58. req.KeepAlive = false;
  59. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  60. ((IDisposable) resp).Dispose ();
  61. resp.Close ();
  62. }
  63. }
  64. [Test]
  65. public void ContentEncoding_Disposed ()
  66. {
  67. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  68. string url = "http://" + ep.ToString () + "/test/";
  69. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  70. responder.Start ();
  71. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  72. req.Method = "GET";
  73. req.Timeout = 2000;
  74. req.ReadWriteTimeout = 2000;
  75. req.KeepAlive = false;
  76. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  77. ((IDisposable) resp).Dispose ();
  78. try {
  79. string enc = resp.ContentEncoding;
  80. Assert.Fail ("#1:" + enc);
  81. } catch (ObjectDisposedException ex) {
  82. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  83. Assert.IsNull (ex.InnerException, "#3");
  84. Assert.IsNotNull (ex.Message, "#4");
  85. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  86. }
  87. }
  88. }
  89. [Test]
  90. public void ContentLength_Disposed ()
  91. {
  92. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  93. string url = "http://" + ep.ToString () + "/test/";
  94. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  95. responder.Start ();
  96. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  97. req.Method = "GET";
  98. req.Timeout = 2000;
  99. req.ReadWriteTimeout = 2000;
  100. req.KeepAlive = false;
  101. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  102. ((IDisposable) resp).Dispose ();
  103. Assert.AreEqual (9, resp.ContentLength);
  104. }
  105. }
  106. [Test]
  107. public void ContentType_Disposed ()
  108. {
  109. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  110. string url = "http://" + ep.ToString () + "/test/";
  111. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  112. responder.Start ();
  113. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  114. req.Method = "GET";
  115. req.Timeout = 2000;
  116. req.ReadWriteTimeout = 2000;
  117. req.KeepAlive = false;
  118. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  119. ((IDisposable) resp).Dispose ();
  120. try {
  121. string contentType = resp.ContentType;
  122. Assert.Fail ("#1:" + contentType);
  123. } catch (ObjectDisposedException ex) {
  124. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  125. Assert.IsNull (ex.InnerException, "#3");
  126. Assert.IsNotNull (ex.Message, "#4");
  127. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  128. }
  129. }
  130. }
  131. [Test]
  132. public void Cookies_Disposed ()
  133. {
  134. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  135. string url = "http://" + ep.ToString () + "/test/";
  136. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  137. responder.Start ();
  138. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  139. req.Method = "GET";
  140. req.Timeout = 2000;
  141. req.ReadWriteTimeout = 2000;
  142. req.KeepAlive = false;
  143. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  144. ((IDisposable) resp).Dispose ();
  145. try {
  146. CookieCollection cookies = resp.Cookies;
  147. Assert.Fail ("#A1:" + cookies);
  148. } catch (ObjectDisposedException ex) {
  149. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
  150. Assert.IsNull (ex.InnerException, "#A3");
  151. Assert.IsNotNull (ex.Message, "#A4");
  152. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
  153. }
  154. try {
  155. resp.Cookies = new CookieCollection ();
  156. Assert.Fail ("#B1");
  157. } catch (ObjectDisposedException ex) {
  158. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
  159. Assert.IsNull (ex.InnerException, "#B3");
  160. Assert.IsNotNull (ex.Message, "#B4");
  161. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
  162. }
  163. }
  164. }
  165. [Test]
  166. public void GetResponseHeader_Disposed ()
  167. {
  168. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  169. string url = "http://" + ep.ToString () + "/test/";
  170. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  171. responder.Start ();
  172. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  173. req.Method = "GET";
  174. req.Timeout = 2000;
  175. req.ReadWriteTimeout = 2000;
  176. req.KeepAlive = false;
  177. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  178. ((IDisposable) resp).Dispose ();
  179. try {
  180. string server = resp.GetResponseHeader ("Server");
  181. Assert.Fail ("#1:" + server);
  182. } catch (ObjectDisposedException ex) {
  183. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  184. Assert.IsNull (ex.InnerException, "#3");
  185. Assert.IsNotNull (ex.Message, "#4");
  186. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  187. }
  188. }
  189. }
  190. [Test]
  191. public void GetResponseStream_Disposed ()
  192. {
  193. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  194. string url = "http://" + ep.ToString () + "/test/";
  195. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  196. responder.Start ();
  197. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  198. req.Method = "GET";
  199. req.Timeout = 2000;
  200. req.ReadWriteTimeout = 2000;
  201. req.KeepAlive = false;
  202. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  203. ((IDisposable) resp).Dispose ();
  204. try {
  205. Stream s = resp.GetResponseStream ();
  206. Assert.Fail ("#1:" + s);
  207. } catch (ObjectDisposedException ex) {
  208. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  209. Assert.IsNull (ex.InnerException, "#3");
  210. Assert.IsNotNull (ex.Message, "#4");
  211. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  212. }
  213. }
  214. }
  215. [Test]
  216. public void Headers_Disposed ()
  217. {
  218. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  219. string url = "http://" + ep.ToString () + "/test/";
  220. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  221. responder.Start ();
  222. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  223. req.Method = "GET";
  224. req.Timeout = 2000;
  225. req.ReadWriteTimeout = 2000;
  226. req.KeepAlive = false;
  227. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  228. ((IDisposable) resp).Dispose ();
  229. WebHeaderCollection headers = resp.Headers;
  230. Assert.AreEqual (6, headers.Count, "#1");
  231. Assert.AreEqual ("9", headers ["Content-Length"], "#2");
  232. Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
  233. Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
  234. Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
  235. Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
  236. Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
  237. }
  238. }
  239. [Test]
  240. public void LastModified_Disposed ()
  241. {
  242. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  243. string url = "http://" + ep.ToString () + "/test/";
  244. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  245. responder.Start ();
  246. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  247. req.Method = "GET";
  248. req.Timeout = 2000;
  249. req.ReadWriteTimeout = 2000;
  250. req.KeepAlive = false;
  251. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  252. ((IDisposable) resp).Dispose ();
  253. try {
  254. DateTime lastMod = resp.LastModified;
  255. Assert.Fail ("#1:" + lastMod);
  256. } catch (ObjectDisposedException ex) {
  257. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  258. Assert.IsNull (ex.InnerException, "#3");
  259. Assert.IsNotNull (ex.Message, "#4");
  260. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  261. }
  262. }
  263. }
  264. [Test]
  265. public void Method_Disposed ()
  266. {
  267. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  268. string url = "http://" + ep.ToString () + "/test/";
  269. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  270. responder.Start ();
  271. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  272. req.Method = "GET";
  273. req.Timeout = 2000;
  274. req.ReadWriteTimeout = 2000;
  275. req.KeepAlive = false;
  276. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  277. ((IDisposable) resp).Dispose ();
  278. try {
  279. string method = resp.Method;
  280. Assert.Fail ("#1:" + method);
  281. } catch (ObjectDisposedException ex) {
  282. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  283. Assert.IsNull (ex.InnerException, "#3");
  284. Assert.IsNotNull (ex.Message, "#4");
  285. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  286. }
  287. }
  288. }
  289. [Test]
  290. public void ProtocolVersion_Disposed ()
  291. {
  292. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  293. string url = "http://" + ep.ToString () + "/test/";
  294. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  295. responder.Start ();
  296. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  297. req.Method = "GET";
  298. req.Timeout = 2000;
  299. req.ReadWriteTimeout = 2000;
  300. req.KeepAlive = false;
  301. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  302. ((IDisposable) resp).Dispose ();
  303. try {
  304. Version protocolVersion = resp.ProtocolVersion;
  305. Assert.Fail ("#1:" + protocolVersion);
  306. } catch (ObjectDisposedException ex) {
  307. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  308. Assert.IsNull (ex.InnerException, "#3");
  309. Assert.IsNotNull (ex.Message, "#4");
  310. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  311. }
  312. }
  313. }
  314. [Test]
  315. public void ResponseUri_Disposed ()
  316. {
  317. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  318. string url = "http://" + ep.ToString () + "/test/";
  319. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  320. responder.Start ();
  321. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  322. req.Method = "GET";
  323. req.Timeout = 2000;
  324. req.ReadWriteTimeout = 2000;
  325. req.KeepAlive = false;
  326. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  327. ((IDisposable) resp).Dispose ();
  328. try {
  329. Uri respUri = resp.ResponseUri;
  330. Assert.Fail ("#1:" + respUri);
  331. } catch (ObjectDisposedException ex) {
  332. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  333. Assert.IsNull (ex.InnerException, "#3");
  334. Assert.IsNotNull (ex.Message, "#4");
  335. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  336. }
  337. }
  338. }
  339. [Test]
  340. public void Server_Disposed ()
  341. {
  342. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  343. string url = "http://" + ep.ToString () + "/test/";
  344. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  345. responder.Start ();
  346. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  347. req.Method = "GET";
  348. req.Timeout = 2000;
  349. req.ReadWriteTimeout = 2000;
  350. req.KeepAlive = false;
  351. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  352. ((IDisposable) resp).Dispose ();
  353. try {
  354. string server = resp.Server;
  355. Assert.Fail ("#1:" + server);
  356. } catch (ObjectDisposedException ex) {
  357. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  358. Assert.IsNull (ex.InnerException, "#3");
  359. Assert.IsNotNull (ex.Message, "#4");
  360. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  361. }
  362. }
  363. }
  364. [Test]
  365. public void StatusCode_Disposed ()
  366. {
  367. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  368. string url = "http://" + ep.ToString () + "/test/";
  369. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  370. responder.Start ();
  371. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  372. req.Method = "GET";
  373. req.Timeout = 2000;
  374. req.ReadWriteTimeout = 2000;
  375. req.KeepAlive = false;
  376. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  377. ((IDisposable) resp).Dispose ();
  378. Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
  379. }
  380. }
  381. [Test]
  382. public void StatusDescription_Disposed ()
  383. {
  384. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  385. string url = "http://" + ep.ToString () + "/test/";
  386. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
  387. responder.Start ();
  388. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  389. req.Method = "GET";
  390. req.Timeout = 2000;
  391. req.ReadWriteTimeout = 2000;
  392. req.KeepAlive = false;
  393. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
  394. ((IDisposable) resp).Dispose ();
  395. try {
  396. string statusDesc = resp.StatusDescription;
  397. Assert.Fail ("#1:" + statusDesc);
  398. } catch (ObjectDisposedException ex) {
  399. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  400. Assert.IsNull (ex.InnerException, "#3");
  401. Assert.IsNotNull (ex.Message, "#4");
  402. Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
  403. }
  404. }
  405. }
  406. internal static byte [] FullResponseHandler (Socket socket)
  407. {
  408. StringWriter sw = new StringWriter ();
  409. sw.NewLine = "\r\n";
  410. sw.WriteLine ("HTTP/1.0 200 OK");
  411. sw.WriteLine ("Server: Mono/Test");
  412. sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
  413. sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
  414. sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
  415. sw.WriteLine ("Content-Length: 9");
  416. sw.WriteLine ("Set-Cookie: UserID=Miguel");
  417. sw.WriteLine ("Set-Cookie: StoreProfile=true");
  418. sw.WriteLine ();
  419. sw.Write ("<dummy />");
  420. sw.Flush ();
  421. return Encoding.UTF8.GetBytes (sw.ToString ());
  422. }
  423. }
  424. [TestFixture]
  425. public class HttpResponseStreamTest
  426. {
  427. [Test]
  428. public void BeginRead_Buffer_Null ()
  429. {
  430. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  431. string url = "http://" + ep.ToString () + "/test/";
  432. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  433. responder.Start ();
  434. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  435. req.Method = "GET";
  436. req.Timeout = 2000;
  437. req.ReadWriteTimeout = 2000;
  438. req.KeepAlive = false;
  439. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  440. Stream rs = resp.GetResponseStream ();
  441. byte [] buffer = null;
  442. try {
  443. try {
  444. rs.BeginRead (buffer, 0, 0, null, null);
  445. Assert.Fail ("#A1");
  446. } catch (ArgumentNullException ex) {
  447. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
  448. Assert.IsNull (ex.InnerException, "#A3");
  449. Assert.IsNotNull (ex.Message, "#A4");
  450. Assert.AreEqual ("buffer", ex.ParamName, "#A5");
  451. }
  452. // read full response
  453. buffer = new byte [24];
  454. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  455. buffer = null;
  456. try {
  457. rs.BeginRead (buffer, 0, 0, null, null);
  458. Assert.Fail ("#B1");
  459. } catch (ArgumentNullException ex) {
  460. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
  461. Assert.IsNull (ex.InnerException, "#B3");
  462. Assert.IsNotNull (ex.Message, "#B4");
  463. Assert.AreEqual ("buffer", ex.ParamName, "#B5");
  464. }
  465. } finally {
  466. rs.Close ();
  467. req.Abort ();
  468. }
  469. }
  470. }
  471. }
  472. [Test]
  473. public void BeginWrite ()
  474. {
  475. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  476. string url = "http://" + ep.ToString () + "/test/";
  477. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  478. responder.Start ();
  479. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  480. req.Method = "GET";
  481. req.Timeout = 2000;
  482. req.ReadWriteTimeout = 2000;
  483. req.KeepAlive = false;
  484. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  485. Stream rs = resp.GetResponseStream ();
  486. byte [] buffer = new byte [5];
  487. try {
  488. rs.BeginWrite (buffer, 0, buffer.Length, null, null);
  489. Assert.Fail ("#1");
  490. } catch (NotSupportedException ex) {
  491. // The stream does not support writing
  492. Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
  493. Assert.IsNull (ex.InnerException, "#3");
  494. Assert.IsNotNull (ex.Message, "#4");
  495. } finally {
  496. rs.Close ();
  497. req.Abort ();
  498. }
  499. }
  500. }
  501. }
  502. [Test]
  503. [Category ("NotWorking")]
  504. public void CanRead ()
  505. {
  506. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  507. string url = "http://" + ep.ToString () + "/test/";
  508. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  509. responder.Start ();
  510. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  511. req.Method = "GET";
  512. req.Timeout = 2000;
  513. req.ReadWriteTimeout = 2000;
  514. req.KeepAlive = false;
  515. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  516. Stream rs = resp.GetResponseStream ();
  517. try {
  518. Assert.IsTrue (rs.CanRead, "#1");
  519. rs.Close ();
  520. Assert.IsFalse (rs.CanRead, "#2");
  521. } finally {
  522. rs.Close ();
  523. req.Abort ();
  524. }
  525. }
  526. }
  527. }
  528. [Test]
  529. public void CanSeek ()
  530. {
  531. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  532. string url = "http://" + ep.ToString () + "/test/";
  533. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  534. responder.Start ();
  535. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  536. req.Method = "GET";
  537. req.Timeout = 2000;
  538. req.ReadWriteTimeout = 2000;
  539. req.KeepAlive = false;
  540. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  541. Stream rs = resp.GetResponseStream ();
  542. try {
  543. Assert.IsFalse (rs.CanSeek, "#1");
  544. rs.Close ();
  545. Assert.IsFalse (rs.CanSeek, "#2");
  546. } finally {
  547. rs.Close ();
  548. req.Abort ();
  549. }
  550. }
  551. }
  552. }
  553. [Test] // bug #324182
  554. public void CanTimeout ()
  555. {
  556. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  557. string url = "http://" + ep.ToString () + "/test/";
  558. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  559. responder.Start ();
  560. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  561. req.Method = "GET";
  562. req.Timeout = 2000;
  563. req.ReadWriteTimeout = 2000;
  564. req.KeepAlive = false;
  565. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  566. Stream rs = resp.GetResponseStream ();
  567. try {
  568. Assert.IsTrue (rs.CanTimeout, "#1");
  569. rs.Close ();
  570. Assert.IsTrue (rs.CanTimeout, "#2");
  571. } finally {
  572. rs.Close ();
  573. req.Abort ();
  574. }
  575. }
  576. }
  577. }
  578. [Test]
  579. public void CanWrite ()
  580. {
  581. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  582. string url = "http://" + ep.ToString () + "/test/";
  583. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  584. responder.Start ();
  585. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  586. req.Method = "GET";
  587. req.Timeout = 2000;
  588. req.ReadWriteTimeout = 2000;
  589. req.KeepAlive = false;
  590. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  591. Stream rs = resp.GetResponseStream ();
  592. try {
  593. Assert.IsFalse (rs.CanWrite, "#1");
  594. rs.Close ();
  595. Assert.IsFalse (rs.CanWrite, "#2");
  596. } finally {
  597. rs.Close ();
  598. req.Abort ();
  599. }
  600. }
  601. }
  602. }
  603. [Test]
  604. public void Read ()
  605. {
  606. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  607. string url = "http://" + ep.ToString () + "/test/";
  608. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  609. responder.Start ();
  610. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  611. req.Method = "GET";
  612. req.Timeout = 2000;
  613. req.ReadWriteTimeout = 2000;
  614. req.KeepAlive = false;
  615. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  616. Stream rs = resp.GetResponseStream ();
  617. byte [] buffer = new byte [5];
  618. try {
  619. Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
  620. Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
  621. Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
  622. Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
  623. Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
  624. Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
  625. Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
  626. Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
  627. Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
  628. Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
  629. Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
  630. Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
  631. } finally {
  632. rs.Close ();
  633. req.Abort ();
  634. }
  635. }
  636. }
  637. }
  638. [Test]
  639. public void Read_Buffer_Null ()
  640. {
  641. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  642. string url = "http://" + ep.ToString () + "/test/";
  643. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  644. responder.Start ();
  645. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  646. req.Method = "GET";
  647. req.Timeout = 2000;
  648. req.ReadWriteTimeout = 2000;
  649. req.KeepAlive = false;
  650. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  651. Stream rs = resp.GetResponseStream ();
  652. byte [] buffer = null;
  653. try {
  654. try {
  655. rs.Read (buffer, 0, 0);
  656. Assert.Fail ("#A1");
  657. } catch (ArgumentNullException ex) {
  658. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
  659. Assert.IsNull (ex.InnerException, "#A3");
  660. Assert.IsNotNull (ex.Message, "#A4");
  661. Assert.AreEqual ("buffer", ex.ParamName, "#A5");
  662. }
  663. // read full response
  664. buffer = new byte [24];
  665. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  666. buffer = null;
  667. try {
  668. rs.Read (buffer, 0, 0);
  669. Assert.Fail ("#B1");
  670. } catch (ArgumentNullException ex) {
  671. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
  672. Assert.IsNull (ex.InnerException, "#B3");
  673. Assert.IsNotNull (ex.Message, "#B4");
  674. Assert.AreEqual ("buffer", ex.ParamName, "#B5");
  675. }
  676. } finally {
  677. rs.Close ();
  678. req.Abort ();
  679. }
  680. }
  681. }
  682. }
  683. [Test]
  684. public void Read_Count_Negative ()
  685. {
  686. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  687. string url = "http://" + ep.ToString () + "/test/";
  688. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  689. responder.Start ();
  690. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  691. req.Method = "GET";
  692. req.Timeout = 2000;
  693. req.ReadWriteTimeout = 2000;
  694. req.KeepAlive = false;
  695. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  696. Stream rs = resp.GetResponseStream ();
  697. byte [] buffer = new byte [5];
  698. try {
  699. try {
  700. rs.Read (buffer, 1, -1);
  701. Assert.Fail ("#A1");
  702. } catch (ArgumentOutOfRangeException ex) {
  703. // Specified argument was out of the range of valid values
  704. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  705. Assert.IsNull (ex.InnerException, "#A3");
  706. Assert.IsNotNull (ex.Message, "#A4");
  707. Assert.AreEqual ("size", ex.ParamName, "#A5");
  708. }
  709. // read full response
  710. buffer = new byte [24];
  711. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  712. try {
  713. rs.Read (buffer, 1, -1);
  714. Assert.Fail ("#B1");
  715. } catch (ArgumentOutOfRangeException ex) {
  716. // Specified argument was out of the range of valid values
  717. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  718. Assert.IsNull (ex.InnerException, "#B3");
  719. Assert.IsNotNull (ex.Message, "#B4");
  720. Assert.AreEqual ("size", ex.ParamName, "#B5");
  721. }
  722. } finally {
  723. rs.Close ();
  724. req.Abort ();
  725. }
  726. }
  727. }
  728. }
  729. [Test]
  730. public void Read_Count_Overflow ()
  731. {
  732. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  733. string url = "http://" + ep.ToString () + "/test/";
  734. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  735. responder.Start ();
  736. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  737. req.Method = "GET";
  738. req.Timeout = 2000;
  739. req.ReadWriteTimeout = 2000;
  740. req.KeepAlive = false;
  741. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  742. Stream rs = resp.GetResponseStream ();
  743. byte [] buffer = new byte [5];
  744. try {
  745. try {
  746. rs.Read (buffer, buffer.Length - 2, 3);
  747. Assert.Fail ("#A1");
  748. } catch (ArgumentOutOfRangeException ex) {
  749. // Specified argument was out of the range of valid values
  750. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  751. Assert.IsNull (ex.InnerException, "#A3");
  752. Assert.IsNotNull (ex.Message, "#A4");
  753. Assert.AreEqual ("size", ex.ParamName, "#A5");
  754. }
  755. // read full response
  756. buffer = new byte [24];
  757. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  758. try {
  759. rs.Read (buffer, buffer.Length - 2, 3);
  760. Assert.Fail ("#B1");
  761. } catch (ArgumentOutOfRangeException ex) {
  762. // Specified argument was out of the range of valid values
  763. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  764. Assert.IsNull (ex.InnerException, "#B3");
  765. Assert.IsNotNull (ex.Message, "#B4");
  766. Assert.AreEqual ("size", ex.ParamName, "#B5");
  767. }
  768. } finally {
  769. rs.Close ();
  770. req.Abort ();
  771. }
  772. }
  773. }
  774. }
  775. [Test]
  776. public void Read_Offset_Negative ()
  777. {
  778. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  779. string url = "http://" + ep.ToString () + "/test/";
  780. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  781. responder.Start ();
  782. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  783. req.Method = "GET";
  784. req.Timeout = 2000;
  785. req.ReadWriteTimeout = 2000;
  786. req.KeepAlive = false;
  787. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  788. Stream rs = resp.GetResponseStream ();
  789. byte [] buffer = new byte [5];
  790. try {
  791. try {
  792. rs.Read (buffer, -1, 0);
  793. Assert.Fail ("#A1");
  794. } catch (ArgumentOutOfRangeException ex) {
  795. // Specified argument was out of the range of valid values
  796. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  797. Assert.IsNull (ex.InnerException, "#A3");
  798. Assert.IsNotNull (ex.Message, "#A4");
  799. Assert.AreEqual ("offset", ex.ParamName, "#A5");
  800. }
  801. // read full response
  802. buffer = new byte [24];
  803. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  804. try {
  805. rs.Read (buffer, -1, 0);
  806. Assert.Fail ("#B1");
  807. } catch (ArgumentOutOfRangeException ex) {
  808. // Specified argument was out of the range of valid values
  809. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  810. Assert.IsNull (ex.InnerException, "#B3");
  811. Assert.IsNotNull (ex.Message, "#B4");
  812. Assert.AreEqual ("offset", ex.ParamName, "#B5");
  813. }
  814. } finally {
  815. rs.Close ();
  816. req.Abort ();
  817. }
  818. }
  819. }
  820. }
  821. [Test]
  822. public void Read_Offset_Overflow ()
  823. {
  824. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  825. string url = "http://" + ep.ToString () + "/test/";
  826. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  827. responder.Start ();
  828. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  829. req.Method = "GET";
  830. req.Timeout = 2000;
  831. req.ReadWriteTimeout = 2000;
  832. req.KeepAlive = false;
  833. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  834. Stream rs = resp.GetResponseStream ();
  835. byte [] buffer = new byte [5];
  836. try {
  837. try {
  838. rs.Read (buffer, buffer.Length + 1, 0);
  839. Assert.Fail ("#A1");
  840. } catch (ArgumentOutOfRangeException ex) {
  841. // Specified argument was out of the range of valid values
  842. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
  843. Assert.IsNull (ex.InnerException, "#A3");
  844. Assert.IsNotNull (ex.Message, "#A4");
  845. Assert.AreEqual ("offset", ex.ParamName, "#A5");
  846. }
  847. // read full response
  848. buffer = new byte [24];
  849. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  850. try {
  851. rs.Read (buffer, buffer.Length + 1, 0);
  852. Assert.Fail ("#B1");
  853. } catch (ArgumentOutOfRangeException ex) {
  854. // Specified argument was out of the range of valid values
  855. Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
  856. Assert.IsNull (ex.InnerException, "#B3");
  857. Assert.IsNotNull (ex.Message, "#B4");
  858. Assert.AreEqual ("offset", ex.ParamName, "#B5");
  859. }
  860. } finally {
  861. rs.Close ();
  862. req.Abort ();
  863. }
  864. }
  865. }
  866. }
  867. [Test]
  868. [Category ("NotWorking")]
  869. public void Read_Stream_Closed ()
  870. {
  871. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  872. string url = "http://" + ep.ToString () + "/test/";
  873. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  874. responder.Start ();
  875. HttpWebRequest req;
  876. req = (HttpWebRequest) WebRequest.Create (url);
  877. req.Method = "GET";
  878. req.Timeout = 2000;
  879. req.ReadWriteTimeout = 2000;
  880. req.KeepAlive = false;
  881. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  882. Stream rs = resp.GetResponseStream ();
  883. rs.Close ();
  884. try {
  885. rs.Read (new byte [0], 0, 0);
  886. Assert.Fail ("#A1");
  887. } catch (WebException ex) {
  888. // The request was aborted: The connection was closed unexpectedly
  889. Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
  890. Assert.IsNull (ex.InnerException, "#A3");
  891. Assert.IsNotNull (ex.Message, "#A4");
  892. Assert.IsNull (ex.Response, "#A5");
  893. Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
  894. } finally {
  895. rs.Close ();
  896. req.Abort ();
  897. }
  898. }
  899. req = (HttpWebRequest) WebRequest.Create (url);
  900. req.Method = "GET";
  901. req.Timeout = 2000;
  902. req.ReadWriteTimeout = 2000;
  903. req.KeepAlive = false;
  904. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  905. Stream rs = resp.GetResponseStream ();
  906. byte [] buffer = new byte [24];
  907. Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
  908. rs.Close ();
  909. try {
  910. rs.Read (new byte [0], 0, 0);
  911. Assert.Fail ("#B1");
  912. } catch (WebException ex) {
  913. // The request was aborted: The connection was closed unexpectedly
  914. Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
  915. Assert.IsNull (ex.InnerException, "#B3");
  916. Assert.IsNotNull (ex.Message, "#B4");
  917. Assert.IsNull (ex.Response, "#B5");
  918. Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
  919. } finally {
  920. rs.Close ();
  921. req.Abort ();
  922. }
  923. }
  924. }
  925. }
  926. [Test]
  927. public void ReadTimeout ()
  928. {
  929. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  930. string url = "http://" + ep.ToString () + "/test/";
  931. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  932. responder.Start ();
  933. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  934. req.Method = "GET";
  935. req.Timeout = 2000;
  936. req.ReadWriteTimeout = 2000;
  937. req.KeepAlive = false;
  938. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  939. Stream rs = resp.GetResponseStream ();
  940. try {
  941. Assert.AreEqual (2000, rs.ReadTimeout, "#1");
  942. rs.Close ();
  943. Assert.AreEqual (2000, rs.ReadTimeout, "#2");
  944. } finally {
  945. rs.Close ();
  946. req.Abort ();
  947. }
  948. }
  949. }
  950. }
  951. [Test]
  952. public void Write ()
  953. {
  954. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  955. string url = "http://" + ep.ToString () + "/test/";
  956. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  957. responder.Start ();
  958. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  959. req.Method = "GET";
  960. req.Timeout = 2000;
  961. req.ReadWriteTimeout = 2000;
  962. req.KeepAlive = false;
  963. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  964. Stream rs = resp.GetResponseStream ();
  965. byte [] buffer = new byte [5];
  966. try {
  967. rs.Write (buffer, 0, buffer.Length);
  968. Assert.Fail ("#1");
  969. } catch (NotSupportedException ex) {
  970. // The stream does not support writing
  971. Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
  972. Assert.IsNull (ex.InnerException, "#3");
  973. Assert.IsNotNull (ex.Message, "#4");
  974. } finally {
  975. rs.Close ();
  976. req.Abort ();
  977. }
  978. }
  979. }
  980. }
  981. [Test]
  982. public void WriteTimeout ()
  983. {
  984. IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
  985. string url = "http://" + ep.ToString () + "/test/";
  986. using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
  987. responder.Start ();
  988. HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
  989. req.Method = "GET";
  990. req.Timeout = 2000;
  991. req.ReadWriteTimeout = 2000;
  992. req.KeepAlive = false;
  993. using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
  994. Stream rs = resp.GetResponseStream ();
  995. try {
  996. Assert.AreEqual (2000, rs.WriteTimeout, "#1");
  997. rs.Close ();
  998. Assert.AreEqual (2000, rs.WriteTimeout, "#2");
  999. } finally {
  1000. rs.Close ();
  1001. req.Abort ();
  1002. }
  1003. }
  1004. }
  1005. }
  1006. }
  1007. }