void AssertMetricRecorded(DeveloperEventType.Types.Type type,
                           DeveloperEventStatus.Types.Code status)
 {
     _metrics.Received().RecordEvent(
         type, Arg.Is <DeveloperLogEvent>(p => p.StatusCode == status &&
                                          p.DebugSessionIdStr == _testDebugSessionId));
 }
        public void Record_Error(Type exceptionType, DeveloperEventStatus.Types.Code statusCode)
        {
            Assert.Throws(exceptionType,
                          delegate
            {
                actionRecorder.RecordToolAction(MetricActionType,
                                                () => {
                    throw (Exception)Activator.CreateInstance(exceptionType, "Test");
                });
            });

            logEvent.StatusCode = statusCode;
            metrics.Received(1).RecordEvent(EventType, logEvent);
            AssertTimerUsedCorrectly();
        }
        public void Record_RpcError(StatusCode rpcCode, DeveloperEventStatus.Types.Code statusCode)
        {
            Assert.Throws <CloudException>(
                delegate
            {
                actionRecorder.RecordToolAction(MetricActionType,
                                                delegate {
                    try
                    {
                        throw new RpcException(new Status(rpcCode, "test"));
                    }
                    catch (RpcException e)
                    {
                        if (rpcCode != StatusCode.Unknown)
                        {
                            e.Data[ErrorData.ServiceNameKey] = FakeServiceName;
                            e.Data[ErrorData.MethodNameKey]  = FakeMethodName;
                        }
                        throw new CloudException("Test", e);
                    }
                });
            });

            var expectedDetails = new GrpcServiceCallDetails
            {
                Status = new Status(rpcCode, null)
            };

            if (rpcCode != StatusCode.Unknown)
            {
                expectedDetails.ServiceName   = FakeServiceName;
                expectedDetails.ServiceMethod = FakeMethodName;
            }

            logEvent.StatusCode       = statusCode;
            logEvent.GrpcErrorDetails = expectedDetails;
            metrics.Received(1).RecordEvent(EventType, logEvent);
            AssertTimerUsedCorrectly();
        }