public void ExecuteReader_SimpleCommand_ResultOk_LoggedAsDebug()
        {
            var logSpy = new StringLogger();

            // act
            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), logSpy);

            connection.Open();
            var queryCommand = connection.CreateCommand();

            queryCommand.CommandText = @"
SELECT 1
UNION 
SELECT 2";

            using var reader = queryCommand.ExecuteReader();

            Assert.True(reader.Read());
            Assert.Equal(1, reader.GetInt64(0));
            Assert.True(reader.Read());
            Assert.Equal(2, reader.GetInt64(0));
            Assert.False(reader.Read());

            Assert.Contains(queryCommand.CommandText, logSpy.Logs[LogLevel.Debug]);
        }
        public void ExecuteScalar_CommandWithParameter_ResultOk_LoggedAsDebug()
        {
            var logSpy = new StringLogger();

            // act
            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), logSpy);
            connection.Open();
            var queryCommand = connection.CreateCommand();

            queryCommand.CommandText = "SELECT @myparameter";

            var param = queryCommand.CreateParameter();

            param.DbType        = System.Data.DbType.String;
            param.ParameterName = "@myparameter";
            param.Value         = "SomeText";
            queryCommand.Parameters.Add(param);

            var result = (string)queryCommand.ExecuteScalar();

            var debugLogs = logSpy.Logs[LogLevel.Debug];

            Assert.Equal("SomeText", result);
            Assert.Contains(queryCommand.CommandText, debugLogs);
            Assert.Contains("myparameter", debugLogs);
            Assert.Contains("SomeText", debugLogs);
        }
Example #3
0
    public static IDbConnection ToLoggedDbConnection(this IDbConnection connection)
    {
        Assert.IsNotNull(connection);
        var loggedDbConnection = new LoggedDbConnection(connection);
        var logger             = new DbConnectionLogger(loggedDbConnection);

        return(loggedDbConnection);
    }
    public static IDbConnection ToLoggedDbConnection(this IDbConnection connection)
    {
        ArgumentNullException.ThrowIfNull(connection);
        var loggedDbConnection = new LoggedDbConnection(connection);
        var logger             = new DbConnectionLogger(loggedDbConnection);

        return(loggedDbConnection);
    }
        public void CommandTimeout_IsPassedToInnerCommand()
        {
            var cmdTimeout = 90;

            // act
            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), new StringLogger(), cmdTimeout);
            var queryCommand = connection.CreateCommand();

            Assert.Equal(cmdTimeout, queryCommand.CommandTimeout);
        }
    public DbConnectionLogger(LoggedDbConnection connection)
    {
        Assert.IsNotNull(connection);

        _connection = connection;

        connection.BeforeOpen          += ConnectionBeforeOpen;
        connection.AfterOpen           += ConnectionAfterOpen;
        connection.BeforeExecuteReader += ConnectionBeforeExecuteReader;
        connection.AfterExecuteReader  += ConnectionAfterExecuteReader;
        connection.AfterRead           += ConnectionAfterRead;
    }
Example #7
0
    public DbConnectionLogger(LoggedDbConnection connection)
    {
        ArgumentNullException.ThrowIfNull(connection);

        _connection = connection;

        connection.BeforeOpen          += ConnectionBeforeOpen;
        connection.AfterOpen           += ConnectionAfterOpen;
        connection.BeforeExecuteReader += ConnectionBeforeExecuteReader;
        connection.AfterExecuteReader  += ConnectionAfterExecuteReader;
        connection.AfterRead           += ConnectionAfterRead;
    }
        public void ExecuteNonQuery_SimpleCommand_ResultOk_LoggedAsDebug()
        {
            var logSpy = new StringLogger();

            // act
            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), logSpy);
            connection.Open();

            var queryCommand = connection.CreateCommand();

            queryCommand.CommandText = "DROP TABLE IF EXISTS People";
            queryCommand.ExecuteNonQuery();

            Assert.Contains(queryCommand.CommandText, logSpy.Logs[LogLevel.Debug]);
        }
        public void Ensure_Passthrough_Properties()
        {
            var innerCnx  = new SqliteConnection(connectionString);
            var loggedCnx = new LoggedDbConnection(innerCnx, new StringLogger());

            Assert.Equal(loggedCnx.ServerVersion, innerCnx.ServerVersion);
            Assert.Equal(loggedCnx.Database, innerCnx.Database);
            Assert.Equal(loggedCnx.State, innerCnx.State);
            Assert.Equal(loggedCnx.DataSource, innerCnx.DataSource);
            Assert.Equal(loggedCnx.Database, innerCnx.Database);
            Assert.Equal(loggedCnx.ConnectionString, innerCnx.ConnectionString);

            loggedCnx.ConnectionString = "Data Source = InMemorySample2; Mode = Memory;";
            Assert.Equal(loggedCnx.ConnectionString, innerCnx.ConnectionString);
        }
