211 lines
6.6 KiB
C#
211 lines
6.6 KiB
C#
// IDbCommandTest.cs - NUnit Test Cases for testing the
|
|
// IDbCommand implemented classes.
|
|
//
|
|
// Authors:
|
|
// Sureshkumar T (tsureshkumar@novell.com)
|
|
//
|
|
// Copyright (c) 2004 Novell Inc., and the individuals listed on the
|
|
// ChangeLog entries.
|
|
//
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person
|
|
// obtaining a copy of this software and associated documentation
|
|
// files (the "Software"), to deal in the Software without
|
|
// restriction, including without limitation the rights to use, copy,
|
|
// modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
// of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
// SOFTWARE.using System;
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
using NUnit.Framework;
|
|
|
|
namespace MonoTests.System.Data.Connected
|
|
{
|
|
[TestFixture]
|
|
[Category ("odbc"), Category ("sqlserver")]
|
|
public class CommandTest
|
|
{
|
|
IDbConnection conn;
|
|
IDbCommand cmd;
|
|
|
|
[SetUp]
|
|
public void SetUp ()
|
|
{
|
|
conn = ConnectionManager.Instance.Sql.Connection;
|
|
cmd = conn.CreateCommand ();
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown ()
|
|
{
|
|
if (cmd != null)
|
|
cmd.Dispose ();
|
|
ConnectionManager.Instance.Close ();
|
|
}
|
|
|
|
[Test]
|
|
public void ExecuteNonQuery_CommandText_Empty ()
|
|
{
|
|
try {
|
|
cmd.ExecuteNonQuery ();
|
|
Assert.Fail ("#A1");
|
|
} catch (InvalidOperationException ex) {
|
|
// ExecuteNonQuery: CommandText property
|
|
// has not been initialized
|
|
Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
|
|
Assert.IsNull (ex.InnerException, "#A3");
|
|
Assert.IsNotNull (ex.Message, "#A4");
|
|
Assert.IsTrue (ex.Message.StartsWith ("ExecuteNonQuery"), "#A5:" + ex.Message);
|
|
}
|
|
|
|
cmd.CommandText = string.Empty;
|
|
|
|
try {
|
|
cmd.ExecuteNonQuery ();
|
|
Assert.Fail ("#B1");
|
|
} catch (InvalidOperationException ex) {
|
|
// ExecuteNonQuery: CommandText property
|
|
// has not been initialized
|
|
Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
|
|
Assert.IsNull (ex.InnerException, "#B3");
|
|
Assert.IsNotNull (ex.Message, "#B4");
|
|
Assert.IsTrue (ex.Message.StartsWith ("ExecuteNonQuery"), "#B5:" + ex.Message);
|
|
}
|
|
|
|
cmd.CommandText = null;
|
|
|
|
try {
|
|
cmd.ExecuteNonQuery ();
|
|
Assert.Fail ("#C1");
|
|
} catch (InvalidOperationException ex) {
|
|
// ExecuteNonQuery: CommandText property
|
|
// has not been initialized
|
|
Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
|
|
Assert.IsNull (ex.InnerException, "#C3");
|
|
Assert.IsNotNull (ex.Message, "#C4");
|
|
Assert.IsTrue (ex.Message.StartsWith ("ExecuteNonQuery"), "#C5:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void ExecuteReader_CommandText_Empty ()
|
|
{
|
|
try {
|
|
cmd.ExecuteReader ();
|
|
Assert.Fail ("#A1");
|
|
} catch (InvalidOperationException ex) {
|
|
// ExecuteReader: CommandText property
|
|
// has not been initialized
|
|
Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
|
|
Assert.IsNull (ex.InnerException, "#A3");
|
|
Assert.IsNotNull (ex.Message, "#A4");
|
|
Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#A5:" + ex.Message);
|
|
}
|
|
|
|
cmd.CommandText = string.Empty;
|
|
|
|
try {
|
|
cmd.ExecuteReader ();
|
|
Assert.Fail ("#B1");
|
|
} catch (InvalidOperationException ex) {
|
|
// ExecuteReader: CommandText property
|
|
// has not been initialized
|
|
Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
|
|
Assert.IsNull (ex.InnerException, "#B3");
|
|
Assert.IsNotNull (ex.Message, "#B4");
|
|
Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#B5:" + ex.Message);
|
|
}
|
|
|
|
cmd.CommandText = null;
|
|
|
|
try {
|
|
cmd.ExecuteReader ();
|
|
Assert.Fail ("#C1");
|
|
} catch (InvalidOperationException ex) {
|
|
// ExecuteReader: CommandText property
|
|
// has not been initialized
|
|
Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
|
|
Assert.IsNull (ex.InnerException, "#C3");
|
|
Assert.IsNotNull (ex.Message, "#C4");
|
|
Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#C5:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
[Test] // bug #462947
|
|
public void ExecuteReader_Connection_Reuse ()
|
|
{
|
|
cmd.CommandText = "SELECT type_blob FROM binary_family where id = 1";
|
|
|
|
CommandBehavior behavior = CommandBehavior.SequentialAccess |
|
|
CommandBehavior.SingleResult;
|
|
|
|
using (IDataReader reader = cmd.ExecuteReader (behavior)) {
|
|
Assert.IsTrue (reader.Read (), "#A1");
|
|
|
|
long totalsize = reader.GetBytes (0, 0, null, 0, 0);
|
|
byte [] val = new byte [totalsize];
|
|
long ret = reader.GetBytes (0, 0, val, 0, val.Length);
|
|
Assert.AreEqual (5, ret, "#A2");
|
|
Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#A3");
|
|
}
|
|
|
|
ConnectionManager.Instance.Sql.CloseConnection ();
|
|
conn = ConnectionManager.Instance.Sql.Connection;
|
|
|
|
using (IDataReader reader = cmd.ExecuteReader (behavior)) {
|
|
Assert.IsTrue (reader.Read (), "#B1");
|
|
|
|
long totalsize = reader.GetBytes (0, 0, null, 0, 0);
|
|
byte [] val = new byte [totalsize];
|
|
long ret = reader.GetBytes (0, 0, val, 0, val.Length);
|
|
Assert.AreEqual (5, ret, "#B2");
|
|
Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#B3");
|
|
}
|
|
|
|
using (IDataReader reader = cmd.ExecuteReader (behavior)) {
|
|
Assert.IsTrue (reader.Read (), "#C");
|
|
}
|
|
|
|
ConnectionManager.Instance.Sql.CloseConnection ();
|
|
conn = ConnectionManager.Instance.Sql.Connection;
|
|
|
|
|
|
using (IDataReader reader = cmd.ExecuteReader (behavior)) {
|
|
Assert.IsTrue (reader.Read (), "#D");
|
|
}
|
|
|
|
using (IDataReader reader = cmd.ExecuteReader (behavior)) {
|
|
Assert.IsTrue (reader.Read (), "#E");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void ExecuteScalar ()
|
|
{
|
|
cmd.CommandText = "select count(*) from employee where id < 3";
|
|
Assert.AreEqual (2, (int) Convert.ChangeType (cmd.ExecuteScalar (),
|
|
typeof (int)),
|
|
"#1");
|
|
cmd.Dispose ();
|
|
|
|
cmd = conn.CreateCommand ();
|
|
cmd.CommandText = "select id from employee where id = 666";
|
|
Assert.IsNull (cmd.ExecuteScalar (), "#2");
|
|
}
|
|
}
|
|
}
|