STRIDE 3.0.01xx: Difference between revisions

From STRIDE Wiki
Jump to navigation Jump to search
 
(228 intermediate revisions by 8 users not shown)
Line 1: Line 1:
'''Release Notes'''
'''Release Notes'''  


This page documents the changes in STRIDE version 2.1.0301 (code name ''StoneSteps'').
This page documents the changes in STRIDE version 3.0.01xx (code name ''StoneSteps'').  


Please review this information before upgrading from an earlier version.
Please review this information before upgrading from an earlier version.  


=What's New=
'''Important''': An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].
Based on customer requirements, in this release we have made significant changes to [[Integrating STRIDE#The STRIDE Runtime|STRIDE Runtime]] and [[Integrating STRIDE#The Platform Abstraction Layer (PAL)|PAL]].


===Support for Multi-Process Target===
<br/>
New routines and support have been added to Runtime and PAL to support multi-process target. Changes include implementation of shared memory, protecting using named Mutex objects, synchronization of multiple processors ands multiple threads, and usage of current process and thread IDs.


===Runtime Logging (Optional)===
{| border="1"
Runtime and PAL use a logging routine that can optionally be implemented in PAL.
|-
|
Note that if you are upgrading from a previous installation '''you must uninstall your existing STRIDE''' before installing version 3.0.01xx.  


=Change Details=
|}
===Shared Memory===
To support multi-process target, shared memory support for dynamic and static pool memory has been implemented in Runtime. Runtime makes PAL calls to acquire shared memory and manages the memory according to runtime configurations set by user.


===Protection using Mutex===
<br>
Runtime now uses named mutex objects to protect shared resources between multiple processors and multiple threads. Runtime makes PAL calls to obtain and control mutex objects.


==PAL==
= What's New  =


===New Routines===
Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes.


* '''Shared Memory Management'''
== Performance Improvements ==


Recommended approach is to use Memory-Mapped Files to implement shared memory.
Specific improvements have been made in the following areas:


palOpenSharedMem - Open/Create shared memory segment
*Database loading time has been improved
palCloseSharedMem - Close shared memory segment
*Compile times are now shorter
*Scripting operations involving function and message payloads now perform better, especially when arrays are involved
*Runtime performance has been improved by optimizing payload serialization and deserialization operations


* '''Named Mutexes'''
== Usability Improvements ==


palMutexInit - Initialize a mutex object
=== SCL Wizard ===
palMutexDestroy - Destroy a mutex object
palMutexLock - Lock a mutex object
palMutexUnlock - Unlock a mutex object


* '''Task Synchronization'''
The SCL Wizard functionality in [[STRIDE Studio]] has been extended so that you can now use the tool to qualify message payloads as well as function payloads.


palGetThreadId - Get current thread Id
In addition, the following types of qualifications can now be made using an SCL Wizard:
palGetProcessId - Get current process Id
palSleep - Suspend the execution of the current thread


* '''Logging'''
*For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values
*Type casts can now be specified on payload members
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types


This is optional.
=== Connection Management ===


palLog - Logging utility
Connection management has been greatly simplified; software managing connection to the target system has been integrated into [[STRIDE Studio]] so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.)


===Removed / Old Routines===
The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target.
 
==== Transport Properties ====
 
All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.
 
=== STRIDE Studio Test Runner Improvements ===
 
The test runner in [[STRIDE Studio]] has incorporated several functional and usability improvements.
 
*Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.
 
*Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.
 
*The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.
 
=== Uploading Results to STRIDE Portal ===
 
Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal's server information can be configured from Studio's workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server.
 
=== Trace View Filtering ===
 
A new post-filter setting exists for Trace Views. The "Post Filtering" tab in the Filters dialog and the "Filter String" dialogs now both have check boxes that read "Do not filter out any matching events", which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.
 
== Build Tools  ==
 
A set of new command line [[Build Tools]] has been implemented:
 
*'''Stride compiler'''
*'''Stride database binder'''
*'''Stride instrumentation generator'''
 
These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a "make" build environment.
 
== Target-Based Testing  ==
 
Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas [[Test Units]] can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.
 
The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.
 
== Runtime/PAL  ==
 
Based on customer requirements, in this release we have made significant changes to [[Runtime_Reference|STRIDE Runtime]] and [[Platform Abstraction Layer|PAL]].
 
=== Multi-Process Targets  ===
 
New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.
 
=== Logging (Optional)  ===
 
Runtime and PAL use a logging routine that can optionally be implemented in PAL.
 
== Windows Off-Target SDK  ==
 
A new SDK for implemention of Off-Target applications on Windows has been packaged. It contains a library (stride.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt.
 
The '''s2shostapphrt''' library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The '''s2shostapptrt''' library, a prebuilt version of the Target Runtime, has also been removed.
 
If an upgrade is performed it is strongly recommended that the above mentioned '''s2shostapp*''' libraries and their public API header (hostapp.h) be manually removed.
 
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added.
 
= Support Wiki =
 
This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu.
 
== STRIDE Samples  ==
 
We have created a set of [[Samples_Overview|sample workspaces]] to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios.
 
If you're new to STRIDE, or want to learn more about using the product, this is a great place to start.
 
= Acquiring the Software =
 
You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com
 
To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email [mailto:sales@s2technologies.com S2 Sales] or call our offices at '''760-635-2345'''.
 
= Installing the Software  =
 
To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to [[Studio:Desktop Installation]].
 
{| border="1"
|-
|
Note: if you are upgrading from a previous installation '''you must uninstall your existing STRIDE''' before installing version 3.0.01xx.
 
|}
 
If you are new to STRIDE, we recommend that you investigate the [[Samples_Overview|New STRIDE Samples]].
 
= Change Details  =
 
*The '''ascript''' API has been changed to be more robust:
**Certain deprecated methods have been eliminated.
**Some existing API methods have been modifed.
**The event model has been improved to allow greater script control.
 
'''Note''': Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the [[#Migration_to_3.0.01xx|Migration to 3.0.01xx]] section below.
 
*The '''Panel''' object is no longer available to scripts; its functionality has been moved under the '''studio''' object model. You can access this new functionality as '''studio.Connection''', however if you were formerly scripting the '''Panel''' object, you may find it is no longer necessary since:
**You can now configure your connection properties from within STRIDE Studio (from the menu select ''Tools/Target Connectivity'')
**You can now set a workspace folder property to autoconnect upon execution
 
*Zero is now allowed as the maximum size under certain circumstances in '''scl_string''' and '''scl_ptr_sized'''. Details of these circumstances are contained in the '''[[Media:s2sSCLReferenceGuide.pdf|SCL Reference Guide]]''' document.
 
*'''studio.Workspace.Compiler.MicrosoftCompatibility''' has been replaced with '''studio.Workspace.Compiler.Compatibility'''. Valid values are "Generic" (generic mode), "Microsoft" (Microsoft compatibility), or "Gnu" (Gnu or Gcc compatibility).
 
*'''studio.Workspace.Compile()''' has been replaced with '''studio.Workspace.Build()'''. Also new methods, '''studio.Workspace.CleanBuild()''' and '''studio.Workspace.ReloadDatabase()''', have been added.
 
*A new property, '''Output''', has been added off the studio object. This property outputs text to the Studio message tab, similar to how '''ascript.MessageBox()''' works for certain scripts. This property contains one method, '''PrintMessage(String msg)'''. You can see an example of its use [[Debugging Helps|here]].
 
*A new settings group has been introduced - '''studio.Workspace.Settings.Build'''.
 
*'''studio.Workspace.Intercept.Path''' has been replaced with '''studio.Workspace.Intercept.SourcePath''' and '''studio.Workspace.Intercept.HeaderPath'''.
 
<br>
 
== Fixes  ==
 
''This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].''
 
*[1055] Not able to specifiy uppercase include directory
*[1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed.
*[1357] The ascript '''Call()''' method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred.
*[1469] Global casting using '''scl_cast''' no longer causes an intercept module compile error.
*[1539] '''ascript''' no longer returns "undefined" when calling '''function.ReturnValue''' when the captured function returns an unqualified function pointer.
*[1543] IM source file locations added to studio UI and automation
*[1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time.
*[1586] Support for Variadic Macros
*[1597] EDGFront crash for scl_ptr_opaque
*[1600] Pre-processor treats constant 1 always as 8-bit
*[1605] Generated Perl script generates error when run in debugger
*The following statement in Runtime files '''srtest.c''' and '''srtest.cpp''' has been changed:<br><tt>va_list args = 0;</tt><br>is now<br><tt>va_list args;</tt><br> with no initializer. This makes it portable and able to compile under Linux.
*A macro that determines the existence of '''vsnprintf()''' has been updated in '''srtest.c''' and '''srtest.cpp''' in order to make it able to compile with GCC and other non-Microsoft compilers.<br>'''Note:''' If you are using test functions and C++ test classes, you must be using compilers that support '''vsnprintf''' (variable argument lists), which is a standard in C99 and supported in C90.
*When tracing on a STID it's possible to display trace information for messages that aren't captured (i.e. the message's SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation.
*Autosense was not working properly in the editor for message payloads. This has been fixed.
 
== AutoScript  ==
 
=== TestUnits Collection  ===
 
A new TestUnits collection has been implemented. All test interfaces (specified with [[SCL_Pragmas#Test_Units | Test Unit pragmas]]) will be listed there.
 
=== Functions Collection  ===
 
Interfaces specified with either the [[scl_test_class]] or [[scl_test_flist]] pragmas are not listed in the Functions collection anymore.
 
=== Union Discriminant Accessor ===
 
A new synthesized "_Discriminant" field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that an internal discriminant value may be set or read regardless of the active member.
 
== PAL  ==
 
=== Memory Management  ===
 
To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory.
 
=== Protection using Mutex  ===
 
Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects.
 
=== New Routines  ===
 
*'''Memory Management'''
 
In case of multi-process target, recommended approach is to use <u>Memory-Mapped Files</u> to implement memory segments.
 
palMemSegmentOpen() - Open/create memory segment
palMemSegmentClose() - Close memory segment
 
*'''Named Mutexes'''
 
palMutexInit() - Initialize a mutex object
palMutexDestroy() - Destroy a mutex object
palMutexLock() - Lock a mutex object
palMutexUnlock() - Unlock a mutex object
 
*'''Task Synchronization'''
 
palGetThreadId() - Get current thread Id
palGetProcessId() - Get current process Id
palSleep() - Suspend the execution of the current thread
 
*'''Logging'''
 
This is optional.
 
palLog() - Logging utility
 
=== Updated Routines  ===
 
*Function signatures and functionalities of palWait() &amp; palNotify() have been updated.
 
palWait() - now takes in an in/out pointer for events notification
palNotify() - mail box Id has been updated to notify any event including mail box Ids.
 
*Function signatures of palMemAlloc() &amp; palMemFree() have been updated.
 
=== Removed Routines ===


  palProtect
  palProtect
  palUnprotect
  palUnprotect
palCriticalErr


==Runtime==
=== Removed Modules  ===


* STRIDE Host Release '''2.1.0301''' is compatible with the Runtime versions '''3.0'''.
S2Mem - The memory module provided as part of PAL has been removed. If a native
* To support multi-process target, significant changes have been made to runtime.
        operating system does not support dynamic memory, the Runtime's memory
* A new public routine, srUninit(), has been added to sr.h & srapi.c.
        management module ''srMem'' can be used instead of ''S2Mem''.
* To use in PAL for shared dynamic pool memory, new routines, _srMem_Allocate() & _srMem_Free(), have been added as part of new runtime files srmem.h & srmem.c.
 
* Calls to palProtect() & palUnprotect() have been replaced by new routines _srProtect() & _srUnprotect(), in which the implementation uses its own mutex object that calls PAL's mutex routines.
== Runtime ==
 
*STRIDE Host Release '''3.0.01xx''' is compatible with the Runtime Version '''3.00'''.
*In order to eliminate redundancy and promote an object-oriented design, "Member Methods" have been removed from srTest; only "Member Objects" exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to [[Test_Units#C.2B.2B_Test_Classes|this article]] on the STRIDE Support Wiki.
*A new routine, '''srInit()''', replaces deprecated '''srInitialize()'''. Now the target will not be able to set an auto-connect with timeout.
*The '''scl_tp''' and '''scl_tp_format''' pragmas have been deprecated. The new pragmas are '''scl_tracepoint''' and '''scl_tracepoint_format'''.
*The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048.
*Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID().
*Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message.
*The Runtime now checks for the connection before responding with a "Pong" upon receiving a "Ping."
*Introduced 40 additional system trace points to better describe internal errors.
*Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error.
*Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings.
*srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle).
*Added a new Runtime Test Services (RTS) API '''srTestCaseSetStatusEx()''', which enables the providing of the actual return value of a numeric test method in the case of failure.
*Added two new public APIs - "Printing" APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The '''srPrintInfo()''' will show as srTraceStr() with STID=0 and Level=3. The '''srPrintError()''' will show as srTraceStr() with STID=0 and the Level=1. '''Warning:''' These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90.  
*To support multi-process target, significant changes have been made to runtime.  
*A new public routine, srUninit(), has been added to sr.h &amp; srapi.c.  
* A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h &amp; srthread.c.
*A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() &amp; _srMem_Free(), will be used in PAL's palMemAlloc() &amp; palMemFree() in case of multi-process target is enabled.  
*Calls to palProtect() &amp; palUnprotect() have been replaced by new routines _srProtect() &amp; _srUnprotect(), in which the implementation uses its own mutex object that calls PAL's mutex routines.  
*In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.
* Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.
* Runtime Test Services APIs are now thread safe.
* Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.
* Fixed Runtime resource abuse when sending lots of broadcast messages.
* Added partial check for message payload corectness.
 
*''The following Runtime files have been modified:''


*'' The following Runtime files have been modified:
  sr.h
  sr.h
  srapi.c
  srapi.c
srapi.h
srapirgl.c
srapirgl.h
srcfg.h
  srconn.c
  srconn.c
  srconn.h
  srconn.h
srerr.c
  srib.c
  srib.c
  srib.h
  srib.h
sribctrl.c
  sribtr.c
  sribtr.c
  sribtr.h
  sribtr.h
srmsgmar.c
  srmsgptr.c
  srmsgptr.c
  srmsgptr.h
  srmsgptr.h
Line 85: Line 316:
  srsuid.c
  srsuid.c
  srsuid.h
  srsuid.h
srtest.c
srtest.cpp
srtest.c
srtest.h
srtestutil.c
srtestutil.h
srthread.c
srthread.h
  srtime.c
  srtime.c
  srtime.h
  srtime.h
srtp.h
srutil.h
*''The following Runtime files have been added:''


*'' The following Runtime files have been added:
  srmem.c
  srmem.c
  srmem.h
  srmem.h


=Migration to 2.1.0301=
= Migration to 3.0.01xx  =
Recommended steps for migration from a previous version:
 
Recommended steps for migration from a previous version:  
 
== AutoScript  ==
 
Any use of test classes through the Functions collection, like:
 
  $main::ascript-&gt;Functions-&gt;Item("my_test_class")-&gt;User-&gt;Call();
 
should be converted to use the new TestUnits collection:
 
  $main::ascript-&gt;TestUnits-&gt;Item("my_test_class")-&gt;Run();
<br>
=== API Changes  ===
 
*The Support Wiki pages now contain reference help for [[AutoScript#ascript|''AutoScript'']].
*All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values.
*Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to '''ascript.WaitForEvent()'''. (Asynchronous methods are '''function.Owner.Return()''', '''function.User.CallNonBlocking()''', '''function.User.CallBypassOverrideNonBlocking()''', '''message.Owner.Broadcast()''', '''message.Owner.SendRsp()''', '''message.User.SendCmd()''', and '''message.User.SendCmdBypassOverride()''')
*If '''ascript.WaitForEvent()''' times out, an Error object is returned. Previously NULL was returned in this case.
*All objects returned by '''ascript.WaitForEvent()''' have '''Type''' and '''Name''' properties. When the '''Type''' is “Error”, the Error object has additional properties that contain further details about the error.
*All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found [[Updated Message Payload Syntax|here]]. There are no syntax changes to function payloads.
*The signature for '''ascript.Initialize''' has been changed. Successful calls to '''ascript.Initialize''' now fully initialize the object.
 
=== End-Of-Life Methods and Properties  ===
 
This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access.
 
*ascript.Quit()
*ascript.Interfaces
*ascript.NamedEvents
*ascript.WaitForEventWithTimeout
*ascript.RspTimeoutNotifyEnabled
*ascript.CreateTimer()
*ascript.DestroyTimer()
*ascript.WaitTimeoutNotifyEnabled
*ascript.Compare_As_C_Values()
*ascript.AsyncErrorNotifyEnabled
*ascript.Function.Item().User/Owner.SMID
 
=== Recommended Steps for Migration From a Previous Version  ===
 
*Search for calls to '''ascript.WaitForEvent()''' in all scripts. Previous logic to test for null indicating timeouts must be modified. '''WaitForEvent()''' now always returns an object, in the case of a timeout (or other error) an Error object is returned.
*Search for calls to '''ascript.Quit''' in all scripts. Modify the logic as necessary to exit the script by other means in place of the original '''Quit()''' call.
*Search for all asynchronous method calls (Asynchronous calls are limited to '''function.Owner.Return()''', '''function.User.CallNonBlocking()''', '''function.User.CallBypassOverrideNonBlocking()''', '''message.Owner.Broadcast()''', '''message.Owner.SendRsp()''', '''message.User.SendCmd()''', and '''message.User.SendCmdBypassOverride()'''). Modify the logic as necessary to call '''ascript.WaitForEvent()''' if errors (including timeout error) should be detected.
*If you have scripts that explicitly instantiate an '''ascript''' object (i.e. they create an object using the '''"STRIDE.ascript"''' PROGID), search for all occurrences and modify the subsequent call to '''ascript.Initialize()''' to pass the new parameter set.
*Search for all EOL'd methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.
 
<br>
<div class="Section1">
{| width="100%" border="1" style="width: 100%; border-collapse: collapse;" class="MsoTableGrid"
|- style=""
| width="50%" valign="top" style="border: 1pt solid windowtext; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" |
<span class="SpellE">'''EOL’d'''</span>'''Method or Property'''
 
| width="50%" valign="top" style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(204, 255, 204) none repeat scroll 0% 50%; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" |
'''Recommended Replacement'''
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.Quit'''</span>'''()'''
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">Refactor</span> script logic to exit the script by other means.
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.Interfaces'''</span>
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Use <span class="SpellE">ascript.Functions</span> or <span class="SpellE">ascript.Messages</span> as appropriate.
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.NamedEvents'''</span>
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Contact S2 Technologies
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.WaitForEventWithTimeout'''</span>
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Use <span class="SpellE">ascript.WaitForEvent</span>() after setting desired timeout using <span class="SpellE">ascript.WaitTimeoutPeriod</span>
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.RspTimeoutNotifyEnabled'''</span>
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
No longer needed. Timeout notifications are performed by returning an Error object from <span class="SpellE">ascript.WaitForEvent</span>()
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.CreateTimer'''</span>'''()'''
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Use <span class="SpellE">ascript.Timers.Add</span>()
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.DestroyTimer'''</span>'''()'''
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Use <span class="SpellE">ascript.Timers.Remove</span>()
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.WaitTimeoutNotifyEnabled'''</span>
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
No longer needed. Timeout notifications are performed by returning an Error object from <span class="SpellE">ascript.WaitForEvent</span>()
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.Compare_As_C_Values'''</span>'''()'''
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Contact S2 Technologies
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.AsyncErrorNotifyEnabled'''</span>
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
No longer needed. Error notification from asynchronous calls is performed by returning an Error object from <span class="SpellE">ascript.WaitForEvent</span>()
 
|- style=""
| width="50%" valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 50%;" |
<span class="SpellE">'''ascript.Function.Item'''</span>'''().User/<span class="SpellE">Owner.SMID</span>'''
 
| width="50%" valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 50%;" |
Use <span class="SpellE">ascript.Function.Item</span>().User/<span class="SpellE">Owner.SUID</span>
 
|}
</div>
 
== PAL  ==
 
Please refer to '''''Platform Abstraction Layer (PAL) Specification''''' for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines.
 
*Implement new shared memory routines, palMemSegmentOpen() &amp; palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.
 
*Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.
 
*Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() &amp; palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.
 
*Remove old routines palProtect(), palUnprotect() and palCriticalErr().
 
*Implement new routines palGetThreadId() and palGetProcessId().
 
*Implement new routine palSleep().
 
*Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() &amp; palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.
 
*If your PAL uses ''S2Mem'' routines for dynamic memory, you should use new Runtime module ''srMem''. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().
 
*Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.
 
== Runtime  ==
 
*Edit '''srcfg.h''' file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module ''srMem'' uses these configurations to allocate and manage memory segments.
 
*Edit '''srcfg.h''' file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).
 
*If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.
 
== Windows Applications using Windows Off-Target SDK  ==
 
Existing Host Apps developed against the old '''hostapphrt''' and '''hostapptrt''' libraries should be updated to use the new Windows Off-Target SDK as follows:
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project's include path
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project's library path
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list
*replace the include of hostapp.h with include of stride.h
*replace all calls to HostAppXXX() following the samples in the Windows SDK
*remove srHOST and srWIN32 preprocessor definitions
 
= Minor and Patch releases =
== 3.0.0101a ==
* Linux version of the STRIDE [[Build Tools]] is officially introduced.
* Fixed several minor issues in [[STRIDE Studio]].
 
== 3.0.0101b ==
* Relaxed [[scl_cast]]() pragma to allow cast from any integral ptr to union of ptrs
* Fixed compile warnings in Linux PAL.
* Fixed issue in instrumentation of [[Test Units]].
* Fixed issue with UNC paths.
* Fixed several minor issues in [[STRIDE Studio]].
 
== 3.0.0102 ==
* Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.
* The syntax of [[scl_ptr]] and [[scl_ptr_sized]] pragmas has changed. Now it is required to quote the direction and usage attributes. See this [[Handling_of_pointer_attribute_tokens|page]] for details.
* [[Test_Units#Runtime_Test_Services|Runtime Test Services]] now support adding annotations per test suite.
* A complete set of [[Samples_Overview|Samples]] has been implemented.
* In [[STRIDE Studio]] the processing of Trace information has been optimized.
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations.
* STRIDE Host Release '''3.0.0102''' is compatible with the Runtime Versions '''3.00''' and '''3.01'''.
 
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:
* Several minor issues in STRIDE [[Build Tools]].
* Several minor issues in [[STRIDE Studio]].
* Several minor issues in [[AutoScript]].
 
''The following Runtime files have been modified:''
 
srconn.c
srtest.c
srtest.cpp
srtest.h
 
== 3.0.0103 ==
 
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.
* Added a new Sized Structure Wizard to Studio.
* Updated the [[scl_conform]] pragma to allow the specification of payload members.
* Added a new Conformant Array Wizard to Studio.
* Removed all frameworks and packages that had been part of previous StoneSteps releases. WorkspaceSetup.pl has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.
* The Windows Off-Target SDK has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the  [[Windows SDK]].
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our SDKs, so customers only need this source package if they are not using a prepackaged SDK.
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.
* We have made changes to the way we recommend customers validate their target STRIDE integration.
* Added/renamed several utility scripts in ''%STRIDE_DIR%/Scripts''.
* STRIDE Host Release '''3.0.0103''' is compatible with the Runtime Versions '''3.00''', '''3.01''', and '''3.02'''.
 
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.
* Several minor issues in STRIDE [[Build Tools]].
* Several minor issues in [[STRIDE Studio]].
* Unable to use Windows PAL for device driver testing.
* Deadlock in shared memory/multi-process enabled Linux applications.
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.


==PAL==
''Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:''
You may reference Linux implementation of PAL, which has been updated to support shared memory.
srconn.c
srinstall.h
srinstall.c


* Implement new shared memory routines, palOpenSharedMem() & palCloseSharedMem(), using memory-mapped files.
== 3.0.0103a ==


* Runtime now manages shared dynamic pool memory. Update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free() for the shared memory case. For the non-shared case, you can leave the current implementation as it is.
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.
* Syntax error in [[WinMobile SDK]] source.
 
''The following Runtime files have been modified:''
srinstall.h
 
== 3.0.0103b ==
 
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* Syntax error (extra semicolons) in the STRIDE Runtime source. ''The following files have been modified:''
  srinstall.c
 
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. ''The following source files have been modified:''
  stride.c
  stride.mak
* Minor issue in [[Linux SDK]]. ''The following source files have been modified:''
  palOS.c
  makefile
 
== 3.0.0103c ==
 
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* [[STRIDE Studio]] SCL Wizard uses back slashes ('''..\myfile.h''') as path delimiter when inserting include statements which may fail to compile with some targets.
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn't work. ''The following source files have been modified:''
  palOS.c
  palcfg.h
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. ''The following source files have been modified:''
  stride.c
 
== 3.0.0103d ==
 
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:
-DsrCPP_HAS_NAMESPACE=<0|1>
where 1=enable and 0=disable. By default it is enabled.
''The following source files have been modified:''
  sr.h
  srtest.h
  srtest.cpp
 
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. ''The following source files have been modified:''
  srinstall.h
  srinstall.c
  srmem.c
  srmsgmar.c
  srmsgptr.c
  srtime.h
  srtime.c
 
== 3.0.0104 ==
 
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.
* [[Linux_SDK|Linux SDK]] has been updated for certain targets.
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature:
-DsrCRT_HAS_WCHAR_T=<0|1>
-DsrCRT_HAS_LONG_LONG=<0|1>
-DsrCRT_HAS_LONG_DBL=<0|1>
-DsrCRT_HAS_VAR_ARGS=<0|1>
where 1=enable and 0=disable. By default they are all enabled.
 
* STRIDE Host Release '''3.0.0104''' is compatible with the Runtime Versions '''3.00''', '''3.01''', '''3.02''', and '''3.03'''.
 
''The following Runtime source files have been modified:''
sr.h
srapi.c
srapirgl.h
srapirgl.c
srcfg.h
srcgutil.h
srcgutil.c
srconn.c
srinstall.h
srinstall.c
srtest.c
srtest.cpp
srtestutil.h
srutil.h


* Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() & palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.
''The following Runtime source files have been added:''
srtestmacros.h
srtestmacros.c
srtestmacros.cpp
srutil.c


* Remove old routines palProtect() and palUnprotect().
== 3.0.0104a ==


* Implement new routines palGetThreadId() and palGetProcessId().
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* [[STRIDE Studio]] fails to automatically upload results to Portal.
* Unable to compile [[scl_test_cclass]] with pointer member data.


* Implement new routine palSleep().
== 3.0.0104b ==


* Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() & palNotify(), to support sharing of the synchronization objects among multiple processors if shared memory management is enabled.
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.


* Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.
== 3.0.0104c ==


==Runtime==
''Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:''
* Edit srcfg.h file to configure the shared memory management. By default, shared memory is disabled. If you decide to enable shared memory, you also need to configure the sizes and max number of memory blocks. New runtime module srmem uses these configurations to allocate and manage shared dynamic pool memory.
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.
* Added new "_Discriminant" member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.
* Enhancement to Trace View post filtering - to include matching call/return events.


==Host-based TargetApps using s2shostapptrt==
[[Category: Release Notes]]
* A new routine, HostAppSetMaster(), has been added to s2shostapptrt library. This routine needs to be called from the process that starts the runtime thread, srThread, before calling HostAppRun(). Usually within a multi-process target, the "master" process or the ''daemon'' calls this routine.

Latest revision as of 23:27, 2 June 2010

Release Notes

This page documents the changes in STRIDE version 3.0.01xx (code name StoneSteps).

Please review this information before upgrading from an earlier version.

Important: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the 3.0.0102 Release Notes.


Note that if you are upgrading from a previous installation you must uninstall your existing STRIDE before installing version 3.0.01xx.


What's New

Based on customer feedback, in this release we have made significant performance improvements as well as many key usability improvements and bug fixes.

Performance Improvements

Specific improvements have been made in the following areas:

  • Database loading time has been improved
  • Compile times are now shorter
  • Scripting operations involving function and message payloads now perform better, especially when arrays are involved
  • Runtime performance has been improved by optimizing payload serialization and deserialization operations

Usability Improvements

SCL Wizard

The SCL Wizard functionality in STRIDE Studio has been extended so that you can now use the tool to qualify message payloads as well as function payloads.

In addition, the following types of qualifications can now be made using an SCL Wizard:

  • For payloads that include function pointers, the SCL Wizard now supports qualifying the pointers as such and identifying candidate function values
  • Type casts can now be specified on payload members
  • Variable sized structures can now be specified for payload members and global types
  • Conformant arrays can now be specified for payload members and global types

Connection Management

Connection management has been greatly simplified; software managing connection to the target system has been integrated into STRIDE Studio so that connections can be managed directly from there. (It is still possible to access connection management functionality without using Studio.)

The Panel program is no longer used, and there is no longer a requirement to load the database to communicate with a remote target.

Transport Properties

All transport properties can now be accessed via scripts. A new transport scripting model makes this possible.

STRIDE Studio Test Runner Improvements

The test runner in STRIDE Studio has incorporated several functional and usability improvements.

  • Each runnable script and folder (Suite) in a workspace now has additional properties that allow you to optionally specify a handler script that will be executed in the case of an unhandled error (property OnError) or a timeout (property OnTimeout). A timeout value can be set for each folder.
  • Each runnable folder (Suite) in a workspace now has a property (OnRunConnect) that can instruct STRIDE Studio to automatically connect to a target system before the folder is executed.
  • The workspace now has a dynamic property (ExecutionState) that allows you to alter the order of script execution at runtime.

Uploading Results to STRIDE Portal

Uploading test results from STRIDE Reporter to STRIDE Portal has been integrated into STRIDE Studio. Portal's server information can be configured from Studio's workspace properties while uploading results to Portal can be enabled or disabled via workspace context menu. If enabled, after running the workspace, a script folder or a script file, results in Report file will automatically be uploaded to the configured server.

Trace View Filtering

A new post-filter setting exists for Trace Views. The "Post Filtering" tab in the Filters dialog and the "Filter String" dialogs now both have check boxes that read "Do not filter out any matching events", which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.

Build Tools

A set of new command line Build Tools has been implemented:

  • Stride compiler
  • Stride database binder
  • Stride instrumentation generator

These utilities has been ported for Windows and Linux. Using them would allow seamless integration with a "make" build environment.

Target-Based Testing

Target-based (xUnit-style) testing has been simplified. The new set of SCL pragmas Test Units can now be included in a source file to tell the compiler and IM generator to automatically create test harnessing code.

The automation components STRIDE.testclass, STRIDE.testunit and STRIDE.testfunction are removed.

Runtime/PAL

Based on customer requirements, in this release we have made significant changes to STRIDE Runtime and PAL.

Multi-Process Targets

New routines and support have been added to Runtime and PAL to support multi-process targets. Changes include: implementation of memory management and shared memory, protecting using named Mutex objects, synchronization of multiple processors and multiple threads, and usage of current process and thread IDs.

Logging (Optional)

Runtime and PAL use a logging routine that can optionally be implemented in PAL.

Windows Off-Target SDK

A new SDK for implemention of Off-Target applications on Windows has been packaged. It contains a library (stride.dll/lib) in which the Windows PAL, Runtime, and GRS and a set of utility scripts are prebuilt.

The s2shostapphrt library, a prebuilt verion of the Host Runtime, has been removed. Building Windows applications using the Host Runtime is not supported anymore. The s2shostapptrt library, a prebuilt version of the Target Runtime, has also been removed.

If an upgrade is performed it is strongly recommended that the above mentioned s2shostapp* libraries and their public API header (hostapp.h) be manually removed.

A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added.

Support Wiki

This support wiki http://support.s2technologies.com is introduced with this version. You can navigate here from your web browser, or directly from STRIDE Studio; a link is provided in the Help menu.

STRIDE Samples

We have created a set of sample workspaces to aid in the evaluation of STRIDE, or as a tool for learning how to apply STRIDE to different testing scenarios.

If you're new to STRIDE, or want to learn more about using the product, this is a great place to start.

Acquiring the Software

You can download the latest release from the S2 Technologies ftp site: ftp://ftp.s2technologies.com

To run STRIDE you will need a license. If you are not yet a customer of S2 and would like to obtain an evaluation license, email S2 Sales or call our offices at 760-635-2345.

Installing the Software

To install STRIDE for the first time, or as an upgrade to an existing installation, please refer to Studio:Desktop Installation.

Note: if you are upgrading from a previous installation you must uninstall your existing STRIDE before installing version 3.0.01xx.

If you are new to STRIDE, we recommend that you investigate the New STRIDE Samples.

Change Details

  • The ascript API has been changed to be more robust:
    • Certain deprecated methods have been eliminated.
    • Some existing API methods have been modifed.
    • The event model has been improved to allow greater script control.

Note: Some scripts must be modified from previous versions of STRIDE to work successfully with 3.0.01xx. The necessary changes are detailed in the Migration to 3.0.01xx section below.

  • The Panel object is no longer available to scripts; its functionality has been moved under the studio object model. You can access this new functionality as studio.Connection, however if you were formerly scripting the Panel object, you may find it is no longer necessary since:
    • You can now configure your connection properties from within STRIDE Studio (from the menu select Tools/Target Connectivity)
    • You can now set a workspace folder property to autoconnect upon execution
  • Zero is now allowed as the maximum size under certain circumstances in scl_string and scl_ptr_sized. Details of these circumstances are contained in the SCL Reference Guide document.
  • studio.Workspace.Compiler.MicrosoftCompatibility has been replaced with studio.Workspace.Compiler.Compatibility. Valid values are "Generic" (generic mode), "Microsoft" (Microsoft compatibility), or "Gnu" (Gnu or Gcc compatibility).
  • studio.Workspace.Compile() has been replaced with studio.Workspace.Build(). Also new methods, studio.Workspace.CleanBuild() and studio.Workspace.ReloadDatabase(), have been added.
  • A new property, Output, has been added off the studio object. This property outputs text to the Studio message tab, similar to how ascript.MessageBox() works for certain scripts. This property contains one method, PrintMessage(String msg). You can see an example of its use here.
  • A new settings group has been introduced - studio.Workspace.Settings.Build.
  • studio.Workspace.Intercept.Path has been replaced with studio.Workspace.Intercept.SourcePath and studio.Workspace.Intercept.HeaderPath.


Fixes

This section describes defects which have been corrected in STRIDE and the customer tracking number associated with them, if any, in brackets [].

  • [1055] Not able to specifiy uppercase include directory
  • [1163] Certain cases of array of pointers to discriminated unions that were not handled correctly in the ascript object have been fixed.
  • [1357] The ascript Call() method, when used with RspTimeoutPeriod, only returns True if a timeout has occurred.
  • [1469] Global casting using scl_cast no longer causes an intercept module compile error.
  • [1539] ascript no longer returns "undefined" when calling function.ReturnValue when the captured function returns an unqualified function pointer.
  • [1543] IM source file locations added to studio UI and automation
  • [1564] The Studio Add files dialog has been increased from 2K bytes to 100K bytes, to allow for more files to be selected at a time.
  • [1586] Support for Variadic Macros
  • [1597] EDGFront crash for scl_ptr_opaque
  • [1600] Pre-processor treats constant 1 always as 8-bit
  • [1605] Generated Perl script generates error when run in debugger
  • The following statement in Runtime files srtest.c and srtest.cpp has been changed:
    va_list args = 0;
    is now
    va_list args;
    with no initializer. This makes it portable and able to compile under Linux.
  • A macro that determines the existence of vsnprintf() has been updated in srtest.c and srtest.cpp in order to make it able to compile with GCC and other non-Microsoft compilers.
    Note: If you are using test functions and C++ test classes, you must be using compilers that support vsnprintf (variable argument lists), which is a standard in C99 and supported in C90.
  • When tracing on a STID it's possible to display trace information for messages that aren't captured (i.e. the message's SMID is not known to STRIDE). A problem could occur when STRIDE attempted to interpret the payload of these messages. This has now been fixed; hex values only are now shown in the trace view for in this situation.
  • Autosense was not working properly in the editor for message payloads. This has been fixed.

AutoScript

TestUnits Collection

A new TestUnits collection has been implemented. All test interfaces (specified with Test Unit pragmas) will be listed there.

Functions Collection

Interfaces specified with either the scl_test_class or scl_test_flist pragmas are not listed in the Functions collection anymore.

Union Discriminant Accessor

A new synthesized "_Discriminant" field has been added as a member of the union object in AScript that is always active so that an internal discriminant value may be set or read regardless of the active member.

PAL

Memory Management

To support multi-process target, memory management support for dynamic, configurable, and internal static memory has been implemented in Runtime. Runtime makes PAL calls to acquire memory segments and manages the memory according to runtime configurations set by user. In case of multi-process target is enabled, these memory will be shared among multiple applications, and PAL should implement shared memory.

Protection using Mutex

Runtime now uses named mutex objects to protect critical data from multiple and simultaneous accesses by multiple threads and, in case of multi-process target is enabled, by multiple applications. Runtime makes PAL calls to obtain and control mutex objects.

New Routines

  • Memory Management

In case of multi-process target, recommended approach is to use Memory-Mapped Files to implement memory segments.

palMemSegmentOpen() - Open/create memory segment 
palMemSegmentClose() - Close memory segment
  • Named Mutexes
palMutexInit() - Initialize a mutex object
palMutexDestroy() - Destroy a mutex object
palMutexLock() - Lock a mutex object
palMutexUnlock() - Unlock a mutex object
  • Task Synchronization
palGetThreadId() - Get current thread Id
palGetProcessId() - Get current process Id
palSleep() - Suspend the execution of the current thread
  • Logging

This is optional.

palLog() - Logging utility

Updated Routines

  • Function signatures and functionalities of palWait() & palNotify() have been updated.
palWait() - now takes in an in/out pointer for events notification
palNotify() - mail box Id has been updated to notify any event including mail box Ids.
  • Function signatures of palMemAlloc() & palMemFree() have been updated.

Removed Routines

palProtect
palUnprotect
palCriticalErr

Removed Modules

S2Mem - The memory module provided as part of PAL has been removed. If a native 
        operating system does not support dynamic memory, the Runtime's memory 
        management module srMem can be used instead of S2Mem.

Runtime

  • STRIDE Host Release 3.0.01xx is compatible with the Runtime Version 3.00.
  • In order to eliminate redundancy and promote an object-oriented design, "Member Methods" have been removed from srTest; only "Member Objects" exist now in srTest. In addition, accessing the functionality of Member Objects in this way is similar to accessing scripting objects through the STRIDE Reporter object model. For a detailed explanation, refer to this article on the STRIDE Support Wiki.
  • A new routine, srInit(), replaces deprecated srInitialize(). Now the target will not be able to set an auto-connect with timeout.
  • The scl_tp and scl_tp_format pragmas have been deprecated. The new pragmas are scl_tracepoint and scl_tracepoint_format.
  • The default runtime configuration in srcfg.h now has fragmentation turned on. The srCFG_MAX_TRANSPORT_UNIT is set to 2048.
  • Fixed warnings for parameter name differences in function declarations and definitions for srSubscribe(), srTracePoint(), and srQuerySMID().
  • Removed unnecessary/extra response to srCONNECT_CLOSE_T_SMID message.
  • The Runtime now checks for the connection before responding with a "Pong" upon receiving a "Ping."
  • Introduced 40 additional system trace points to better describe internal errors.
  • Reporting of the error srERR_SUB_NONE has been suppressed so that it no longer generates a target trace error.
  • Trace views now always display srTraceStr() with reserved STID (srSTID_RESERVED) regardless of trace filter settings.
  • srPtrSetupChild() now accepts NULL for handle (out pointer - pwHandle).
  • Added a new Runtime Test Services (RTS) API srTestCaseSetStatusEx(), which enables the providing of the actual return value of a numeric test method in the case of failure.
  • Added two new public APIs - "Printing" APIs to display messages on Trace Views without having to specify a STID or a trace level and to set any trace filters on Trace Views. These routines support formatted strings with variable arguments. The srPrintInfo() will show as srTraceStr() with STID=0 and Level=3. The srPrintError() will show as srTraceStr() with STID=0 and the Level=1. Warning: These new APIs use vsnprintf() routine to process variable arguments. The vsnprintf() became a standard in C99 and is supported in C90.
  • To support multi-process target, significant changes have been made to runtime.
  • A new public routine, srUninit(), has been added to sr.h & srapi.c.
  • A new public routine for Runtime Thread exit point, srThreadUninit(), has been added to sr.h & srthread.c.
  • A new module, srMem, for Memory Management has been added. Its new routines, _srMem_Allocate() & _srMem_Free(), will be used in PAL's palMemAlloc() & palMemFree() in case of multi-process target is enabled.
  • Calls to palProtect() & palUnprotect() have been replaced by new routines _srProtect() & _srUnprotect(), in which the implementation uses its own mutex object that calls PAL's mutex routines.
  • In target Test Classes and Test Functions, added capability to specify the comment label in srTestCaseAddComment() and AddComment() APIs.
  • Fixed a potential data abort issue when executing delegate code in the IM prior to Runtime being initialized.
  • Runtime Test Services APIs are now thread safe.
  • Fixed cancelation of remote boadcast subcribtion goes in an infinite loop.
  • Fixed Runtime resource abuse when sending lots of broadcast messages.
  • Added partial check for message payload corectness.
  • The following Runtime files have been modified:
sr.h
srapi.c
srapi.h
srapirgl.c
srapirgl.h
srcfg.h
srconn.c
srconn.h
srerr.c
srib.c
srib.h
sribctrl.c
sribtr.c
sribtr.h
srmsgmar.c
srmsgptr.c
srmsgptr.h
srmsgque.c
srmsgque.h
srmsgrt.c
srmsgrt.h
srmsgsub.c
srmsgsub.h
srstid.c
srstid.h
srsuid.c
srsuid.h
srtest.c
srtest.cpp
srtest.c
srtest.h
srtestutil.c
srtestutil.h
srthread.c
srthread.h
srtime.c
srtime.h
srtp.h
srutil.h
  • The following Runtime files have been added:
srmem.c
srmem.h

Migration to 3.0.01xx

Recommended steps for migration from a previous version:

AutoScript

Any use of test classes through the Functions collection, like:

 $main::ascript->Functions->Item("my_test_class")->User->Call(); 

should be converted to use the new TestUnits collection:

 $main::ascript->TestUnits->Item("my_test_class")->Run(); 


API Changes

  • The Support Wiki pages now contain reference help for AutoScript.
  • All synchronous method calls now throw exceptions in order to indicate error conditions rather than have error conditions encoded in return values.
  • Asychronous method calls never throw exceptions to indicate error conditions. Instead, error conditions are delivered as a new Error object that is returned to ascript.WaitForEvent(). (Asynchronous methods are function.Owner.Return(), function.User.CallNonBlocking(), function.User.CallBypassOverrideNonBlocking(), message.Owner.Broadcast(), message.Owner.SendRsp(), message.User.SendCmd(), and message.User.SendCmdBypassOverride())
  • If ascript.WaitForEvent() times out, an Error object is returned. Previously NULL was returned in this case.
  • All objects returned by ascript.WaitForEvent() have Type and Name properties. When the Type is “Error”, the Error object has additional properties that contain further details about the error.
  • All existing script syntax for designation of message payloads has been deprecated. A new syntax that allows for greater expression has been adopted. Details can be found here. There are no syntax changes to function payloads.
  • The signature for ascript.Initialize has been changed. Successful calls to ascript.Initialize now fully initialize the object.

End-Of-Life Methods and Properties

This release marks the End-Of-Life (EOL) for the listed methods and properties. A call to any of these methods or an access to any of these properties will now result in a not-implemented exception in the script making the call or access.

  • ascript.Quit()
  • ascript.Interfaces
  • ascript.NamedEvents
  • ascript.WaitForEventWithTimeout
  • ascript.RspTimeoutNotifyEnabled
  • ascript.CreateTimer()
  • ascript.DestroyTimer()
  • ascript.WaitTimeoutNotifyEnabled
  • ascript.Compare_As_C_Values()
  • ascript.AsyncErrorNotifyEnabled
  • ascript.Function.Item().User/Owner.SMID

Recommended Steps for Migration From a Previous Version

  • Search for calls to ascript.WaitForEvent() in all scripts. Previous logic to test for null indicating timeouts must be modified. WaitForEvent() now always returns an object, in the case of a timeout (or other error) an Error object is returned.
  • Search for calls to ascript.Quit in all scripts. Modify the logic as necessary to exit the script by other means in place of the original Quit() call.
  • Search for all asynchronous method calls (Asynchronous calls are limited to function.Owner.Return(), function.User.CallNonBlocking(), function.User.CallBypassOverrideNonBlocking(), message.Owner.Broadcast(), message.Owner.SendRsp(), message.User.SendCmd(), and message.User.SendCmdBypassOverride()). Modify the logic as necessary to call ascript.WaitForEvent() if errors (including timeout error) should be detected.
  • If you have scripts that explicitly instantiate an ascript object (i.e. they create an object using the "STRIDE.ascript" PROGID), search for all occurrences and modify the subsequent call to ascript.Initialize() to pass the new parameter set.
  • Search for all EOL'd methods and properties. Each can be replaced by setting the appropriate timeout property and handling the timeout error object delivered by WaitForEvent.


EOL’dMethod or Property

Recommended Replacement

ascript.Quit()

Refactor script logic to exit the script by other means.

ascript.Interfaces

Use ascript.Functions or ascript.Messages as appropriate.

ascript.NamedEvents

Contact S2 Technologies

ascript.WaitForEventWithTimeout

Use ascript.WaitForEvent() after setting desired timeout using ascript.WaitTimeoutPeriod

ascript.RspTimeoutNotifyEnabled

No longer needed. Timeout notifications are performed by returning an Error object from ascript.WaitForEvent()

ascript.CreateTimer()

Use ascript.Timers.Add()

ascript.DestroyTimer()

Use ascript.Timers.Remove()

ascript.WaitTimeoutNotifyEnabled

No longer needed. Timeout notifications are performed by returning an Error object from ascript.WaitForEvent()

ascript.Compare_As_C_Values()

Contact S2 Technologies

ascript.AsyncErrorNotifyEnabled

No longer needed. Error notification from asynchronous calls is performed by returning an Error object from ascript.WaitForEvent()

ascript.Function.Item().User/Owner.SMID

Use ascript.Function.Item().User/Owner.SUID

PAL

Please refer to Platform Abstraction Layer (PAL) Specification for detailed information on new APIs. You may also refer to Linux implementation of PAL, which has been updated with new routines.

  • Implement new shared memory routines, palMemSegmentOpen() & palMemSegmentClose(). In case of multi-process target, these routines should implement shared memory using memory-mapped files.
  • Runtime now can manage dynamic, configurable, and internal static memory. In case of multi-process target, update palMemAlloc() to simply call _srMem_Allocate() and palMemFree() to simply call _srMem_Free(). In case of single-process target, you can simply allocate dynamic memory according to your Operating System. If you are upgrading, you can simply leave the current implementation as it is.
  • Implement new mutex routines, palMutexInit(), palMutexDestroy(), palMutexLock() & palMutexUnlock, to handle any named mutex objects. It is recommended to implement a separate code for shared memory case if it is necessary.
  • Remove old routines palProtect(), palUnprotect() and palCriticalErr().
  • Implement new routines palGetThreadId() and palGetProcessId().
  • Implement new routine palSleep().
  • Update synchronization routines, palCreateNID(), palDeleteNID(), palWait() & palNotify(), to support event notifications and in case of multi-process target is enabled, sharing of the synchronization objects among multiple processors.
  • If your PAL uses S2Mem routines for dynamic memory, you should use new Runtime module srMem. Update palMemAlloc() to call _srMem_Allocate() and palMemFree() to call _srMem_Free().
  • Optionally, implement new routine palLog() as a logging utility for PAL and Runtime.

Runtime

  • Edit srcfg.h file to configure the new memory management (srCFG_MEMORY_MANAGEMENT) and multi-process target (srCFG_MULTI_PROC_TARGET) settings. By default, memory management and multi-process target are disabled. If you enable multi-process target you also need to enable memory management and configure the sizes and the maximum number of memory blocks. New Runtime module srMem uses these configurations to allocate and manage memory segments.
  • Edit srcfg.h file to configure the new target connection timeout setting (srCFG_CONNECTION_TIMEOUT).
  • If target Test Classes and Test Functions are used, change the signature to include test label in srTestCaseAddComment() and AddComment() APIs.

Windows Applications using Windows Off-Target SDK

Existing Host Apps developed against the old hostapphrt and hostapptrt libraries should be updated to use the new Windows Off-Target SDK as follows:

  • replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project's include path
  • replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project's library path
  • replace hostapphrt/hostapptrt.lib with stride.lib in your library list
  • replace the include of hostapp.h with include of stride.h
  • replace all calls to HostAppXXX() following the samples in the Windows SDK
  • remove srHOST and srWIN32 preprocessor definitions

Minor and Patch releases

3.0.0101a

3.0.0101b

  • Relaxed scl_cast() pragma to allow cast from any integral ptr to union of ptrs
  • Fixed compile warnings in Linux PAL.
  • Fixed issue in instrumentation of Test Units.
  • Fixed issue with UNC paths.
  • Fixed several minor issues in STRIDE Studio.

3.0.0102

  • Implemented new licensing scheme. Existing licenses will not work anymore and need to be reissued. Old and new licenses could co-exist at the same location.
  • The syntax of scl_ptr and scl_ptr_sized pragmas has changed. Now it is required to quote the direction and usage attributes. See this page for details.
  • Runtime Test Services now support adding annotations per test suite.
  • A complete set of Samples has been implemented.
  • In STRIDE Studio the processing of Trace information has been optimized.
  • A set of simpler high level APIs were added to the PAL for Linux.
  • The Linux tools package now contains the STRIDE Runtime source and a set of generic PAL implementations.
  • STRIDE Host Release 3.0.0102 is compatible with the Runtime Versions 3.00 and 3.01.

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

The following Runtime files have been modified:

srconn.c
srtest.c
srtest.cpp
srtest.h

3.0.0103

  • Implemented the new scl_struct_sized pragma for specifying variable sized structures.
  • Added a new Sized Structure Wizard to Studio.
  • Updated the scl_conform pragma to allow the specification of payload members.
  • Added a new Conformant Array Wizard to Studio.
  • Removed all frameworks and packages that had been part of previous StoneSteps releases. WorkspaceSetup.pl has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.
  • Packaged two new platform SDKs, WinMobile SDK and Linux SDK. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.
  • The Windows Off-Target SDK has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the Windows SDK.
  • Packaged Build Tools as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).
  • Packaged the STRIDE Runtime source files as a separate zip archive. The same source is available in our SDKs, so customers only need this source package if they are not using a prepackaged SDK.
  • The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available. This installs all available host components, including the Build Tools for Windows.
  • We have made changes to the way we recommend customers validate their target STRIDE integration.
  • Added/renamed several utility scripts in %STRIDE_DIR%/Scripts.
  • STRIDE Host Release 3.0.0103 is compatible with the Runtime Versions 3.00, 3.01, and 3.02.

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

  • [1627] PAL_IO_BUF_MAX_SIZE exceeded.
  • Several minor issues in STRIDE Build Tools.
  • Several minor issues in STRIDE Studio.
  • Unable to use Windows PAL for device driver testing.
  • Deadlock in shared memory/multi-process enabled Linux applications.
  • Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.

Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:

srconn.c
srinstall.h
srinstall.c

3.0.0103a

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

  • Linkage problem with the STRIDE Runtime source when compiled along with customer source.
  • Externally loaded in STRIDE Studio cross-platform built database may produce warnings.
  • Syntax error in WinMobile SDK source.

The following Runtime files have been modified:

srinstall.h

3.0.0103b

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

  • Syntax error (extra semicolons) in the STRIDE Runtime source. The following files have been modified:
 srinstall.c
  • Unable to upload in STRIDE Studio to portal space with spaces in the name.
  • Missing settings folder and incorrect makefile in WinMobile SDK package. The following source files have been modified:
 stride.c
 stride.mak
  • Minor issue in Linux SDK. The following source files have been modified:
 palOS.c
 makefile

3.0.0103c

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

  • STRIDE Studio SCL Wizard uses back slashes (..\myfile.h) as path delimiter when inserting include statements which may fail to compile with some targets.
  • Due to restrictions in some embedded C runtime libraries Multi-Process support in Linux SDK doesn't work. The following source files have been modified:
 palOS.c
 palcfg.h
  • Incomplete resource cleanup on initilization failure in Linux SDK and WinMobile SDK. The following source files have been modified:
 stride.c

3.0.0103d

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

  • STRIDE Studio SCL Wizard may include the same header file more then ones.
  • STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:
-DsrCPP_HAS_NAMESPACE=<0|1>

where 1=enable and 0=disable. By default it is enabled. The following source files have been modified:

 sr.h
 srtest.h
 srtest.cpp
  • Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. The following source files have been modified:
 srinstall.h
 srinstall.c
 srmem.c
 srmsgmar.c
 srmsgptr.c
 srtime.h
 srtime.c

3.0.0104

  • A set of new Test Unit Macros has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.
  • Linux SDK has been updated for certain targets.
  • The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature:
-DsrCRT_HAS_WCHAR_T=<0|1>
-DsrCRT_HAS_LONG_LONG=<0|1>
-DsrCRT_HAS_LONG_DBL=<0|1>
-DsrCRT_HAS_VAR_ARGS=<0|1>

where 1=enable and 0=disable. By default they are all enabled.

  • STRIDE Host Release 3.0.0104 is compatible with the Runtime Versions 3.00, 3.01, 3.02, and 3.03.

The following Runtime source files have been modified:

sr.h
srapi.c
srapirgl.h
srapirgl.c
srcfg.h
srcgutil.h
srcgutil.c
srconn.c
srinstall.h
srinstall.c
srtest.c
srtest.cpp
srtestutil.h
srutil.h

The following Runtime source files have been added:

srtestmacros.h
srtestmacros.c
srtestmacros.cpp
srutil.c

3.0.0104a

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

3.0.0104b

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

3.0.0104c

Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:

  • Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.
  • Added new "_Discriminant" member to union objects in AScript that is always active. This allows access to internal discriminants regardless of which member is currently active.
  • Enhancement to Trace View post filtering - to include matching call/return events.