Example #10
0
        static void Main(string[] args)
        {
            ILogger consoleLogger = new ConsoleLogger();

            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), consoleLogger);
            connection.Open();

            var queryCommand = connection.CreateCommand();

            queryCommand.CommandText = "SELECT @name, @age";
            queryCommand.Parameters.AddRange(new[] {
                new SqliteParameter("@name", "Bob"),
                new SqliteParameter("@age", 28)
            });
            var result = queryCommand.ExecuteScalar();
        }
        public void ExecuteScalar_SimpleCommand_ResultOk_LoggedAsDebug()
        {
            var logSpy = new StringLogger();

            // act
            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), logSpy);
            connection.Open();

            var queryCommand = connection.CreateCommand();

            queryCommand.CommandText = "SELECT 1";
            var result = (long)queryCommand.ExecuteScalar();

            Assert.Equal(1, result);
            Assert.Contains(queryCommand.CommandText, logSpy.Logs[LogLevel.Debug]);
        }
        public void Ensure_Passthrough_Properties_And_Methods_Called()
        {
            var logger   = new Mock <ILogger>();
            var dbCmdSpy = new Mock <DbConnection>()
            {
                CallBase = true, DefaultValue = DefaultValue.Mock
            };
            var loggedCnx = new LoggedDbConnection(dbCmdSpy.Object, logger.Object);

            loggedCnx.Open();
            dbCmdSpy.Verify(p => p.Open(), Times.Once);

            loggedCnx.Close();
            dbCmdSpy.Verify(p => p.Close(), Times.Once);

            loggedCnx.ChangeDatabase("db");
            dbCmdSpy.Verify(p => p.ChangeDatabase("db"), Times.Once);

            loggedCnx.ConnectionString = "abc";
            dbCmdSpy.VerifySet(p => p.ConnectionString = "abc", Times.Once);

            _ = loggedCnx.Database;
            dbCmdSpy.VerifyGet(p => p.Database, Times.Once);

            _ = loggedCnx.State;
            dbCmdSpy.VerifyGet(p => p.State, Times.Once);

            _ = loggedCnx.DataSource;
            dbCmdSpy.VerifyGet(p => p.DataSource, Times.Once);

            _ = loggedCnx.ServerVersion;
            dbCmdSpy.VerifyGet(p => p.ServerVersion, Times.Once);

            var protectedMock = dbCmdSpy.Protected().As <DbConnectionProtectedMembers>();

            loggedCnx.BeginTransaction();
            protectedMock.Verify(p => p.BeginDbTransaction(IsolationLevel.Unspecified), Times.Once());

            loggedCnx.CreateCommand();
            protectedMock.Verify(p => p.CreateDbCommand(), Times.Once());
        }
        public void ExecuteScalar_SyntaxError_LoggedAsError()
        {
            var logSpy = new StringLogger();

            // act
            using var connection = new LoggedDbConnection(new SqliteConnection(connectionString), logSpy);

            connection.Open();
            var queryCommand = connection.CreateCommand();

            queryCommand.CommandText = "SELEC_error 1";

            try
            {
                var result = (long)queryCommand.ExecuteScalar();
            }
            catch (Exception ex)
            {
                Assert.Contains("syntax error", ex.Message);
            }

            Assert.Contains(queryCommand.CommandText, logSpy.Logs[LogLevel.Debug]);
            Assert.Contains(queryCommand.CommandText, logSpy.Logs[LogLevel.Error]);
        }