New tests.
[mono.git] / mcs / class / System.Data / Test / System.Data.SqlClient / SqlConnectionTest.cs
1 //\r
2 // SqlConnectionTest.cs - NUnit Test Cases for testing the\r
3 //                        SqlConnection class\r
4 // Author:\r
5 //      Gert Driesen (drieseng@users.sourceforge.net)\r
6 //\r
7 // Copyright (c) 2004 Novell Inc., and the individuals listed\r
8 // on the ChangeLog entries.\r
9 //\r
10 // Permission is hereby granted, free of charge, to any person obtaining\r
11 // a copy of this software and associated documentation files (the\r
12 // "Software"), to deal in the Software without restriction, including\r
13 // without limitation the rights to use, copy, modify, merge, publish,\r
14 // distribute, sublicense, and/or sell copies of the Software, and to\r
15 // permit persons to whom the Software is furnished to do so, subject to\r
16 // the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be\r
19 // included in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
28 //\r
29 \r
30 using System;\r
31 using System.Data;\r
32 using System.Data.SqlClient;\r
33 \r
34 using NUnit.Framework;\r
35 \r
36 namespace MonoTests.System.Data.SqlClient\r
37 {\r
38         [TestFixture]\r
39         public class SqlConnectionTest\r
40         {\r
41                 [Test] // SqlConnection ()\r
42                 public void Constructor1 ()\r
43                 {\r
44                         SqlConnection cn = new SqlConnection ();\r
45 \r
46                         Assert.AreEqual (string.Empty, cn.ConnectionString, "#1");\r
47                         Assert.AreEqual (15, cn.ConnectionTimeout, "#2");\r
48                         Assert.IsNull (cn.Container, "#3");\r
49                         Assert.AreEqual (string.Empty, cn.Database, "#4");\r
50                         Assert.AreEqual (string.Empty, cn.DataSource, "#5");\r
51 #if NET_2_0\r
52                         Assert.IsFalse (cn.FireInfoMessageEventOnUserErrors, "#6");\r
53                         Assert.AreEqual (8000, cn.PacketSize, "#7");\r
54 #else\r
55                         Assert.AreEqual (8192, cn.PacketSize, "#7");\r
56 #endif\r
57                         Assert.IsNull (cn.Site, "#8");\r
58                         Assert.AreEqual (ConnectionState.Closed, cn.State, "#9");\r
59 #if NET_2_0\r
60                         Assert.IsFalse (cn.StatisticsEnabled, "#10");\r
61 #endif\r
62                         Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#11");\r
63                 }\r
64 \r
65                 [Test] // SqlConnection (string)\r
66                 public void Constructor2 ()\r
67                 {\r
68                         string connectionString = "server=SQLSRV; database=Mono;";\r
69 \r
70                         SqlConnection cn = new SqlConnection (connectionString);\r
71                         Assert.AreEqual (connectionString, cn.ConnectionString, "#A1");\r
72                         Assert.AreEqual (15, cn.ConnectionTimeout, "#A2");\r
73                         Assert.IsNull (cn.Container, "#A3");\r
74                         Assert.AreEqual ("Mono", cn.Database, "#A4");\r
75                         Assert.AreEqual ("SQLSRV", cn.DataSource, "#A5");\r
76 #if NET_2_0\r
77                         Assert.IsFalse (cn.FireInfoMessageEventOnUserErrors, "#A6");\r
78                         Assert.AreEqual (8000, cn.PacketSize, "#A7");\r
79 #else\r
80                         Assert.AreEqual (8192, cn.PacketSize, "#A7");\r
81 #endif\r
82                         Assert.IsNull (cn.Site, "#A8");\r
83                         Assert.AreEqual (ConnectionState.Closed, cn.State, "#A9");\r
84 #if NET_2_0\r
85                         Assert.IsFalse (cn.StatisticsEnabled, "#A10");\r
86 #endif\r
87                         Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#A11");\r
88 \r
89                         cn = new SqlConnection ((string) null);\r
90                         Assert.AreEqual (string.Empty, cn.ConnectionString, "#B1");\r
91                         Assert.AreEqual (15, cn.ConnectionTimeout, "#B2");\r
92                         Assert.IsNull (cn.Container, "#B3");\r
93                         Assert.AreEqual (string.Empty, cn.Database, "#B4");\r
94                         Assert.AreEqual (string.Empty, cn.DataSource, "#B5");\r
95 #if NET_2_0\r
96                         Assert.IsFalse (cn.FireInfoMessageEventOnUserErrors, "#B6");\r
97                         Assert.AreEqual (8000, cn.PacketSize, "#B7");\r
98 #else\r
99                         Assert.AreEqual (8192, cn.PacketSize, "#B7");\r
100 #endif\r
101                         Assert.IsNull (cn.Site, "#B8");\r
102                         Assert.AreEqual (ConnectionState.Closed, cn.State, "#B9");\r
103 #if NET_2_0\r
104                         Assert.IsFalse (cn.StatisticsEnabled, "#B10");\r
105 #endif\r
106                         Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#B11");\r
107                 }\r
108 \r
109                 [Test]\r
110                 [Category ("NotWorking")]\r
111                 public void Constructor2_ConnectionString_Invalid ()\r
112                 {\r
113                         try {\r
114                                 new SqlConnection ("InvalidConnectionString");\r
115                                 Assert.Fail ("#A1");\r
116                         } catch (ArgumentException ex) {\r
117                                 // Format of the initialization string does\r
118                                 // not conform to specification starting at\r
119                                 // index 0\r
120                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
121                                 Assert.IsNull (ex.InnerException, "#A3");\r
122                                 Assert.IsNotNull (ex.Message, "#A4");\r
123                                 Assert.IsNull (ex.ParamName, "#A5");\r
124                         }\r
125 \r
126                         // invalid keyword\r
127                         try {\r
128                                 new SqlConnection ("invalidKeyword=10");\r
129                                 Assert.Fail ("#B1");\r
130                         } catch (ArgumentException ex) {\r
131                                 // Keyword not supported: 'invalidkeyword'\r
132                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
133                                 Assert.IsNull (ex.InnerException, "#B3");\r
134                                 Assert.IsNotNull (ex.Message, "#B4");\r
135                                 Assert.IsTrue (ex.Message.IndexOf ("'invalidkeyword'") != -1, "#B5");\r
136                                 Assert.IsNull (ex.ParamName, "#B6");\r
137                         }\r
138 \r
139                         // invalid packet size (< minimum)\r
140                         try {\r
141                                 new SqlConnection ("Packet Size=511");\r
142                                 Assert.Fail ("#C1");\r
143                         } catch (ArgumentException ex) {\r
144                                 // Invalid 'Packet Size'.  The value must be an\r
145                                 // integer >= 512 and <= 32768\r
146                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
147                                 Assert.IsNull (ex.InnerException, "#C3");\r
148                                 Assert.IsNotNull (ex.Message, "#C4");\r
149                                 Assert.IsNull (ex.ParamName, "#C5");\r
150                         }\r
151 \r
152                         // invalid packet size (> maximum)\r
153                         try {\r
154                                 new SqlConnection ("Packet Size=32769");\r
155                                 Assert.Fail ("#D1");\r
156                         } catch (ArgumentException ex) {\r
157                                 // Invalid 'Packet Size'.  The value must be an\r
158                                 // integer >= 512 and <= 32768\r
159                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");\r
160                                 Assert.IsNull (ex.InnerException, "#D3");\r
161                                 Assert.IsNotNull (ex.Message, "#D4");\r
162                                 Assert.IsNull (ex.ParamName, "#D5");\r
163                         }\r
164 \r
165                         // negative connect timeout\r
166                         try {\r
167                                 new SqlConnection ("Connect Timeout=-1");\r
168                                 Assert.Fail ("#E1");\r
169                         } catch (ArgumentException ex) {\r
170                                 // Invalid value for key 'connect timeout'\r
171                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");\r
172                                 Assert.IsNull (ex.InnerException, "#E3");\r
173                                 Assert.IsNotNull (ex.Message, "#E4");\r
174                                 Assert.IsNull (ex.ParamName, "#E5");\r
175                         }\r
176 \r
177                         // negative max pool size\r
178                         try {\r
179                                 new SqlConnection ("Max Pool Size=-1");\r
180                                 Assert.Fail ("#F1");\r
181                         } catch (ArgumentException ex) {\r
182                                 // Invalid value for key 'max pool size'\r
183                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#F2");\r
184                                 Assert.IsNull (ex.InnerException, "#F3");\r
185                                 Assert.IsNotNull (ex.Message, "#F4");\r
186                                 Assert.IsNull (ex.ParamName, "#F5");\r
187                         }\r
188 \r
189                         // negative min pool size\r
190                         try {\r
191                                 new SqlConnection ("Min Pool Size=-1");\r
192                                 Assert.Fail ("#G1");\r
193                         } catch (ArgumentException ex) {\r
194                                 // Invalid value for key 'min pool size'\r
195                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#G2");\r
196                                 Assert.IsNull (ex.InnerException, "#G3");\r
197                                 Assert.IsNotNull (ex.Message, "#G4");\r
198                                 Assert.IsNull (ex.ParamName, "#G5");\r
199                         }\r
200                 }\r
201 \r
202                 [Test]\r
203                 public void BeginTransaction_Connection_Closed ()\r
204                 {\r
205                         SqlConnection cn = new SqlConnection ();\r
206 \r
207                         try {\r
208                                 cn.BeginTransaction ();\r
209                                 Assert.Fail ("#A1");\r
210                         } catch (InvalidOperationException ex) {\r
211                                 // Invalid operation. The connection is closed\r
212                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");\r
213                                 Assert.IsNull (ex.InnerException, "#A3");\r
214                                 Assert.IsNotNull (ex.Message, "#A4");\r
215                         }\r
216 \r
217                         try {\r
218                                 cn.BeginTransaction ((IsolationLevel) 666);\r
219                                 Assert.Fail ("#B1");\r
220                         } catch (InvalidOperationException ex) {\r
221                                 // Invalid operation. The connection is closed\r
222                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
223                                 Assert.IsNull (ex.InnerException, "#B3");\r
224                                 Assert.IsNotNull (ex.Message, "#B4");\r
225                         }\r
226 \r
227                         try {\r
228                                 cn.BeginTransaction (IsolationLevel.Serializable);\r
229                                 Assert.Fail ("#C1");\r
230                         } catch (InvalidOperationException ex) {\r
231                                 // Invalid operation. The connection is closed\r
232                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");\r
233                                 Assert.IsNull (ex.InnerException, "#C3");\r
234                                 Assert.IsNotNull (ex.Message, "#C4");\r
235                         }\r
236 \r
237                         try {\r
238                                 cn.BeginTransaction ("trans");\r
239                                 Assert.Fail ("#D1");\r
240                         } catch (InvalidOperationException ex) {\r
241                                 // Invalid operation. The connection is closed\r
242                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");\r
243                                 Assert.IsNull (ex.InnerException, "#D3");\r
244                                 Assert.IsNotNull (ex.Message, "#D4");\r
245                         }\r
246 \r
247                         try {\r
248                                 cn.BeginTransaction ((IsolationLevel) 666, "trans");\r
249                                 Assert.Fail ("#E1");\r
250                         } catch (InvalidOperationException ex) {\r
251                                 // Invalid operation. The connection is closed\r
252                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");\r
253                                 Assert.IsNull (ex.InnerException, "#E3");\r
254                                 Assert.IsNotNull (ex.Message, "#E4");\r
255                         }\r
256 \r
257                         try {\r
258                                 cn.BeginTransaction (IsolationLevel.Serializable, "trans");\r
259                                 Assert.Fail ("#F1");\r
260                         } catch (InvalidOperationException ex) {\r
261                                 // Invalid operation. The connection is closed\r
262                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");\r
263                                 Assert.IsNull (ex.InnerException, "#F3");\r
264                                 Assert.IsNotNull (ex.Message, "#F4");\r
265                         }\r
266                 }\r
267 \r
268                 [Test]\r
269                 public void ChangeDatabase_Connection_Closed ()\r
270                 {\r
271                         SqlConnection cn = new SqlConnection ();\r
272                         cn.ConnectionString = "server=SQLSRV";\r
273 \r
274                         try {\r
275                                 cn.ChangeDatabase ("database");\r
276                                 Assert.Fail ("#1");\r
277                         } catch (InvalidOperationException ex) {\r
278                                 // Invalid operation. The connection is closed\r
279                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
280                                 Assert.IsNull (ex.InnerException, "#3");\r
281                                 Assert.IsNotNull (ex.Message, "#4");\r
282                         }\r
283                 }\r
284 \r
285 #if NET_2_0\r
286                 [Test]\r
287                 public void ChangePassword_ConnectionString_Empty ()\r
288                 {\r
289                         try {\r
290                                 SqlConnection.ChangePassword (string.Empty, "mono");\r
291                                 Assert.Fail ("#1");\r
292                         } catch (ArgumentNullException ex) {\r
293                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
294                                 Assert.IsNull (ex.InnerException, "#3");\r
295                                 Assert.IsNotNull (ex.Message, "#4");\r
296                                 Assert.IsNotNull (ex.ParamName, "#5");\r
297                                 Assert.IsTrue (ex.ParamName.IndexOf ("'connectionString'") != -1, "#6");\r
298                         }\r
299                 }\r
300 \r
301                 [Test]\r
302                 public void ChangePassword_ConnectionString_Null ()\r
303                 {\r
304                         try {\r
305                                 SqlConnection.ChangePassword ((string) null, "mono");\r
306                                 Assert.Fail ("#1");\r
307                         } catch (ArgumentNullException ex) {\r
308                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
309                                 Assert.IsNull (ex.InnerException, "#3");\r
310                                 Assert.IsNotNull (ex.Message, "#4");\r
311                                 Assert.IsNotNull (ex.ParamName, "#5");\r
312                                 Assert.IsTrue (ex.ParamName.IndexOf ("'connectionString'") != -1, "#6");\r
313                         }\r
314                 }\r
315 \r
316                 [Test]\r
317                 public void ChangePassword_NewPassword_Empty ()\r
318                 {\r
319                         try {\r
320                                 SqlConnection.ChangePassword ("server=SQLSRV", string.Empty);\r
321                                 Assert.Fail ("#1");\r
322                         } catch (ArgumentNullException ex) {\r
323                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
324                                 Assert.IsNull (ex.InnerException, "#3");\r
325                                 Assert.IsNotNull (ex.Message, "#4");\r
326                                 Assert.IsNotNull (ex.ParamName, "#5");\r
327                                 Assert.IsTrue (ex.ParamName.IndexOf ("'newPassword'") != -1, "#6");\r
328                         }\r
329                 }\r
330 \r
331                 [Test]\r
332                 public void ChangePassword_NewPassword_ExceedMaxLength ()\r
333                 {\r
334                         try {\r
335                                 SqlConnection.ChangePassword ("server=SQLSRV",\r
336                                         new string ('d', 129));\r
337                                 Assert.Fail ("#1");\r
338                         } catch (ArgumentException ex) {\r
339                                 // The length of argument 'newPassword' exceeds\r
340                                 // it's limit of '128'\r
341                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");\r
342                                 Assert.IsNull (ex.InnerException, "#3");\r
343                                 Assert.IsNotNull (ex.Message, "#4");\r
344                                 Assert.IsTrue (ex.Message.IndexOf ("'newPassword'") != -1, "#5");\r
345                                 Assert.IsTrue (ex.Message.IndexOf ("128") != -1, "#6");\r
346                                 Assert.IsNull (ex.ParamName, "#7");\r
347                         }\r
348                 }\r
349 \r
350                 [Test]\r
351                 public void ChangePassword_NewPassword_Null ()\r
352                 {\r
353                         try {\r
354                                 SqlConnection.ChangePassword ("server=SQLSRV", (string) null);\r
355                                 Assert.Fail ("#1");\r
356                         } catch (ArgumentNullException ex) {\r
357                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
358                                 Assert.IsNull (ex.InnerException, "#3");\r
359                                 Assert.IsNotNull (ex.Message, "#4");\r
360                                 Assert.IsNotNull (ex.ParamName, "#5");\r
361                                 Assert.IsTrue (ex.ParamName.IndexOf ("'newPassword'") != -1, "#6");\r
362                         }\r
363                 }\r
364 #endif\r
365 \r
366                 [Test]\r
367                 public void ConnectionString ()\r
368                 {\r
369                         SqlConnection cn = new SqlConnection ();\r
370                         cn.ConnectionString = "server=SQLSRV";\r
371                         Assert.AreEqual ("server=SQLSRV", cn.ConnectionString, "#1");\r
372                         cn.ConnectionString = null;\r
373                         Assert.AreEqual (string.Empty, cn.ConnectionString, "#2");\r
374                         cn.ConnectionString = "server=SQLSRV";\r
375                         Assert.AreEqual ("server=SQLSRV", cn.ConnectionString, "#3");\r
376                         cn.ConnectionString = string.Empty;\r
377                         Assert.AreEqual (string.Empty, cn.ConnectionString, "#4");\r
378                 }\r
379 \r
380                 [Test]\r
381                 [Category ("NotWorking")]\r
382                 public void ConnectionString_Value_Invalid ()\r
383                 {\r
384                         SqlConnection cn = new SqlConnection ();\r
385 \r
386                         try {\r
387                                 cn.ConnectionString = "InvalidConnectionString";\r
388                                 Assert.Fail ("#A1");\r
389                         } catch (ArgumentException ex) {\r
390                                 // Format of the initialization string does\r
391                                 // not conform to specification starting at\r
392                                 // index 0\r
393                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
394                                 Assert.IsNull (ex.InnerException, "#A3");\r
395                                 Assert.IsNotNull (ex.Message, "#A4");\r
396                                 Assert.IsNull (ex.ParamName, "#A5");\r
397                         }\r
398 \r
399                         // invalid keyword\r
400                         try {\r
401                                 cn.ConnectionString = "invalidKeyword=10";\r
402                                 Assert.Fail ("#B1");\r
403                         } catch (ArgumentException ex) {\r
404                                 // Keyword not supported: 'invalidkeyword'\r
405                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
406                                 Assert.IsNull (ex.InnerException, "#B3");\r
407                                 Assert.IsNotNull (ex.Message, "#B4");\r
408                                 Assert.IsTrue (ex.Message.IndexOf ("'invalidkeyword'") != -1, "#B5");\r
409                                 Assert.IsNull (ex.ParamName, "#B6");\r
410                         }\r
411 \r
412                         // invalid packet size (< minimum)\r
413                         try {\r
414                                 cn.ConnectionString = "Packet Size=511";\r
415                                 Assert.Fail ("#C1");\r
416                         } catch (ArgumentException ex) {\r
417                                 // Invalid 'Packet Size'.  The value must be an\r
418                                 // integer >= 512 and <= 32768\r
419                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
420                                 Assert.IsNull (ex.InnerException, "#C3");\r
421                                 Assert.IsNotNull (ex.Message, "#C4");\r
422                                 Assert.IsNull (ex.ParamName, "#C5");\r
423                         }\r
424 \r
425                         // invalid packet size (> maximum)\r
426                         try {\r
427                                 cn.ConnectionString = "Packet Size=32769";\r
428                                 Assert.Fail ("#D1");\r
429                         } catch (ArgumentException ex) {\r
430                                 // Invalid 'Packet Size'.  The value must be an\r
431                                 // integer >= 512 and <= 32768\r
432                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");\r
433                                 Assert.IsNull (ex.InnerException, "#D3");\r
434                                 Assert.IsNotNull (ex.Message, "#D4");\r
435                                 Assert.IsNull (ex.ParamName, "#D5");\r
436                         }\r
437 \r
438                         // negative connect timeout\r
439                         try {\r
440                                 cn.ConnectionString = "Connect Timeout=-1";\r
441                                 Assert.Fail ("#E1");\r
442                         } catch (ArgumentException ex) {\r
443                                 // Invalid value for key 'connect timeout'\r
444                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");\r
445                                 Assert.IsNull (ex.InnerException, "#E3");\r
446                                 Assert.IsNotNull (ex.Message, "#E4");\r
447                                 Assert.IsNull (ex.ParamName, "#E5");\r
448                         }\r
449 \r
450                         // negative max pool size\r
451                         try {\r
452                                 cn.ConnectionString = "Max Pool Size=-1";\r
453                                 Assert.Fail ("#F1");\r
454                         } catch (ArgumentException ex) {\r
455                                 // Invalid value for key 'max pool size'\r
456                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#F2");\r
457                                 Assert.IsNull (ex.InnerException, "#F3");\r
458                                 Assert.IsNotNull (ex.Message, "#F4");\r
459                                 Assert.IsNull (ex.ParamName, "#F5");\r
460                         }\r
461 \r
462                         // negative min pool size\r
463                         try {\r
464                                 cn.ConnectionString = "Min Pool Size=-1";\r
465                                 Assert.Fail ("#G1");\r
466                         } catch (ArgumentException ex) {\r
467                                 // Invalid value for key 'min pool size'\r
468                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#G2");\r
469                                 Assert.IsNull (ex.InnerException, "#G3");\r
470                                 Assert.IsNotNull (ex.Message, "#G4");\r
471                                 Assert.IsNull (ex.ParamName, "#G5");\r
472                         }\r
473                 }\r
474 \r
475                 [Test]\r
476                 public void ConnectionTimeoutSynonyms()\r
477                 {\r
478                         SqlConnection cn = null;\r
479 \r
480                         cn = new SqlConnection ();\r
481                         cn.ConnectionString = "Connection Timeout=25";\r
482                         Assert.AreEqual (25, cn.ConnectionTimeout);\r
483 \r
484                         cn = new SqlConnection ();\r
485                         cn.ConnectionString = "Connect Timeout=25";\r
486                         Assert.AreEqual (25, cn.ConnectionTimeout);\r
487 \r
488                         cn = new SqlConnection ();\r
489                         cn.ConnectionString = "Timeout=25";\r
490                         Assert.AreEqual (25, cn.ConnectionTimeout);\r
491                 }\r
492 \r
493                 [Test]\r
494                 public void CreateCommand ()\r
495                 {\r
496                         SqlConnection cn = new SqlConnection ();\r
497                         SqlCommand cmd = cn.CreateCommand ();\r
498                         Assert.IsNotNull (cmd, "#1");\r
499                         Assert.AreEqual (string.Empty, cmd.CommandText, "#2");\r
500                         Assert.AreEqual (30, cmd.CommandTimeout, "#3");\r
501                         Assert.AreEqual (CommandType.Text, cmd.CommandType, "#4");\r
502                         Assert.AreSame (cn, cmd.Connection, "#5");\r
503                         Assert.IsNull (cmd.Container, "#6");\r
504                         Assert.IsTrue (cmd.DesignTimeVisible, "#7");\r
505 #if NET_2_0\r
506                         Assert.IsNull (cmd.Notification, "#8");\r
507                         Assert.IsTrue (cmd.NotificationAutoEnlist, "#9");\r
508 #endif\r
509                         Assert.IsNotNull (cmd.Parameters, "#10");\r
510                         Assert.AreEqual (0, cmd.Parameters.Count, "#11");\r
511                         Assert.IsNull (cmd.Site, "#12");\r
512                         Assert.IsNull (cmd.Transaction, "#13");\r
513                         Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#14");\r
514                 }\r
515 \r
516                 [Test]\r
517                 public void Dispose ()\r
518                 {\r
519                         SqlConnection cn = new SqlConnection ("Server=SQLSRV;Database=master;Timeout=25;Packet Size=512;Workstation ID=DUMMY");\r
520                         cn.Dispose ();\r
521 \r
522                         Assert.AreEqual (string.Empty, cn.ConnectionString, "#1");\r
523                         Assert.AreEqual (15, cn.ConnectionTimeout, "#2");\r
524                         Assert.AreEqual (string.Empty, cn.Database, "#3");\r
525                         Assert.AreEqual (string.Empty, cn.DataSource, "#4");\r
526 #if NET_2_0\r
527                         Assert.AreEqual (8000, cn.PacketSize, "#5");\r
528 #else\r
529                         Assert.AreEqual (8192, cn.PacketSize, "#5");\r
530 #endif\r
531                         Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#6");\r
532                         Assert.AreEqual (ConnectionState.Closed, cn.State, "#7");\r
533                         cn.Dispose ();\r
534 \r
535                         cn = new SqlConnection ();\r
536                         cn.Dispose ();\r
537                 }\r
538 \r
539 #if NET_2_0\r
540                 [Test]\r
541                 public void GetSchema_Connection_Closed ()\r
542                 {\r
543                         SqlConnection cn = new SqlConnection ();\r
544 \r
545                         try {\r
546                                 cn.GetSchema ();\r
547                                 Assert.Fail ("#A1");\r
548                         } catch (InvalidOperationException ex) {\r
549                                 // Invalid operation. The connection is closed\r
550                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");\r
551                                 Assert.IsNull (ex.InnerException, "#B3");\r
552                                 Assert.IsNotNull (ex.Message, "#B4");\r
553                         }\r
554 \r
555                         try {\r
556                                 cn.GetSchema ("Tables");\r
557                                 Assert.Fail ("#B1");\r
558                         } catch (InvalidOperationException ex) {\r
559                                 // Invalid operation. The connection is closed\r
560                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
561                                 Assert.IsNull (ex.InnerException, "#B3");\r
562                                 Assert.IsNotNull (ex.Message, "#B4");\r
563                         }\r
564 \r
565                         try {\r
566                                 cn.GetSchema ((string) null);\r
567                                 Assert.Fail ("#C1");\r
568                         } catch (InvalidOperationException ex) {\r
569                                 // Invalid operation. The connection is closed\r
570                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");\r
571                                 Assert.IsNull (ex.InnerException, "#C3");\r
572                                 Assert.IsNotNull (ex.Message, "#C4");\r
573                         }\r
574 \r
575                         try {\r
576                                 cn.GetSchema ("Tables", new string [] { "master" });\r
577                                 Assert.Fail ("#D1");\r
578                         } catch (InvalidOperationException ex) {\r
579                                 // Invalid operation. The connection is closed\r
580                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");\r
581                                 Assert.IsNull (ex.InnerException, "#D3");\r
582                                 Assert.IsNotNull (ex.Message, "#D4");\r
583                         }\r
584 \r
585                         try {\r
586                                 cn.GetSchema ((string) null, new string [] { "master" });\r
587                                 Assert.Fail ("#E1");\r
588                         } catch (InvalidOperationException ex) {\r
589                                 // Invalid operation. The connection is closed\r
590                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");\r
591                                 Assert.IsNull (ex.InnerException, "#E3");\r
592                                 Assert.IsNotNull (ex.Message, "#E4");\r
593                         }\r
594 \r
595                         try {\r
596                                 cn.GetSchema ("Tables", (string []) null);\r
597                                 Assert.Fail ("#F1");\r
598                         } catch (InvalidOperationException ex) {\r
599                                 // Invalid operation. The connection is closed\r
600                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");\r
601                                 Assert.IsNull (ex.InnerException, "#F3");\r
602                                 Assert.IsNotNull (ex.Message, "#F4");\r
603                         }\r
604 \r
605                         try {\r
606                                 cn.GetSchema ((string) null, (string []) null);\r
607                                 Assert.Fail ("#G1");\r
608                         } catch (InvalidOperationException ex) {\r
609                                 // Invalid operation. The connection is closed\r
610                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#G2");\r
611                                 Assert.IsNull (ex.InnerException, "#G3");\r
612                                 Assert.IsNotNull (ex.Message, "#G4");\r
613                         }\r
614                 }\r
615 #endif\r
616 \r
617                 [Test]\r
618                 public void ConnectionString_Database_Synonyms ()\r
619                 {\r
620                         SqlConnection cn = null;\r
621 \r
622                         cn = new SqlConnection ();\r
623                         cn.ConnectionString = "Initial Catalog=db";\r
624                         Assert.AreEqual ("db", cn.Database);\r
625 \r
626                         cn = new SqlConnection ();\r
627                         cn.ConnectionString = "Database=db";\r
628                         Assert.AreEqual ("db", cn.Database);\r
629                 }\r
630 \r
631                 [Test]\r
632                 public void ConnectionString_DataSource_Synonyms ()\r
633                 {\r
634                         SqlConnection cn = null;\r
635 \r
636                         cn = new SqlConnection ();\r
637                         cn.ConnectionString = "Data Source=server";\r
638                         Assert.AreEqual ("server", cn.DataSource);\r
639 \r
640                         cn = new SqlConnection ();\r
641                         cn.ConnectionString = "addr=server";\r
642                         Assert.AreEqual ("server", cn.DataSource);\r
643 \r
644                         cn = new SqlConnection ();\r
645                         cn.ConnectionString = "address=server";\r
646                         Assert.AreEqual ("server", cn.DataSource);\r
647 \r
648                         cn = new SqlConnection ();\r
649                         cn.ConnectionString = "network address=server";\r
650                         Assert.AreEqual ("server", cn.DataSource);\r
651 \r
652                         cn = new SqlConnection ();\r
653                         cn.ConnectionString = "server=server";\r
654                         Assert.AreEqual ("server", cn.DataSource);\r
655                 }\r
656 \r
657                 [Test]\r
658                 public void ConnectionString_NetworkLibrary_Synonyms ()\r
659                 {\r
660                         SqlConnection cn = new SqlConnection ();\r
661                         cn.ConnectionString = "Net=DBMSSOCN";\r
662                         cn.ConnectionString = "Network=DBMSSOCN";\r
663                         cn.ConnectionString = "Network library=DBMSSOCN";\r
664                 }\r
665 \r
666                 [Test]\r
667                 public void ConnectionString_OtherKeywords ()\r
668                 {\r
669                         SqlConnection cn = new SqlConnection ();\r
670                         cn.ConnectionString = "Application Name=test";\r
671                         cn.ConnectionString = "App=test";\r
672                         cn.ConnectionString = "Connection LifeTime=1000";\r
673                         cn.ConnectionString = "Connection Reset=true";\r
674                         cn.ConnectionString = "Current Language=test";\r
675                         cn.ConnectionString = "Language=test";\r
676                         cn.ConnectionString = "Encrypt=false";\r
677                         cn.ConnectionString = "Enlist=true";\r
678                         cn.ConnectionString = "Integrated Security=true";\r
679                         cn.ConnectionString = "Trusted_connection=true";\r
680                         cn.ConnectionString = "Max Pool Size=10";\r
681                         cn.ConnectionString = "Min Pool Size=10";\r
682                         cn.ConnectionString = "Password=scrambled";\r
683                         cn.ConnectionString = "Pwd=scrambled";\r
684                         cn.ConnectionString = "Pooling=true";\r
685                         cn.ConnectionString = "User Id=test";\r
686                         cn.ConnectionString = "User=test";\r
687                         cn.ConnectionString = "Uid=test";\r
688                         /*\r
689                          * NOT IMPLEMENTED YET\r
690                          */\r
691                         /*\r
692                         cn.ConnectionString = "Persist Security Info=true";\r
693                         cn.ConnectionString = "PersistSecurityInfo=true";\r
694                         cn.ConnectionString = "Encrypt=true";\r
695                         cn.ConnectionString = "Enlist=false";\r
696                         cn.ConnectionString = "attachdbfilename=dunno";\r
697                         cn.ConnectionString = "extended properties=dunno";\r
698                         cn.ConnectionString = "initial file name=dunno";\r
699                         */\r
700                 }\r
701 \r
702                 [Test]\r
703                 public void Open_ConnectionString_Empty ()\r
704                 {\r
705                         SqlConnection cn = new SqlConnection ();\r
706                         cn.ConnectionString = string.Empty;\r
707 \r
708                         try {\r
709                                 cn.Open ();\r
710                                 Assert.Fail ("#1");\r
711                         } catch (InvalidOperationException ex) {\r
712                                 // The ConnectionString property has not been\r
713                                 // initialized\r
714                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
715                                 Assert.IsNull (ex.InnerException, "#3");\r
716                                 Assert.IsNotNull (ex.Message, "#4");\r
717                         }\r
718                 }\r
719 \r
720                 [Test]\r
721                 public void Open_ConnectionString_Null ()\r
722                 {\r
723                         SqlConnection cn = new SqlConnection ();\r
724                         cn.ConnectionString = null;\r
725 \r
726                         try {\r
727                                 cn.Open ();\r
728                                 Assert.Fail ("#1");\r
729                         } catch (InvalidOperationException ex) {\r
730                                 // The ConnectionString property has not been\r
731                                 // initialized\r
732                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
733                                 Assert.IsNull (ex.InnerException, "#3");\r
734                                 Assert.IsNotNull (ex.Message, "#4");\r
735                         }\r
736                 }\r
737 \r
738                 [Test]\r
739                 public void Open_ConnectionString_Whitespace ()\r
740                 {\r
741                         SqlConnection cn = new SqlConnection ();\r
742                         cn.ConnectionString = "    ";\r
743 \r
744                         try {\r
745                                 cn.Open ();\r
746                                 Assert.Fail ("#1");\r
747                         } catch (InvalidOperationException ex) {\r
748                                 // The ConnectionString property has not been\r
749                                 // initialized\r
750                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
751                                 Assert.IsNull (ex.InnerException, "#3");\r
752                                 Assert.IsNotNull (ex.Message, "#4");\r
753                         }\r
754                 }\r
755 \r
756                 [Test]\r
757                 public void ServerVersion_Connection_Closed ()\r
758                 {\r
759                         SqlConnection cn = new SqlConnection ();\r
760                         try {\r
761                                 Assert.Fail ("#A1:" + cn.ServerVersion);\r
762                         } catch (InvalidOperationException ex) {\r
763                                 // Invalid operation. The connection is closed\r
764                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");\r
765                                 Assert.IsNull (ex.InnerException, "#A3");\r
766                                 Assert.IsNotNull (ex.Message, "#A4");\r
767                         }\r
768 \r
769                         cn = new SqlConnection ("server=SQLSRV; database=Mono;");\r
770                         try {\r
771                                 Assert.Fail ("#B1:" + cn.ServerVersion);\r
772                         } catch (InvalidOperationException ex) {\r
773                                 // Invalid operation. The connection is closed\r
774                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
775                                 Assert.IsNull (ex.InnerException, "#B3");\r
776                                 Assert.IsNotNull (ex.Message, "#B4");\r
777                         }\r
778                 }\r
779         }\r
780 }\r