[System*] Throw a PlatformNotSupported exception when using the managed networking...
[mono.git] / mcs / class / System.Data / Test / System.Data.SqlClient / SqlConnectionTest.cs
index 3590a7cf1780f62071d75f34ce73a3c8af05ead8..9511be24f7535375f8298d0c559a174d70452296 100644 (file)
@@ -38,52 +38,629 @@ namespace MonoTests.System.Data.SqlClient
        [TestFixture]\r
        public class SqlConnectionTest\r
        {\r
+               [Test] // SqlConnection ()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Constructor1 ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+\r
+                       Assert.AreEqual (string.Empty, cn.ConnectionString, "#1");\r
+                       Assert.AreEqual (15, cn.ConnectionTimeout, "#2");\r
+                       Assert.IsNull (cn.Container, "#3");\r
+                       Assert.AreEqual (string.Empty, cn.Database, "#4");\r
+                       Assert.AreEqual (string.Empty, cn.DataSource, "#5");\r
+                       Assert.IsFalse (cn.FireInfoMessageEventOnUserErrors, "#6");\r
+                       Assert.AreEqual (8000, cn.PacketSize, "#7");\r
+                       Assert.IsNull (cn.Site, "#8");\r
+                       Assert.AreEqual (ConnectionState.Closed, cn.State, "#9");\r
+                       Assert.IsFalse (cn.StatisticsEnabled, "#10");\r
+                       Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#11");\r
+               }\r
+\r
+               [Test] // SqlConnection (string)\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Constructor2 ()\r
+               {\r
+                       string connectionString = "server=SQLSRV; database=Mono;";\r
+\r
+                       SqlConnection cn = new SqlConnection (connectionString);\r
+                       Assert.AreEqual (connectionString, cn.ConnectionString, "#A1");\r
+                       Assert.AreEqual (15, cn.ConnectionTimeout, "#A2");\r
+                       Assert.IsNull (cn.Container, "#A3");\r
+                       Assert.AreEqual ("Mono", cn.Database, "#A4");\r
+                       Assert.AreEqual ("SQLSRV", cn.DataSource, "#A5");\r
+                       Assert.IsFalse (cn.FireInfoMessageEventOnUserErrors, "#A6");\r
+                       Assert.AreEqual (8000, cn.PacketSize, "#A7");\r
+                       Assert.IsNull (cn.Site, "#A8");\r
+                       Assert.AreEqual (ConnectionState.Closed, cn.State, "#A9");\r
+                       Assert.IsFalse (cn.StatisticsEnabled, "#A10");\r
+                       Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#A11");\r
+\r
+                       cn = new SqlConnection ((string) null);\r
+                       Assert.AreEqual (string.Empty, cn.ConnectionString, "#B1");\r
+                       Assert.AreEqual (15, cn.ConnectionTimeout, "#B2");\r
+                       Assert.IsNull (cn.Container, "#B3");\r
+                       Assert.AreEqual (string.Empty, cn.Database, "#B4");\r
+                       Assert.AreEqual (string.Empty, cn.DataSource, "#B5");\r
+                       Assert.IsFalse (cn.FireInfoMessageEventOnUserErrors, "#B6");\r
+                       Assert.AreEqual (8000, cn.PacketSize, "#B7");\r
+                       Assert.IsNull (cn.Site, "#B8");\r
+                       Assert.AreEqual (ConnectionState.Closed, cn.State, "#B9");\r
+                       Assert.IsFalse (cn.StatisticsEnabled, "#B10");\r
+                       Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#B11");\r
+               }\r
+\r
                [Test]\r
