Testing an Insight Model
Topics covered in this chapter:
Activating Test Mode
If you're developing a large and complex Mosel solution to run within Insight, you may want to be able to test parts of this outside of Insight. But how to do this if your Mosel calls mminsight functions? If you put mminsight into test mode, you can simulate (or "mock") how mminsight functions will behave when your Mosel code is run outside of Insight.
To activate test mode, simply set the parameter insight_testmode to be 'true'. When in test mode, the insight_is_scenario parameter will always return 'true', insightgetmode will by default return INSIGHT_MODE_RUN and insightdispatch will execute the RUN execution mode handler, to simulate the behaviour of an Insight scenario.
Test mode should not be activated when running your application inside Insight - only in an external, non-Insight test environment.
Execution Mode
If you want to simulate execution modes other than INSIGHT_MODE_RUN, you can set this using the insightsetmode function, e.g.
insightsetmode('STATS')
In test mode, insightgetmode will return whatever was passed to the last call to insightsetmode, and insightdispatch will call the annotated procedure for this execution mode.
Scenario Data
When a Mosel model running in test mode calls insightpopulate, by default this will do nothing and return immediately. If you want to populate some data-structures when the model calls insightpopulate, you can set a procedure to be called during insightpopulate using insightsetcbpopulate, e.g.:
procedure dopopulate ! Initialize relevent data-structures here myarray(1) := 91.5 myarray(2) := 17.312 end-procedure insightsetcbpopulate(->dopopulate)
Scenario and Application Attributes
Application ID
To set the application ID that will be used during your test, use the insightsetappid procedure, e.g.:
insightsetappid('my_app_id')
This will set the value to be returned by insightgetappid
Application Name
To set the application name that will be used during your test, use the insightsetappname procedure, e.g.:
insightsetappname('My App')
This will set the value to be returned by insightgetappname
Scenario ID
When insight_testmode is true, you will be able to set the value of the insight_scenario_id parameter, e.g.:
setparam('insight_scenario_id','abcdefg')
Scenario Name
When insight_testmode is true, you will be able to set the value of the insight_scenario_name parameter, e.g.:
setparam('insight_scenario_name','my scenario name')
Scenario Path
When insight_testmode is true, you will be able to set the value of the insight_scenario_path parameter, e.g.:
setparam('insight_scenario_path','/my app name/my folder name/my scenario name')
User Name
To set the user name that will be used during your test, use the insightsetusername procedure, e.g.:
insightsetusername('Winston Churchill')
This will set the value to be returned by insightgetusername
Attachments
Attachment Directories
When an app is run in Insight, attachments allow you to store files directly in the scenario or application. In mminsight test mode, we simulate this using directories. Set the parameter insight_test_attach_dir to be the path of a directory; the files in a subdirectory called scenattach will be the attachments of the current scenario, while the content of a subdirectory appattach will be the application attachments. If either subdirectory doesn't exist, it will be created automatically the first time you try to access that attachment type. Alternatively, the developer can specify specific directories for app and scenario attachments using the procedures insightsettestappattachdir and insightsettestscenattachdir.
The initial content of either directory will be treated as the initial scenario and appplication attachments, and any attachment changes made by calling mminsight attachment procedures will be reflected immediately in the target directory. For example:
setparam('insight_test_attach_dir','/home/user/mytests/mytestattach') ... ! Access an attachment (read from file /home/user/mytests/mytestattach/scenattach/inputdata.dat) insightgetscenattach('inputdata.dat') if insightattachstatus<>INSIGHT_ATTACH_OK then writeln_("Error accessing attachment") end-if ... ! Create an attachment (written to file /home/user/mytests/mytestattach/scenattach/hello.txt) insightputscenattach('hello.txt') if insightattachstatus<>INSIGHT_ATTACH_OK then writeln_("Error creating attachment") end-if
Attachment meta-data (e.g. description, last-modified date, etc) can be written to an optional .properties file in the same directory. This file contains an insightattachment record called attach written using initializations to, for example:
declarations attach: insightattachment end-declarations attach.filename := "myattachment.dat" attach.description := "this is the description of my attachment" attach.tags := ['first','test'] attach.lastModifiedUser := 'Winston Churchill' initializations to '/home/user/mytests/mytestattach/scenattach/myattachment.dat.properties' attach end-initializations
If the .properties file for an attachment is missing, it will be created automatically the first time mminsight looks in that attachment directory. If the filename field specifies a different name from the actual filename, the name from the .properties file will be reported as the attachment filename by all mminsight attachment functions.
Attachment Tags
There are two ways to set the list of attachment tags that will be available. The first is to pass a list of insightattachmenttag records to insightsetattachtags, e.g.:
declarations test,first: insightattachment end-declarations first.name := 'first' first.usage = 'single-file' test.name := 'test' test.usage := 'multi-file' insightsetattachtags([first,test])
Alternatively, the tag definitions can be read directly from the application's companion file. To do this, set the parameter insight_test_cfile_path to be the path to the model companion file. mminsight in test mode will automatically try to read the tags from insight_test_cfile_path so long as this is set before the first mminsight procedure call that requires tags.
Attachment Validation
By default, Insight will perform some basic validation on new attachments and attachment meta-data: attachments must be no more than a given size, their filenames and descriptions have a maximum length, certain characters are not allowed in attachment filenames, and there is a limit to how many files can be attached to a single scenario. If you wish to set different rules during your test - for example, to check how your code handles Insight failing to add an attachment - then this can be done by calling insightsetattachrules, e.g.:
declarations rules: insightattachmentrules end-declarations rules.maxsize := 1*1024*1024 rules.maxattachcount := 3 rules.maxfilenamelen := 32 rules.invalidfilenamechars := [text('/'),text('\\'),text(' ')] rules.maxdescriptionlen := 128 insightsetattachrules(rules)
Repository
To add repository item information records that can later be returned by insightgetiteminfo or insightgetiteminfos you can use insightadditeminfo, e.g.:
declarations iteminfo: insightiteminfo end-declarations iteminfo.id := 'myid' iteminfo.type := 'SCENARIO' iteminfo.path := '/mymodel/myfolder/myscenario' iteminfo.name := 'myscenario' iteminfo.parentpath := '/mymodel/myfolder' insightadditeminfo(iteminfo)
Note that you must ensure all the fields of the insightiteminfo record are populated and that the path and parentpath fields are consistent. The id you specify for each item must be unique.
To remove all the insightiteminfo records previously added, you can use insightcleariteminfos.
Limitations
It is not possible to use the scenariodata: I/O driver in test mode.
It is not possible to access the attachments of other scenarios in test mode.
In test mode, the insight_nofinalize parameter and the insight.nofinalize annotation have no effect.
© 2001-2025 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.