HttpWebResponseTest.cs 35 KB

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