Chris Marais · Nov 15, 2021

Errors when using TestCoverage, 'Somebody else is using the Monitor'

When running the command 

do ##class(TestCoverage.Manager).RunTest(,"/nodelete",.userParams)

I now get the following error. these tests used to run fine.

LogStateStatus:0:TestCoverage.Manager:OnBeforeAllTests:ERROR #6060: Somebody else is using the Monitor. <<==== **FAILED**


Can someone please point me in the right direction?

Product version: IRIS 2021.1
0 169
Discussion (6)2
Log in or sign up to continue

@Chris Marais This means that ^PERFMON or ^%SYS.MONLBL is already running somewhere on the system. If you do ^%SYS.MONLBL it should provide some helpful output/options.

Hi all,

I am also having an issue on the code coverage. On my side, there is not an error, but there are no results. 
Version: IRIS 2021.1

Directory: C:\Tmp\UnitTests\MLI2\Ens\Helper\
  MLI2\Ens\Helper begins ...
List items in directory started on 01/19/2022 14:18:42 '*.xml;*.XML;*.cls;*.mac;*.int;*.inc;*.CLS;*.MAC;*.INT;*.INC' Listing file C:\Tmp\UnitTests\MLI2\Ens\Helper\UnitTests.cls as udl
List finished successfully.     MLI2.Ens.Helper.UnitTests begins ...
      TestCheckAndLoadJSON() begins ...
        AssertStatusOK:Invalid Content-type. Status = OK (passed)
        AssertNotTrue:Invalid Content-type. Object = nulloref (passed)
        AssertStatusNotOK:Invalid Content-type. Validation Status = Error (passed)
        AssertEquals:Invalid Content-type. Validation SC Code(5913) = 5913 (passed)
        AssertStatusOK:No Content. Status = OK (passed)
        AssertNotTrue:No Contente. Object = nulloref (passed)
        AssertStatusNotOK:No Content. Validation Status = Error (passed)
        AssertEquals:No Content. Validation SC Code(16003) = 16003 (passed)
        AssertStatusOK:Invalid class name arg. Status = OK (passed)
        AssertNotTrue:Invalid class name arg. Object = nulloref (passed)
        AssertStatusNotOK:Invalid class name arg. Validation Status = Error (passed)
        AssertEquals:Invalid class name arg. Validation SC Code(5760) = 5760 (passed)
        AssertStatusOK:Invalid JSON. Status = OK (passed)
        AssertNotTrue:Invalid JSON. Object = nulloref (passed)
        AssertStatusNotOK:Invalid JSON. Validation Status = Error (passed)
        LogMessage:Validation SC: ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''
        AssertStatusOK:Invalid Property Value. Status = OK (passed)
        AssertNotTrue:Invalid Property Value. Object = nulloref (passed)
        AssertStatusNotOK:Invalid Property Value. Validation Status = Error (passed)
        AssertEquals:Invalid property value. Validation SC Code(5802) = 5802 (passed)
        AssertStatusOK:Positive. Status = OK (passed)
        AssertTrue:Positive. Object Is Valid (passed)
        AssertStatusOK:Positive. Validation Status = OK (passed)
        AssertEquals:Positive. Object Name = MLI2.Ens.Helper.UnitTests.JSONObject (passed)
        AssertEquals:Positive. tObj.Name = Jon (passed)
        AssertEquals:Positive. tObj.Surname = Snow (passed)
        AssertEquals:Positive. tObj.Age = 35 (passed)
        LogMessage:Duration of execution: .00114 sec.
      TestCheckAndLoadJSON passed
      TestCreateJSONOutput() begins ...
        AssertStatusNotOK:Non-JSON Obj. Status = Error (passed)
        AssertEquals:Non-JSON Obj. Out Stream size = 0 (passed)
        AssertStatusOK:JSON Obj. Status = OK (passed)
        AssertEquals:JSON Obj. Out Stream = expected JSON output (passed)
        LogMessage:Duration of execution: .002102 sec.
      TestCreateJSONOutput passed
      TestGetCSPSessionId() begins ...
        AssertStatusOK:No %session. sc = OK (passed)
        AssertNotTrue:No %session. IsCSP = 0 (passed)
        AssertEquals:No %session. SessionId = "" (passed)
        AssertStatusOK:Has %session. sc = OK (passed)
        AssertTrue:Has %session. IsCSP = 1 (passed)
        AssertEquals:Has %session. SessionId = 12DFzjjakl (passed)
        LogMessage:Duration of execution: .000125 sec.
      TestGetCSPSessionId passed
    MLI2.Ens.Helper.UnitTests passed
  Skipping deleting classes 
  MLI2/Ens/Helper passed ===============================================================================
Directory: C:\Tmp\UnitTests\MLI2\Ens\Helper\UnitTests\
  MLI2\Ens\Helper\UnitTests begins ...
List items in directory started on 01/19/2022 14:18:42 '*.xml;*.XML;*.cls;*.mac;*.int;*.inc;*.CLS;*.MAC;*.INT;*.INC' Listing file C:\Tmp\UnitTests\MLI2\Ens\Helper\UnitTests\FauxCSPSession.cls as udl
Listing file C:\Tmp\UnitTests\MLI2\Ens\Helper\UnitTests\JSONObject.cls as udl
Listing file C:\Tmp\UnitTests\MLI2\Ens\Helper\UnitTests\NonJSONObject.cls as udl
List finished successfully.   Skipping deleting classes 
  MLI2/Ens/Helper/UnitTests passed Mapping to class/routine coverage: .000221 seconds
Aggregating coverage data: .000185 seconds
No code coverage found (!) Use the following URL to view the result:$NAMESPACE=LIBSDEPO
Use the following URL to view test coverage data:

I've tried this this with RunTest and RunAllTests.
After running the tests:

LIBSDEPO>w $System.Status.GetErrorText(%objlasterror)
ERROR #6061: The Monitor is not running

Any advice will be appreciated.

@Stefan Cronje I've sent you a message. The discussion at
 is relevant but I think your root cause may be different.

Basic troubleshooting steps / things to think about:
* Is the line-by-line monitor running? (do ^%SYS.MONLBL and see what it says)
* Do you have .int code for the classes for which you're measuring coverage? (compile with the "k" flag to keep this around)
* Did you say what classes/routines you wanted to measure coverage of? (see instructions at

Given that two people have run into this now I think there's something that should be changed to help avoid the situation. Perhaps forcing the line-by-line monitor/PERFMON to stop (if it's running) prior to starting it for a test coverage run and/or identifying possible causes of the issue.

It's also possible that %objlasterror is leaking without that error being the root cause of any issues. I'd start by looking at how you're saying which units of code to measure coverage for - e.g., via coverage.list or an explicit list passed in to the CoverageClasses/CoverageRoutines parameter as described at