CookieContainerTest.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. //
  2. // System.Net.CookieContainerTest - CookieContainer tests
  3. //
  4. // Authors:
  5. // Gonzalo Paniagua Javier ([email protected])
  6. // Daniel Nauck (dna(at)mono-project(dot)de)
  7. //
  8. // (c) Copyright 2004 Novell, Inc. (http://www.novell.com)
  9. //
  10. using System;
  11. using System.Net;
  12. using System.Reflection;
  13. using NUnit.Framework;
  14. namespace MonoTests.System.Net
  15. {
  16. [TestFixture]
  17. public class CookieContainerTest
  18. {
  19. [Test]
  20. public void TestCtor1 ()
  21. {
  22. CookieContainer c = new CookieContainer (234);
  23. Assert.AreEqual (234, c.Capacity, "#1");
  24. try {
  25. new CookieContainer (0);
  26. Assert.Fail ("#2");
  27. } catch (ArgumentException) {
  28. }
  29. try {
  30. new CookieContainer (-10);
  31. Assert.Fail ("#3");
  32. } catch (ArgumentException) {
  33. }
  34. }
  35. [Test]
  36. public void TestCtor3 ()
  37. {
  38. CookieContainer c = new CookieContainer (100, 50, 1000);
  39. Assert.AreEqual (100, c.Capacity, "#1");
  40. Assert.AreEqual (50, c.PerDomainCapacity, "#2");
  41. Assert.AreEqual (1000, c.MaxCookieSize, "#3");
  42. try {
  43. new CookieContainer (100, 0, 1000);
  44. Assert.Fail ("#4");
  45. } catch (ArgumentException) {
  46. }
  47. try {
  48. new CookieContainer (100, -1, 1000);
  49. Assert.Fail ("#5");
  50. } catch (ArgumentException) {
  51. }
  52. c = new CookieContainer (100, int.MaxValue, 1000);
  53. Assert.AreEqual (int.MaxValue, c.PerDomainCapacity, "#6");
  54. try {
  55. new CookieContainer (100, 50, 0);
  56. Assert.Fail ("#7");
  57. } catch (ArgumentException) {
  58. }
  59. try {
  60. new CookieContainer (100, 500, -4);
  61. Assert.Fail ("#8");
  62. } catch (ArgumentException) {
  63. }
  64. }
  65. [Test]
  66. public void TestDefaultLimits ()
  67. {
  68. Assert.AreEqual (4096, CookieContainer.DefaultCookieLengthLimit, "#1");
  69. Assert.AreEqual (300, CookieContainer.DefaultCookieLimit, "#2");
  70. Assert.AreEqual (20, CookieContainer.DefaultPerDomainCookieLimit, "#3");
  71. }
  72. [Test]
  73. public void TestCapacity ()
  74. {
  75. CookieContainer c = new CookieContainer ();
  76. Assert.AreEqual (300, c.Capacity, "#1");
  77. c.Capacity = 200;
  78. Assert.AreEqual (200, c.Capacity, "#2");
  79. try {
  80. c.Capacity = -5;
  81. Assert.Fail ("#3");
  82. } catch (ArgumentOutOfRangeException) {
  83. }
  84. try {
  85. c.Capacity = 5; // must be >= PerDomainCapacity if PerDomainCapacity != Int32.MaxValue
  86. Assert.Fail ("#4");
  87. } catch (ArgumentOutOfRangeException) {
  88. }
  89. }
  90. [Test]
  91. public void TestMaxCookieSize ()
  92. {
  93. CookieContainer c = new CookieContainer ();
  94. Assert.AreEqual (4096, c.MaxCookieSize, "#1");
  95. try {
  96. c.MaxCookieSize = -5;
  97. Assert.Fail ("#2");
  98. } catch (ArgumentOutOfRangeException) {
  99. }
  100. try {
  101. c.MaxCookieSize = -1;
  102. Assert.Fail ("#3");
  103. } catch (ArgumentOutOfRangeException) {
  104. }
  105. c.MaxCookieSize = 80000;
  106. Assert.AreEqual (80000, c.MaxCookieSize, "#4");
  107. c.MaxCookieSize = int.MaxValue;
  108. Assert.AreEqual (int.MaxValue, c.MaxCookieSize, "#5");
  109. }
  110. [Test]
  111. public void TestAdd_Args ()
  112. {
  113. CookieContainer cc = new CookieContainer ();
  114. try {
  115. cc.Add ((Cookie) null);
  116. Assert.Fail ("#1");
  117. } catch (ArgumentNullException) {
  118. }
  119. try {
  120. cc.Add ((CookieCollection) null);
  121. Assert.Fail ("#2");
  122. } catch (ArgumentNullException) {
  123. }
  124. try {
  125. cc.Add (null, (Cookie) null);
  126. Assert.Fail ("#3");
  127. } catch (ArgumentNullException) {
  128. }
  129. try {
  130. cc.Add (null, (CookieCollection) null);
  131. Assert.Fail ("#4");
  132. } catch (ArgumentNullException) {
  133. }
  134. try {
  135. cc.Add (new Uri ("http://www.contoso.com"), (Cookie) null);
  136. Assert.Fail ("#5");
  137. } catch (ArgumentNullException) {
  138. }
  139. try {
  140. cc.Add (new Uri ("http://www.contoso.com"), (CookieCollection) null);
  141. Assert.Fail ("#6");
  142. } catch (ArgumentNullException) {
  143. }
  144. }
  145. [Test]
  146. public void TestAdd_Cookie ()
  147. {
  148. CookieContainer cc = new CookieContainer ();
  149. Uri uri = new Uri ("http://www.contoso.com");
  150. cc.Add (uri, new CookieCollection ());
  151. DateTime timestamp = DateTime.Now;
  152. cc.Add (uri, new Cookie ("hola", "Adios"));
  153. CookieCollection coll = cc.GetCookies (uri);
  154. Cookie cookie = coll [0];
  155. Assert.AreEqual ("", cookie.Comment, "#1");
  156. Assert.IsNull (cookie.CommentUri, "#2");
  157. Assert.AreEqual ("www.contoso.com", cookie.Domain, "#3");
  158. Assert.IsFalse (cookie.Expired, "#4");
  159. Assert.AreEqual (DateTime.MinValue, cookie.Expires, "#5");
  160. Assert.AreEqual ("hola", cookie.Name, "#6");
  161. Assert.AreEqual ("/", cookie.Path, "#7");
  162. Assert.AreEqual ("", cookie.Port, "#8");
  163. Assert.IsFalse (cookie.Secure, "#9");
  164. // FIX the next test
  165. TimeSpan ts = cookie.TimeStamp - timestamp;
  166. if (ts.TotalMilliseconds > 500)
  167. Assert.Fail ("#10");
  168. Assert.AreEqual ("Adios", cookie.Value, "#11");
  169. Assert.AreEqual (0, cookie.Version, "#12");
  170. }
  171. [Test]
  172. [Category ("NotWorking")]
  173. public void TestAddExpired_Cookie ()
  174. {
  175. CookieContainer cc = new CookieContainer ();
  176. Uri uri = new Uri ("http://www.contoso.com");
  177. DateTime expires = DateTime.Now.Subtract (new TimeSpan (1, 30, 0));
  178. //expired cookie
  179. Cookie c1 = new Cookie ("TEST", "MyValue", "/", uri.Host);
  180. c1.Expires = expires;
  181. cc.Add (c1);
  182. Assert.AreEqual (1, cc.Count, "#A1");
  183. CookieCollection coll = cc.GetCookies (uri);
  184. Assert.AreEqual (1, coll.Count, "#A1.1");
  185. Cookie cookie = coll [0];
  186. Assert.AreEqual ("", cookie.Comment, "#A2");
  187. Assert.IsNull (cookie.CommentUri, "#A3");
  188. Assert.AreEqual ("www.contoso.com", cookie.Domain, "#A4");
  189. Assert.IsFalse (cookie.Expired, "#A5");
  190. Assert.AreEqual (DateTime.MinValue, cookie.Expires, "#A6");
  191. Assert.AreEqual ("TEST", cookie.Name, "#A7");
  192. Assert.AreEqual ("MyValue", cookie.Value, "#A8");
  193. Assert.AreEqual ("/", cookie.Path, "#A9");
  194. Assert.AreEqual ("", cookie.Port, "#A10");
  195. Assert.IsFalse (cookie.Secure, "#A11");
  196. //expired cookie
  197. Cookie c2 = new Cookie ("TEST2", "MyValue2");
  198. c2.Expires = expires;
  199. cc.Add (uri, c2);
  200. Assert.AreEqual (1, cc.Count, "#B1");
  201. coll = cc.GetCookies (uri);
  202. Assert.AreEqual (1, coll.Count, "#B1.1");
  203. cookie = coll [0];
  204. Assert.AreEqual ("", cookie.Comment, "#B2");
  205. Assert.IsNull (cookie.CommentUri, "#B3");
  206. Assert.AreEqual ("www.contoso.com", cookie.Domain, "#B4");
  207. Assert.IsFalse (cookie.Expired, "#B5");
  208. Assert.AreEqual (DateTime.MinValue, cookie.Expires, "#B6");
  209. Assert.AreEqual ("TEST", cookie.Name, "#B7");
  210. Assert.AreEqual ("MyValue", cookie.Value, "#B8");
  211. Assert.AreEqual ("/", cookie.Path, "#B9");
  212. Assert.AreEqual ("", cookie.Port, "#B10");
  213. Assert.IsFalse (cookie.Secure, "#B11");
  214. //not expired cookie
  215. Cookie c3 = new Cookie ("TEST3", "MyValue3");
  216. cc.Add (uri, c3);
  217. Assert.AreEqual (2, cc.Count, "#C1");
  218. coll = cc.GetCookies (uri);
  219. Assert.AreEqual (2, coll.Count, "#C1.1");
  220. cookie = coll [1];
  221. Assert.AreEqual ("", cookie.Comment, "#C2");
  222. Assert.IsNull (cookie.CommentUri, "#C3");
  223. Assert.AreEqual ("www.contoso.com", cookie.Domain, "#C4");
  224. Assert.IsFalse (cookie.Expired, "#C5");
  225. Assert.AreEqual (DateTime.MinValue, cookie.Expires, "#C6");
  226. Assert.AreEqual ("TEST3", cookie.Name, "#C7");
  227. Assert.AreEqual ("MyValue3", cookie.Value, "#C8");
  228. Assert.AreEqual ("/", cookie.Path, "#C9");
  229. Assert.AreEqual ("", cookie.Port, "#C10");
  230. Assert.IsFalse (cookie.Secure, "#C11");
  231. Assert.AreEqual (2, cc.Count, "#D1");
  232. coll = cc.GetCookies (new Uri("http://contoso.com"));
  233. Assert.AreEqual (0, coll.Count, "#D1.1");
  234. //not expired cookie
  235. Cookie c4 = new Cookie ("TEST4", "MyValue4", "/", ".contoso.com");
  236. cc.Add (uri, c4);
  237. Assert.AreEqual (3, cc.Count, "#E1");
  238. coll = cc.GetCookies (uri);
  239. Assert.AreEqual (3, coll.Count, "#E1.1");
  240. //expired cookie
  241. Cookie c5 = new Cookie ("TEST5", "MyValue5", "/", ".contoso.com");
  242. c5.Expires = expires;
  243. cc.Add (c5);
  244. Assert.AreEqual (4, cc.Count, "#F1");
  245. coll = cc.GetCookies (uri);
  246. Assert.AreEqual (4, coll.Count, "#F1.1");
  247. cookie = coll ["TEST5"];
  248. Assert.AreEqual (".contoso.com", cookie.Domain, "#F2");
  249. Assert.IsFalse (cookie.Expired, "#F3");
  250. Assert.AreEqual (DateTime.MinValue, cookie.Expires, "#F4");
  251. Assert.AreEqual ("TEST5", cookie.Name, "#F5");
  252. Assert.AreEqual ("MyValue5", cookie.Value, "#F6");
  253. Assert.AreEqual ("/", cookie.Path, "#F7");
  254. //expired cookie
  255. Cookie c6 = new Cookie ("TEST6", "MyValue6", "/", ".contoso.com");
  256. c5.Expires = expires;
  257. cc.Add (uri, c6);
  258. Assert.AreEqual (5, cc.Count, "#G1");
  259. coll = cc.GetCookies (uri);
  260. Assert.AreEqual (5, coll.Count, "#G1.1");
  261. cookie = coll ["TEST6"];
  262. Assert.AreEqual (".contoso.com", cookie.Domain, "#G2");
  263. Assert.IsFalse (cookie.Expired, "#G3");
  264. Assert.AreEqual (DateTime.MinValue, cookie.Expires, "#G4");
  265. Assert.AreEqual ("TEST6", cookie.Name, "#G5");
  266. Assert.AreEqual ("MyValue6", cookie.Value, "#G6");
  267. Assert.AreEqual ("/", cookie.Path, "#G7");
  268. }
  269. [Test]
  270. public void TestGetCookies_Args ()
  271. {
  272. CookieContainer cc = new CookieContainer ();
  273. try {
  274. cc.GetCookies (null);
  275. Assert.Fail ("#1");
  276. } catch (ArgumentNullException) {
  277. }
  278. }
  279. [Test]
  280. public void TestSetCookies_Args ()
  281. {
  282. CookieContainer cc = new CookieContainer ();
  283. try {
  284. cc.SetCookies (null, "");
  285. Assert.Fail ("#1");
  286. } catch (ArgumentNullException) {
  287. }
  288. try {
  289. cc.SetCookies (new Uri ("http://www.contoso.com"), null);
  290. Assert.Fail ("#2");
  291. } catch (ArgumentNullException) {
  292. }
  293. try {
  294. cc.SetCookies (new Uri ("http://www.contoso.com"), "=lalala");
  295. Assert.Fail ("#3");
  296. } catch (CookieException) {
  297. }
  298. cc.SetCookies (new Uri ("http://www.contoso.com"), "");
  299. }
  300. [Test]
  301. public void GetCookies ()
  302. {
  303. CookieContainer container = new CookieContainer ();
  304. container.Add (new Cookie ("name", "value1", "/path", "localhost"));
  305. container.Add (new Cookie ("name", "value2", "/path/sub", "localhost"));
  306. CookieCollection cookies = container.GetCookies (
  307. new Uri ("http://localhost/path/sub"));
  308. Assert.IsNotNull (cookies, "#A1");
  309. Assert.AreEqual (2, cookies.Count, "#A2");
  310. Cookie cookie = cookies [0];
  311. Assert.AreEqual ("name", cookie.Name, "#B1");
  312. Assert.AreEqual ("value2", cookie.Value, "#B2");
  313. Assert.AreEqual ("/path/sub", cookie.Path, "#B3");
  314. Assert.AreEqual ("localhost", cookie.Domain, "#B4");
  315. cookie = cookies [1];
  316. Assert.AreEqual ("name", cookie.Name, "#C1");
  317. Assert.AreEqual ("value1", cookie.Value, "#C2");
  318. Assert.AreEqual ("/path", cookie.Path, "#C3");
  319. Assert.AreEqual ("localhost", cookie.Domain, "#C4");
  320. cookies = container.GetCookies (new Uri ("http://localhost/path"));
  321. Assert.IsNotNull (cookies, "#D1");
  322. Assert.AreEqual (1, cookies.Count, "#D2");
  323. cookie = cookies [0];
  324. Assert.AreEqual ("name", cookie.Name, "#E1");
  325. Assert.AreEqual ("value1", cookie.Value, "#E2");
  326. Assert.AreEqual ("/path", cookie.Path, "#E3");
  327. Assert.AreEqual ("localhost", cookie.Domain, "#E4");
  328. cookies = container.GetCookies (new Uri ("http://localhost/whatever"));
  329. Assert.IsNotNull (cookies, "#F1");
  330. Assert.AreEqual (0, cookies.Count, "#F2");
  331. }
  332. [Test]
  333. [ExpectedException (typeof (ArgumentNullException))]
  334. public void GetCookies_Uri_Null ()
  335. {
  336. CookieContainer container = new CookieContainer ();
  337. container.GetCookies ((Uri) null);
  338. }
  339. }
  340. }