211 lines
6.6 KiB
C#
Raw Normal View History

// 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");
}
}
}