| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- //
- // OdbcDataReaderTest.cs - NUnit Test Cases for testing the
- // OdbcDataReader class
- //
- // Author:
- // Sureshkumar T ([email protected])
- //
- // 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.Data;
- using System.Data.Odbc;
- using NUnit.Framework;
- namespace MonoTests.System.Data.Odbc
- {
- [TestFixture]
- public class OdbcDataReaderTest : MySqlOdbcBaseClient
- {
-
- [SetUp]
- public void GetReady () {
- OpenConnection ();
- CreateTestSetup (); // create database & test tables
- }
- [TearDown]
- public void Clean () {
- CleanTestSetup (); // clean test database;
- CloseConnection ();
- }
- /// <summary>
- /// Tests the return value of GetByte method of OdbcDataReader
- /// </summary>
- [Test]
- public void GetByteTest ()
- {
- OdbcDataReader reader = null;
- try {
- // For this Test, you must create sample table
- // called test, with a column of name 'col_int'.
- // and the table with atleast a row with a minimum value for col_int as 0xff
- // This tries to read a int column using GetByte method
- OdbcCommand cmd = conn.CreateCommand ();
- string query = "select col_int from test order by col_int;";
- cmd.CommandText = query;
- reader = cmd.ExecuteReader ();
- if (reader.Read ()) {
- byte b = reader.GetByte (0);
- Assertion.AssertEquals ("GetByte returns wrong result!", 0xff, b);
- } else // This should not happen while testing
- Assertion.AssertEquals ("test table doens not have a test data!", true, true);
- } finally { // try/catch is necessary to gracefully close connections
- if (reader != null && reader.IsClosed)
- reader.Close ();
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- /// <summary>
- /// Tests the return column type of data reader
- /// To test the bugzilla id 49340
- /// </summary>
- [Test]
- public void ColumnDataTypeTest ()
- {
- OdbcCommand dbcmd = conn.CreateCommand ();
- string sql = "SELECT * from test";
- dbcmd.CommandText = sql;
- IDataReader reader = dbcmd.ExecuteReader ();
- try {
- Assertion.AssertEquals ("GetDataTypeName returns invalid Type for column #1",
- "TinyInt", reader.GetDataTypeName (0));
- Assertion.AssertEquals ("GetDataTypeName returns invalid Type for column #2",
- "VarChar", reader.GetDataTypeName (1));
- // Test via method GetFieldType.ToString
- Assertion.AssertEquals ("GetFieldType returns invalid Type for column #1",
- "System.Byte", reader.GetFieldType (0).ToString ());
- Assertion.AssertEquals ("GetFieldType returns invalid Type for column #2",
- "System.String", reader.GetFieldType (1).ToString ());
- // Test via method GetSchemaTable
- reader = dbcmd.ExecuteReader ();
- DataTable schemaTable = reader.GetSchemaTable ();
- Assertion.AssertEquals ("GetSchemaTable.ColumnDataType failes for column #1",
- typeof (System.Byte), schemaTable.Rows [0]["DataType"]);
- Assertion.AssertEquals ("GetSchemaTable.ColumnDataType failes for column #1",
- typeof (System.String), schemaTable.Rows [1]["DataType"]);
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed)
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- [Test]
- public void GetNameTest ()
- {
- OdbcCommand dbcmd = conn.CreateCommand ();
- string sql = "SELECT * from test";
- dbcmd.CommandText = sql;
- OdbcDataReader reader = dbcmd.ExecuteReader ();
- try {
- Assertion.AssertEquals ("GetName failes ", "pk_tint", reader.GetName (0));
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed)
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- [Test]
- public void GetBytesTest ()
- {
- OdbcCommand cmd = conn.CreateCommand ();
- string sql = "SELECT * FROM test";
- cmd.CommandText = sql;
- OdbcDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess);
- try {
- if (reader.Read ()) {
- // Get By Parts for the column blob
- int totalsize = 100;
- int buffsize = 5;
- int buffstart = 0;
- long retval = 0;
- long start = 0;
- byte [] val = new byte [totalsize];
- retval = reader.GetBytes (3, start, val, buffstart, buffsize);
- while (retval == buffsize) {
- start += buffsize;
- buffstart += buffsize;
- retval = reader.GetBytes (3, start, val, buffstart, buffsize);
- }
- buffstart += (int) retval;
- // assemble here.
- string col = System.Text.Encoding.Default.GetString (val, 0, buffstart);
-
- Assertion.AssertEquals ("The assembled value length does not match",
- 39, col.Length);
- }
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed)
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- [Test]
- public void GetBytesNullBufferTest ()
- {
- OdbcCommand cmd = conn.CreateCommand ();
- string sql = "SELECT * FROM test";
- cmd.CommandText = sql;
- OdbcDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess);
- try {
- if (reader.Read ()) {
- Assertion.AssertEquals ("GetBytes on a fixed length column does not work!",
- 11, reader.GetBytes (1,0,null,0,0));
- Assertion.AssertEquals ("GetBytes with non null column does not work!",
- 39, reader.GetBytes (3,0,null,0,0));
- }
- // for null value, length in bytes should return 0
- if (reader.Read ())
- Assertion.AssertEquals ("GetBytes with null column does not return -1" ,
- -1, reader.GetBytes (3,0,null,0,0));
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed )
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- [Test]
- public void GetValueBinaryTest ()
- {
- OdbcCommand cmd = conn.CreateCommand ();
- string sql = "SELECT * FROM test";
- cmd.CommandText = sql;
- OdbcDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess);
- try {
- if (reader.Read ()) {
- object ob = reader.GetValue (3);
- Assertion.AssertEquals ("Type of binary column is wrong!",
- "System.Byte[]", ob.GetType ().ToString () );
- }
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed )
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- [Test]
- public void GetDateTimeTest ()
- {
- OdbcCommand cmd = conn.CreateCommand ();
- string sql = "SELECT * FROM test";
- cmd.CommandText = sql;
- OdbcDataReader reader = cmd.ExecuteReader (CommandBehavior.Default);
- try {
- if (reader.Read ()) {
- object ob = reader["col_datetime"];
- Assertion.AssertEquals ("Type of datetime column is wrong!",
- "System.DateTime", ob.GetType ().ToString () );
- ob = reader["col_date"];
- Assertion.AssertEquals ("Type of date column is wrong!",
- "System.DateTime", ob.GetType ().ToString () );
- // FIXME : Once TIME data type is fixed, enable this check
- //ob = reader["col_time"];
- //Assertion.AssertEquals ("Type of time column is wrong!",
- //"System.DateTime", ob.GetType ().ToString () );
- DateTime dt = reader.GetDateTime (4);
- Assertion.AssertEquals ("DateValue (SQL_TIMESTAMP) is wrong", new DateTime (2004, 8, 22, 0, 0, 0), dt);
- dt = reader.GetDateTime (5);
- Assertion.AssertEquals ("DateValue (SQL_DATE) is wrong", new DateTime (2004, 8, 22, 0, 0, 0), dt);
- // FIXME : Once TIME data type is fixed, enable this check
- //dt = reader.GetDateTime (7);
- //Assertion.AssertEquals ("DateValue is wrong", "2004-08-22", dt.ToString ());
- }
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed )
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
-
- [Test]
- public void NumericTest()
- {
- using(IDbConnection dbConnection = new OdbcConnection
- (connectionString))
- {
- dbConnection.Open();
- IDbCommand dbCommand = dbConnection.CreateCommand();
- //note this will fail if the table already exists, ie if the test has failed.
- dbCommand.CommandText = "CREATE TABLE NumericTable (NumericField NUMERIC(10) NOT NULL)";
- dbCommand.ExecuteNonQuery();
- dbCommand.CommandText = "INSERT INTO NumericTable (NumericField) VALUES (125)";
- dbCommand.ExecuteNonQuery();
- dbCommand.CommandText = "SELECT * FROM NumericTable";
- using(IDataReader reader = dbCommand.ExecuteReader())
- {
- while(reader.Read())
- {
- for(int index = 0; index < reader.FieldCount; index++)
- {
- Object dataValue = reader.GetValue(index);
- Assert.AreEqual("System.Decimal",dataValue.GetType().ToString());
- Assert.AreEqual("125", dataValue.ToString());
- }
- }
- }
- dbCommand.CommandText = "DROP TABLE NumericTable";
- dbCommand.ExecuteNonQuery();
- }
- }
- /// <summary>
- /// This test for the return type & value for GetValue
- /// in case of Odbc Data type TINYINT
- /// </summary>
- [Test]
- public void TinyIntTest ()
- {
- OdbcCommand cmd = conn.CreateCommand ();
- string sql = "SELECT * FROM test";
- cmd.CommandText = sql;
- OdbcDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess);
- try {
- if (reader.Read ()) {
- object ob = reader.GetValue (0);
- Assertion.AssertEquals ("Type of tinyInt column is wrong!",
- "System.Byte", ob.GetType ().ToString () );
- Assertion.AssertEquals ("Value of tinyInt column is wrong!",
- 1, System.Convert.ToInt16(ob) );
- }
- } finally {
- // clean up
- if (reader != null && !reader.IsClosed )
- reader.Close ();
- reader = null;
- CleanTestSetup ();
- CloseConnection ();
- }
- }
- }
- }
|