Exemple #1
0
        public override IMessage Invoke(IMessage msg)
        {
            IMethodCallMessage methodMessage = new MethodCallMessageWrapper((IMethodCallMessage)msg);

            ExecuteType executeType = GetExecuteType(methodMessage);

            if (executeType != ExecuteType.None)
            {
                profiler.ExecuteStart(instance, executeType);
            }

            object returnValue = methodMessage.MethodBase.Invoke(instance, methodMessage.Args);

            if (executeType == ExecuteType.Reader)
            {
                returnValue = new ProfiledDbDataReader((DbDataReader)returnValue, instance.Connection, profiler);
            }

            IMessage returnMessage = new ReturnMessage(returnValue, methodMessage.Args, methodMessage.ArgCount,
                                                       methodMessage.LogicalCallContext, methodMessage);

            if (executeType == ExecuteType.Reader)
            {
                profiler.ExecuteFinish(instance, executeType, (DbDataReader)returnValue);
            }
            else if (executeType != ExecuteType.None)
            {
                profiler.ExecuteFinish(instance, executeType, null);
            }

            return(returnMessage);
        }
Exemple #2
0
 /// <summary>
 /// Called when database reader is closed, ending profiling for
 /// <see cref="SqlExecuteType.Reader"/> <c>SqlTimings</c>.
 /// </summary>
 public void ReaderFetchComplete(IDataReader reader)
 {
     _customTiming.Stop();
     if (reader != null)
     {
         ProfiledDbDataReader profiledDbDataAdapter = (ProfiledDbDataReader)reader;
         decimal durationMilliseconds = 0;
         if (_customTiming.DurationMilliseconds != null)
         {
             durationMilliseconds = _customTiming.DurationMilliseconds.Value;
         }
         Logger.Log(_customTiming.CommandString, (long)durationMilliseconds, _customTiming.StackTraceStackFrame, profiledDbDataAdapter.RecordReturned, _customTiming.StackTraceSnippet);
     }
     else
     {
         //_customTiming.C
         Trace.WriteLine(string.Format("{0} {1}, {2}", _customTiming.CommandString, _customTiming.DurationMilliseconds, _customTiming.StackTraceSnippet));
         decimal durationMilliseconds = 0;
         if (_customTiming.DurationMilliseconds != null)
         {
             durationMilliseconds = _customTiming.DurationMilliseconds.Value;
         }
         Logger.Log(_customTiming.CommandString, (long)durationMilliseconds, _customTiming.StackTraceStackFrame, 0, _customTiming.StackTraceSnippet);
     }
 }
Exemple #3
0
        public void TestProfiledDbCommandWithProfiledDbCommand()
        {
            var mockCommand    = new Mock <DbCommand>();
            var mockDbProfiler = new Mock <IDbProfiler>();

            var target = new ProfiledDbCommand(mockCommand.Object, mockDbProfiler.Object);

            // test CreateDbParameter()
            var mockParameter = new Mock <DbParameter>();

            mockCommand.Protected().Setup <DbParameter>("CreateDbParameter").Returns(mockParameter.Object);
            Assert.AreEqual(mockParameter.Object, target.CreateParameter());

            // test DbConnection
            var mockConnection     = new Mock <DbConnection>();
            var profiledConnection = new ProfiledDbConnection(mockConnection.Object, mockDbProfiler.Object);

            mockCommand.Protected().Setup <DbConnection>("DbConnection").Returns(profiledConnection);
            var connection = target.Connection;

            Assert.AreEqual(profiledConnection, connection);

            // test DbParameterCollection
            var mockParameterCollection = new Mock <DbParameterCollection>();

            mockCommand.Protected().Setup <DbParameterCollection>("DbParameterCollection").Returns(mockParameterCollection.Object);
            var parameterCollection = target.Parameters;

            Assert.AreEqual(mockParameterCollection.Object, parameterCollection);

            // test DbTransaction
            var mockTransaction     = new Mock <DbTransaction>();
            var profiledTransaction = new ProfiledDbTransaction(mockTransaction.Object, profiledConnection);

            mockCommand.Protected().Setup <DbTransaction>("DbTransaction").Returns(profiledTransaction);
            var transaction = target.Transaction;

            Assert.AreEqual(profiledTransaction, transaction);

            // test DesignTimeVisible
            var designTimeVisible1   = true;
            var designTimeVisible2   = false;
            var designTimeVisibleSet = false;

            mockCommand.Setup(cmd => cmd.DesignTimeVisible).Returns(designTimeVisible1);
            mockCommand.SetupSet(cmd => cmd.DesignTimeVisible = It.IsAny <bool>()).Callback <bool>(a =>
            {
                Assert.AreEqual(designTimeVisible2, a);
                designTimeVisibleSet = true;
            });
            Assert.AreEqual(designTimeVisible1, target.DesignTimeVisible);
            target.DesignTimeVisible = designTimeVisible2;
            Assert.IsTrue(designTimeVisibleSet);

            // test ExecuteDbDataReader()
            var mockReader     = new Mock <DbDataReader>();
            var profiledReader = new ProfiledDbDataReader(mockReader.Object, mockDbProfiler.Object);
            var cmdBehavior    = CommandBehavior.CloseConnection;

            mockCommand.Protected().Setup <DbDataReader>("ExecuteDbDataReader", cmdBehavior).Returns(profiledReader);
            var executeDbCommandCalled = false;

            mockDbProfiler.Setup(p => p.ExecuteDbCommand(It.IsAny <DbExecuteType>(), It.IsAny <IDbCommand>(), It.IsAny <Func <IDataReader> >(), It.IsAny <TagCollection>()))
            .Callback <DbExecuteType, IDbCommand, Func <IDataReader>, IEnumerable <string> >((a, b, c, d) =>
            {
                Assert.AreEqual(mockCommand.Object, b);
                c();
                executeDbCommandCalled = true;
            });
            var reader = target.ExecuteReader(cmdBehavior);

            Assert.IsTrue(executeDbCommandCalled);
            Assert.AreEqual(profiledReader, reader);

            // test Dispose()
            var disposeCalled = false;

            mockCommand.Protected().Setup("Dispose", true).Callback <bool>(a => disposeCalled = true);
            target.Dispose();
            Assert.IsTrue(disposeCalled);
        }