-               public void DefaultConnectionValues()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Constructor2_ConnectionString_Invalid ()\r
+               {\r
+                       try {\r
+                               new SqlConnection ("InvalidConnectionString");\r
+                               Assert.Fail ("#A1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Format of the initialization string does\r
+                               // not conform to specification starting at\r
+                               // index 0\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                               Assert.IsNull (ex.ParamName, "#A5");\r
+                       }\r
+\r
+                       // invalid keyword\r
+                       try {\r
+                               new SqlConnection ("invalidKeyword=10");\r
+                               Assert.Fail ("#B1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Keyword not supported: 'invalidkeyword'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'invalidkeyword'") != -1, "#B5");\r
+                               Assert.IsNull (ex.ParamName, "#B6");\r
+                       }\r
+\r
+                       // invalid packet size (< minimum)\r
+                       try {\r
+                               new SqlConnection ("Packet Size=511");\r
+                               Assert.Fail ("#C1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid 'Packet Size'.  The value must be an\r
+                               // integer >= 512 and <= 32768\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
+                               Assert.IsNull (ex.InnerException, "#C3");\r
+                               Assert.IsNotNull (ex.Message, "#C4");\r
+                               Assert.IsNull (ex.ParamName, "#C5");\r
+                       }\r
+\r
+                       // invalid packet size (> maximum)\r
+                       try {\r
+                               new SqlConnection ("Packet Size=32769");\r
+                               Assert.Fail ("#D1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid 'Packet Size'.  The value must be an\r
+                               // integer >= 512 and <= 32768\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");\r
+                               Assert.IsNull (ex.InnerException, "#D3");\r
+                               Assert.IsNotNull (ex.Message, "#D4");\r
+                               Assert.IsNull (ex.ParamName, "#D5");\r
+                       }\r
+\r
+                       // negative connect timeout\r
+                       try {\r
+                               new SqlConnection ("Connect Timeout=-1");\r
+                               Assert.Fail ("#E1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'connect timeout'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");\r
+                               Assert.IsNull (ex.InnerException, "#E3");\r
+                               Assert.IsNotNull (ex.Message, "#E4");\r
+                               Assert.IsNull (ex.ParamName, "#E5");\r
+                       }\r
+\r
+                       // negative max pool size\r
+                       try {\r
+                               new SqlConnection ("Max Pool Size=-1");\r
+                               Assert.Fail ("#F1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'max pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#F2");\r
+                               Assert.IsNull (ex.InnerException, "#F3");\r
+                               Assert.IsNotNull (ex.Message, "#F4");\r
+                               Assert.IsNull (ex.ParamName, "#F5");\r
+                       }\r
+\r
+                       // negative min pool size\r
+                       try {\r
+                               new SqlConnection ("Min Pool Size=-1");\r
+                               Assert.Fail ("#G1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'min pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#G2");\r
+                               Assert.IsNull (ex.InnerException, "#G3");\r
+                               Assert.IsNotNull (ex.Message, "#G4");\r
+                               Assert.IsNull (ex.ParamName, "#G5");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void BeginTransaction_Connection_Closed ()\r
                {\r
                        SqlConnection cn = new SqlConnection ();\r
 \r
-                       Assert.AreEqual (15, cn.ConnectionTimeout, \r
-                               "Default connection timeout should be 15 seconds");\r
-                       Assert.AreEqual ("", cn.Database, \r
-                               "Default database name should be empty string");\r
-                       Assert.AreEqual ("", cn.DataSource,\r
-                               "Default data source should be empty string");\r
-                       Assert.AreEqual (8192, cn.PacketSize,\r
-                               "Default packet size should be 8192 bytes");\r
-                       Assert.AreEqual (ConnectionState.Closed, cn.State,\r
-                               "Default connection state should be closed");\r
+                       try {\r
+                               cn.BeginTransaction ();\r
+                               Assert.Fail ("#A1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.BeginTransaction ((IsolationLevel) 666);\r
+                               Assert.Fail ("#B1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.BeginTransaction (IsolationLevel.Serializable);\r
+                               Assert.Fail ("#C1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");\r
+                               Assert.IsNull (ex.InnerException, "#C3");\r
+                               Assert.IsNotNull (ex.Message, "#C4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.BeginTransaction ("trans");\r
+                               Assert.Fail ("#D1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");\r
+                               Assert.IsNull (ex.InnerException, "#D3");\r
+                               Assert.IsNotNull (ex.Message, "#D4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.BeginTransaction ((IsolationLevel) 666, "trans");\r
+                               Assert.Fail ("#E1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");\r
+                               Assert.IsNull (ex.InnerException, "#E3");\r
+                               Assert.IsNotNull (ex.Message, "#E4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.BeginTransaction (IsolationLevel.Serializable, "trans");\r
+                               Assert.Fail ("#F1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");\r
+                               Assert.IsNull (ex.InnerException, "#F3");\r
+                               Assert.IsNotNull (ex.Message, "#F4");\r
+                       }\r
                }\r
 \r
                [Test]\r
-               public void ConnectionTimeoutSynonyms()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ChangeDatabase_Connection_Closed ()\r
                {\r
-                       SqlConnection cn = null;\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "server=SQLSRV";\r
 \r
-                       cn = new SqlConnection ();\r
-                       cn.ConnectionString = "Connection Timeout=25";\r
-                       Assert.AreEqual (25, cn.ConnectionTimeout);\r
+                       try {\r
+                               cn.ChangeDatabase ("database");\r
+                               Assert.Fail ("#1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                       }\r
+               }\r
 \r
-                       cn = new SqlConnection ();\r
-                       cn.ConnectionString = "Connect Timeout=25";\r
-                       Assert.AreEqual (25, cn.ConnectionTimeout);\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ChangePassword_ConnectionString_Empty ()\r
+               {\r
+                       try {\r
+                               SqlConnection.ChangePassword (string.Empty, "mono");\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentNullException ex) {\r
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsNotNull (ex.ParamName, "#5");\r
+                               Assert.IsTrue (ex.ParamName.IndexOf ("'connectionString'") != -1, "#6");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ChangePassword_ConnectionString_Null ()\r
+               {\r
+                       try {\r
+                               SqlConnection.ChangePassword ((string) null, "mono");\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentNullException ex) {\r
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsNotNull (ex.ParamName, "#5");\r
+                               Assert.IsTrue (ex.ParamName.IndexOf ("'connectionString'") != -1, "#6");\r
+                       }\r
+               }\r
+\r
+               \r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ChangePassword_NewPassword_Empty ()\r
+               {\r
+                       try {\r
+                               SqlConnection.ChangePassword ("server=SQLSRV", string.Empty);\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentNullException ex) {\r
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsNotNull (ex.ParamName, "#5");\r
+                               Assert.IsTrue (ex.ParamName.IndexOf ("'newPassword'") != -1, "#6");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ChangePassword_NewPassword_ExceedMaxLength ()\r
+               {\r
+                       try {\r
+                               SqlConnection.ChangePassword ("server=SQLSRV",\r
+                                       new string ('d', 129));\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentException ex) {\r
+                               // The length of argument 'newPassword' exceeds\r
+                               // it's limit of '128'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'newPassword'") != -1, "#5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("128") != -1, "#6");\r
+                               Assert.IsNull (ex.ParamName, "#7");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ChangePassword_NewPassword_Null ()\r
+               {\r
+                       try {\r
+                               SqlConnection.ChangePassword ("server=SQLSRV", (string) null);\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentNullException ex) {\r
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsNotNull (ex.ParamName, "#5");\r
+                               Assert.IsTrue (ex.ParamName.IndexOf ("'newPassword'") != -1, "#6");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ClearPool_Connection_Null ()\r
+               {\r
+                       try {\r
+                               SqlConnection.ClearPool ((SqlConnection) null);\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentNullException ex) {\r
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.AreEqual ("connection", ex.ParamName, "#5");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "server=SQLSRV";\r
+                       Assert.AreEqual ("server=SQLSRV", cn.ConnectionString, "#1");\r
+                       cn.ConnectionString = null;\r
+                       Assert.AreEqual (string.Empty, cn.ConnectionString, "#2");\r
+                       cn.ConnectionString = "server=SQLSRV";\r
+                       Assert.AreEqual ("server=SQLSRV", cn.ConnectionString, "#3");\r
+                       cn.ConnectionString = string.Empty;\r
+                       Assert.AreEqual (string.Empty, cn.ConnectionString, "#4");\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_Value_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+\r
+                       try {\r
+                               cn.ConnectionString = "InvalidConnectionString";\r
+                               Assert.Fail ("#A1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Format of the initialization string does\r
+                               // not conform to specification starting at\r
+                               // index 0\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                               Assert.IsNull (ex.ParamName, "#A5");\r
+                       }\r
+\r
+                       // invalid keyword\r
+                       try {\r
+                               cn.ConnectionString = "invalidKeyword=10";\r
+                               Assert.Fail ("#B1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Keyword not supported: 'invalidkeyword'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'invalidkeyword'") != -1, "#B5");\r
+                               Assert.IsNull (ex.ParamName, "#B6");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void CreateCommand ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       SqlCommand cmd = cn.CreateCommand ();\r
+                       Assert.IsNotNull (cmd, "#1");\r
+                       Assert.AreEqual (string.Empty, cmd.CommandText, "#2");\r
+                       Assert.AreEqual (30, cmd.CommandTimeout, "#3");\r
+                       Assert.AreEqual (CommandType.Text, cmd.CommandType, "#4");\r
+                       Assert.AreSame (cn, cmd.Connection, "#5");\r
+                       Assert.IsNull (cmd.Container, "#6");\r
+                       Assert.IsTrue (cmd.DesignTimeVisible, "#7");\r
+                       Assert.IsNull (cmd.Notification, "#8");\r
+                       Assert.IsTrue (cmd.NotificationAutoEnlist, "#9");\r
+                       Assert.IsNotNull (cmd.Parameters, "#10");\r
+                       Assert.AreEqual (0, cmd.Parameters.Count, "#11");\r
+                       Assert.IsNull (cmd.Site, "#12");\r
+                       Assert.IsNull (cmd.Transaction, "#13");\r
+                       Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#14");\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Dispose ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ("Server=SQLSRV;Database=master;Timeout=25;Packet Size=512;Workstation ID=DUMMY");\r
+                       cn.Dispose ();\r
+\r
+                       Assert.AreEqual (string.Empty, cn.ConnectionString, "#1");\r
+                       Assert.AreEqual (15, cn.ConnectionTimeout, "#2");\r
+                       Assert.AreEqual (string.Empty, cn.Database, "#3");\r
+                       Assert.AreEqual (string.Empty, cn.DataSource, "#4");\r
+                       Assert.AreEqual (8000, cn.PacketSize, "#5");\r
+                       Assert.IsTrue (string.Compare (Environment.MachineName, cn.WorkstationId, true) == 0, "#6");\r
+                       Assert.AreEqual (ConnectionState.Closed, cn.State, "#7");\r
+                       cn.Dispose ();\r
 \r
                        cn = new SqlConnection ();\r
-                       cn.ConnectionString = "Timeout=25";\r
-                       Assert.AreEqual (25, cn.ConnectionTimeout);\r
+                       cn.Dispose ();\r
                }\r
 \r
                [Test]\r
-               public void NetworkLibrarySynonyms()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void GetSchema_Connection_Closed ()\r
                {\r
                        SqlConnection cn = new SqlConnection ();\r
-                       cn.ConnectionString = "Net=DBMSSOCN";\r
-                       cn.ConnectionString = "Network=DBMSSOCN";\r
-                       cn.ConnectionString = "Network library=DBMSSOCN";\r
+\r
+                       try {\r
+                               cn.GetSchema ();\r
+                               Assert.Fail ("#A1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.GetSchema ("Tables");\r
+                               Assert.Fail ("#B1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.GetSchema ((string) null);\r
+                               Assert.Fail ("#C1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");\r
+                               Assert.IsNull (ex.InnerException, "#C3");\r
+                               Assert.IsNotNull (ex.Message, "#C4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.GetSchema ("Tables", new string [] { "master" });\r
+                               Assert.Fail ("#D1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");\r
+                               Assert.IsNull (ex.InnerException, "#D3");\r
+                               Assert.IsNotNull (ex.Message, "#D4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.GetSchema ((string) null, new string [] { "master" });\r
+                               Assert.Fail ("#E1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");\r
+                               Assert.IsNull (ex.InnerException, "#E3");\r
+                               Assert.IsNotNull (ex.Message, "#E4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.GetSchema ("Tables", (string []) null);\r
+                               Assert.Fail ("#F1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");\r
+                               Assert.IsNull (ex.InnerException, "#F3");\r
+                               Assert.IsNotNull (ex.Message, "#F4");\r
+                       }\r
+\r
+                       try {\r
+                               cn.GetSchema ((string) null, (string []) null);\r
+                               Assert.Fail ("#G1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#G2");\r
+                               Assert.IsNull (ex.InnerException, "#G3");\r
+                               Assert.IsNotNull (ex.Message, "#G4");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_AsynchronousProcessing ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Asynchronous Processing=False";\r
+                       cn.ConnectionString = "Async=True";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_ConnectTimeout ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Connection Timeout=45";\r
+                       Assert.AreEqual (45, cn.ConnectionTimeout, "#1");\r
+                       cn.ConnectionString = "Connect Timeout=40";\r
+                       Assert.AreEqual (40, cn.ConnectionTimeout, "#2");\r
+                       cn.ConnectionString = "Timeout=";\r
+                       Assert.AreEqual (15, cn.ConnectionTimeout, "#3");\r
+                       cn.ConnectionString = "Timeout=2147483647";\r
+                       Assert.AreEqual (int.MaxValue, cn.ConnectionTimeout, "#4");\r
+                       cn.ConnectionString = "Timeout=0";\r
+                       Assert.AreEqual (0, cn.ConnectionTimeout, "#5");\r
                }\r
 \r
                [Test]\r
-               public void DatabaseSynonyms()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_ConnectTimeout_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+\r
+                       // negative number\r
+                       try {\r
+                               cn.ConnectionString = "Connection timeout=-1";\r
+                               Assert.Fail ("#A1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'connect timeout'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'connect timeout'") != -1, "#A5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#A6");\r
+                       }\r
+\r
+                       // invalid number\r
+                       try {\r
+                               cn.ConnectionString = "connect Timeout=BB";\r
+                               Assert.Fail ("#B1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'connect timeout'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
+                               Assert.IsNotNull (ex.InnerException, "#B3");\r
+                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#B4");\r
+                               Assert.IsNotNull (ex.Message, "#B5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'connect timeout'") != -1, "#B6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#B7");\r
+\r
+                               // Input string was not in a correct format\r
+                               FormatException fe = (FormatException) ex.InnerException;\r
+                               Assert.IsNull (fe.InnerException, "#B8");\r
+                               Assert.IsNotNull (fe.Message, "#B9");\r
+                       }\r
+\r
+                       // overflow\r
+                       try {\r
+                               cn.ConnectionString = "timeout=2147483648";\r
+                               Assert.Fail ("#C1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'connect timeout'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
+                               Assert.IsNotNull (ex.InnerException, "#C3");\r
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#C4");\r
+                               Assert.IsNotNull (ex.Message, "#C5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'connect timeout'") != -1, "#C6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#C7");\r
+\r
+                               // Value was either too large or too small for an Int32\r
+                               OverflowException oe = (OverflowException) ex.InnerException;\r
+                               Assert.IsNull (oe.InnerException, "#C8");\r
+                               Assert.IsNotNull (oe.Message, "#C9");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_Database_Synonyms ()\r
                {\r
                        SqlConnection cn = null;\r
 \r
@@ -97,7 +674,10 @@ namespace MonoTests.System.Data.SqlClient
                }\r
 \r
                [Test]\r
-               public void DataSourceSynonyms()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_DataSource_Synonyms ()\r
                {\r
                        SqlConnection cn = null;\r
 \r
@@ -123,39 +703,472 @@ namespace MonoTests.System.Data.SqlClient
                }\r
 \r
                [Test]\r
-               public void OtherConnectionStringKeywords()\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_MaxPoolSize ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Max Pool Size=2147483647";\r
+                       cn.ConnectionString = "Max Pool Size=1";\r
+                       cn.ConnectionString = "Max Pool Size=500";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_MaxPoolSize_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+\r
+                       // negative number\r
+                       try {\r
+                               cn.ConnectionString = "Max Pool Size=-1";\r
+                               Assert.Fail ("#A1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'max pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'max pool size'") != -1, "#A5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#A6");\r
+                       }\r
+\r
+                       // invalid number\r
+                       try {\r
+                               cn.ConnectionString = "max Pool size=BB";\r
+                               Assert.Fail ("#B1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'max pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
+                               Assert.IsNotNull (ex.InnerException, "#B3");\r
+                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#B4");\r
+                               Assert.IsNotNull (ex.Message, "#B5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'max pool size'") != -1, "#B6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#B7");\r
+\r
+                               // Input string was not in a correct format\r
+                               FormatException fe = (FormatException) ex.InnerException;\r
+                               Assert.IsNull (fe.InnerException, "#B8");\r
+                               Assert.IsNotNull (fe.Message, "#B9");\r
+                       }\r
+\r
+                       // overflow\r
+                       try {\r
+                               cn.ConnectionString = "max pool size=2147483648";\r
+                               Assert.Fail ("#C1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'max pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
+                               Assert.IsNotNull (ex.InnerException, "#C3");\r
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#C4");\r
+                               Assert.IsNotNull (ex.Message, "#C5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'max pool size'") != -1, "#C6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#C7");\r
+\r
+                               // Value was either too large or too small for an Int32\r
+                               OverflowException oe = (OverflowException) ex.InnerException;\r
+                               Assert.IsNull (oe.InnerException, "#C8");\r
+                               Assert.IsNotNull (oe.Message, "#C9");\r
+                       }\r
+\r
+                       // less than minimum (1)\r
+                       try {\r
+                               cn.ConnectionString = "Min Pool Size=0;Max Pool Size=0";\r
+                               Assert.Fail ("#D1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'max pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");\r
+                               Assert.IsNull (ex.InnerException, "#D3");\r
+                               Assert.IsNotNull (ex.Message, "#D4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'max pool size'") != -1, "#D5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#D6");\r
+                       }\r
+\r
+                       // less than min pool size\r
+                       try {\r
+                               cn.ConnectionString = "Min Pool Size=5;Max Pool Size=4";\r
+                               Assert.Fail ("#E1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid min or max pool size values, min\r
+                               // pool size cannot be greater than the max\r
+                               // pool size\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");\r
+                               Assert.IsNull (ex.InnerException, "#E3");\r
+                               Assert.IsNotNull (ex.Message, "#E4");\r
+                               Assert.IsNull (ex.ParamName, "#E5");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_MinPoolSize ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "min Pool size=0";\r
+                       cn.ConnectionString = "Min Pool size=100";\r
+                       cn.ConnectionString = "Min Pool Size=2147483647;Max Pool Size=2147483647";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_MinPoolSize_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+\r
+                       // negative number\r
+                       try {\r
+                               cn.ConnectionString = "Min Pool Size=-1";\r
+                               Assert.Fail ("#A1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'min pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'min pool size'") != -1, "#A5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#A6");\r
+                       }\r
+\r
+                       // invalid number\r
+                       try {\r
+                               cn.ConnectionString = "min Pool size=BB";\r
+                               Assert.Fail ("#B1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'min pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
+                               Assert.IsNotNull (ex.InnerException, "#B3");\r
+                               Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#B4");\r
+                               Assert.IsNotNull (ex.Message, "#B5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'min pool size'") != -1, "#B6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#B7");\r
+\r
+                               // Input string was not in a correct format\r
+                               FormatException fe = (FormatException) ex.InnerException;\r
+                               Assert.IsNull (fe.InnerException, "#B8");\r
+                               Assert.IsNotNull (fe.Message, "#B9");\r
+                       }\r
+\r
+                       // overflow\r
+                       try {\r
+                               cn.ConnectionString = "min pool size=2147483648";\r
+                               Assert.Fail ("#C1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'min pool size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
+                               Assert.IsNotNull (ex.InnerException, "#C3");\r
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#C4");\r
+                               Assert.IsNotNull (ex.Message, "#C5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'min pool size'") != -1, "#C6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#C7");\r
+\r
+                               // Value was either too large or too small for an Int32\r
+                               OverflowException oe = (OverflowException) ex.InnerException;\r
+                               Assert.IsNull (oe.InnerException, "#C8");\r
+                               Assert.IsNotNull (oe.Message, "#C9");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_MultipleActiveResultSets ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "MultipleActiveResultSets=true";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_MultipleActiveResultSets_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       try {\r
+                               cn.ConnectionString = "MultipleActiveResultSets=1";\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'multipleactiveresultsets'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'multipleactiveresultsets'") != -1, "#5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#6");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_NetworkLibrary_Synonyms ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Net=DBMSSOCN";\r
+                       cn.ConnectionString = "Network=DBMSSOCN";\r
+                       cn.ConnectionString = "Network library=DBMSSOCN";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_PacketSize ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Packet Size=1024";\r
+                       Assert.AreEqual (1024, cn.PacketSize, "#1");\r
+                       cn.ConnectionString = "packet SizE=533";\r
+                       Assert.AreEqual (533, cn.PacketSize, "#2");\r
+                       cn.ConnectionString = "packet SizE=512";\r
+                       Assert.AreEqual (512, cn.PacketSize, "#3");\r
+                       cn.ConnectionString = "packet SizE=32768";\r
+                       Assert.AreEqual (32768, cn.PacketSize, "#4");\r
+                       cn.ConnectionString = "packet Size=";\r
+                       Assert.AreEqual (8000, cn.PacketSize, "#5");\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_PacketSize_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+\r
+                       // invalid packet size (< minimum)\r
+                       try {\r
+                               cn.ConnectionString = "Packet Size=511";\r
+                               Assert.Fail ("#A1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid 'Packet Size'.  The value must be an\r
+                               // integer >= 512 and <= 32768\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'Packet Size'") != -1, "#A5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#A6");\r
+                       }\r
+\r
+                       // invalid packet size (> maximum)\r
+                       try {\r
+                               cn.ConnectionString = "packet SIze=32769";\r
+                               Assert.Fail ("#B1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid 'Packet Size'.  The value must be an\r
+                               // integer >= 512 and <= 32768\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'Packet Size'") != -1, "#B5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#B6");\r
+                       }\r
+\r
+                       // overflow\r
+                       try {\r
+                               cn.ConnectionString = "packet SIze=2147483648";\r
+                               Assert.Fail ("#C1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'packet size'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");\r
+                               Assert.IsNotNull (ex.InnerException, "#C3");\r
+                               Assert.AreEqual (typeof (OverflowException), ex.InnerException.GetType (), "#C4");\r
+                               Assert.IsNotNull (ex.Message, "#C5");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'packet size'") != -1, "#C6:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#C7");\r
+\r
+                               // Value was either too large or too small for an Int32\r
+                               OverflowException oe = (OverflowException) ex.InnerException;\r
+                               Assert.IsNull (oe.InnerException, "#C8");\r
+                               Assert.IsNotNull (oe.Message, "#C9");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_Password_Synonyms ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Password=scrambled";\r
+                       cn.ConnectionString = "Pwd=scrambled";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_PersistSecurityInfo_Synonyms ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "Persist Security Info=true";\r
+                       cn.ConnectionString = "PersistSecurityInfo=true";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_UserID_Synonyms ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "User Id=test";\r
+                       cn.ConnectionString = "User=test";\r
+                       cn.ConnectionString = "Uid=test";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_UserInstance ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "User Instance=true";\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_UserInstance_Invalid ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       try {\r
+                               cn.ConnectionString = "User Instance=1";\r
+                               Assert.Fail ("#1");\r
+                       } catch (ArgumentException ex) {\r
+                               // Invalid value for key 'user instance'\r
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                               Assert.IsTrue (ex.Message.IndexOf ("'user instance'") != -1, "#5:" + ex.Message);\r
+                               Assert.IsNull (ex.ParamName, "#6");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ConnectionString_OtherKeywords ()\r
                {\r
                        SqlConnection cn = new SqlConnection ();\r
                        cn.ConnectionString = "Application Name=test";\r
                        cn.ConnectionString = "App=test";\r
-                       cn.ConnectionString = "Connection LifeTime=1000";\r
                        cn.ConnectionString = "Connection Reset=true";\r
                        cn.ConnectionString = "Current Language=test";\r
                        cn.ConnectionString = "Language=test";\r
                        cn.ConnectionString = "Encrypt=false";\r
+                       //cn.ConnectionString = "Encrypt=true";\r
+                       //cn.ConnectionString = "Enlist=false";\r
                        cn.ConnectionString = "Enlist=true";\r
                        cn.ConnectionString = "Integrated Security=true";\r
                        cn.ConnectionString = "Trusted_connection=true";\r
                        cn.ConnectionString = "Max Pool Size=10";\r
                        cn.ConnectionString = "Min Pool Size=10";\r
-                       cn.ConnectionString = "Password=scrambled";\r
-                       cn.ConnectionString = "Pwd=scrambled";\r
                        cn.ConnectionString = "Pooling=true";\r
-                       cn.ConnectionString = "User Id=test";\r
-                       cn.ConnectionString = "User=test";\r
-                       cn.ConnectionString = "Uid=test";\r
-                       /*\r
-                        * NOT IMPLEMENTED YET\r
-                        */\r
-                       /*\r
-                       cn.ConnectionString = "Persist Security Info=true";\r
-                       cn.ConnectionString = "PersistSecurityInfo=true";\r
-                       cn.ConnectionString = "Encrypt=true";\r
-                       cn.ConnectionString = "Enlist=false";\r
                        cn.ConnectionString = "attachdbfilename=dunno";\r
                        cn.ConnectionString = "extended properties=dunno";\r
                        cn.ConnectionString = "initial file name=dunno";\r
-                       */\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Open_ConnectionString_Empty ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = string.Empty;\r
+\r
+                       try {\r
+                               cn.Open ();\r
+                               Assert.Fail ("#1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // The ConnectionString property has not been\r
+                               // initialized\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Open_ConnectionString_Null ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = null;\r
+\r
+                       try {\r
+                               cn.Open ();\r
+                               Assert.Fail ("#1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // The ConnectionString property has not been\r
+                               // initialized\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void Open_ConnectionString_Whitespace ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       cn.ConnectionString = "    ";\r
+\r
+                       try {\r
+                               cn.Open ();\r
+                               Assert.Fail ("#1");\r
+                       } catch (InvalidOperationException ex) {\r
+                               // The ConnectionString property has not been\r
+                               // initialized\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");\r
+                               Assert.IsNull (ex.InnerException, "#3");\r
+                               Assert.IsNotNull (ex.Message, "#4");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+#if FEATURE_NO_BSD_SOCKETS\r
+               [ExpectedException (typeof (PlatformNotSupportedException))]\r
+#endif\r
+               public void ServerVersion_Connection_Closed ()\r
+               {\r
+                       SqlConnection cn = new SqlConnection ();\r
+                       try {\r
+                               Assert.Fail ("#A1:" + cn.ServerVersion);\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");\r
+                               Assert.IsNull (ex.InnerException, "#A3");\r
+                               Assert.IsNotNull (ex.Message, "#A4");\r
+                       }\r
+\r
+                       cn = new SqlConnection ("server=SQLSRV; database=Mono;");\r
+                       try {\r
+                               Assert.Fail ("#B1:" + cn.ServerVersion);\r
+                       } catch (InvalidOperationException ex) {\r
+                               // Invalid operation. The connection is closed\r
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");\r
+                               Assert.IsNull (ex.InnerException, "#B3");\r
+                               Assert.IsNotNull (ex.Message, "#B4");\r
+                       }\r
                }\r
        }\r
 }\r
+\r