Release notes and changelog

« Back to documentation home

5.44.0 — 12 Jan 2024

Features

  • Added support for zero response messages in server streaming record/replay gRPC

Fixes

  • Library upgrades to fix OWASP issues
  • Exposed properties to allow changing maximum HTTP header size:
    trafficparrot.virtualservice.jettyHeaderRequestSize=8192
    trafficparrot.virtualservice.jettyHeaderResponseSize=8192

Changes

  • Reduced default HTTP container threads from 500 to 100:
    trafficparrot.virtualservice.containerThreads=100

5.43.2 — 17 Dec 2023

Features

  • Added support for editing gRPC response delays in the UI
  • Added support for editing HTTP/gRPC response delays with uniform min/max distribution in the UI
  • Added support for connecting to IBM® MQ with an unspecified or null username/password

Fixes

  • Library upgrades to fix OWASP issues
  • Timeout shutdown if tray icon takes too long to close

Changes

  • Upgraded protoc from 3.24.4 to 3.25.1
  • Upgraded gRPC from 1.58.0 to 1.60.0
  • Upgraded bundled JRE from 8u382 to 8u392
  • Increased shutdown logging verbosity
  • Windows executable metadata was updated
  • The default virtual service CA certificate was renewed
  • Amazon SQS HTTP plugin retired, please contact support@trafficparrot.com if you need extended support

5.42.3 — 01 Nov 2023

Fixes

  • Library upgrades to fix OWASP issues

5.42.2 — 19 Oct 2023

Features

  • Added support for casting to a boolean value
  • Added request matching and response templating examples to check for presence of an optional JSON field:
    {{#if (jsonPath request.body '$.[?(@.field)]') }}field is present{{/if}}
    {{#if (not (jsonPath request.body '$.[?(@.field)]') ) }}field is not present{{/unless}}
    {{#if (jsonPath request.body '$.[?(!(@.field))]') }}field is not present{{/unless}}
    {{#unless (jsonPath request.body '$.[?(@.field)]') }}field is not present{{/unless}}
    
  • Added new Couchbase configuration options
    • Added support for executing a Couchbase warmup query on startup, which can improve performance of subsequent
    • Added support for setting Couchbase IO options enableDnsSrv and networkResolution
    • Enable in database-connections.json by setting:
      {
          "connectionId": "couchbase.db",
          "type": "COUCHBASE_CONNECTION",
          "connectionString": "couchbase://localhost:32784",
          "username": "Administrator",
          "password": "password",
          "warmupQuery": "SELECT COUNT(*) FROM bucket_a UNION SELECT COUNT(*) FROM bucket_b",
          "enableDnsSrv": true,
          "networkResolution": "auto"
      }
  • Added support for OpenAPI request schema validation annotations (beta)
    • Enable in trafficparrot.properties by setting:
      # OFF will turn off validation
      # DEFAULT_VALIDATION will turn on validation and provide default responses when not annotated
      # ONLY_ANNOTATED will turn on validation only for annotated specifications
      trafficparrot.openapi.request.validation.mode=OFF
    • Place OpenAPI specifications in the openapi configuration directory
    • Requests that match the OpenAPI URL will be validated according to the schema of the parameters
    • By default, Traffic Parrot will return an HTTP 400 response with a human-readable plain text validation message of the first validation error encountered
    • You can customize which fields to validate and the error response, by annotating the OpenAPI YAML file with:
      paths:
        /items:
          get:
            parameters:
              # standard OpenAPI parameters with schema definitions
            responses:
              '400':
                content:
                  application/json:
                    schema:
                      # standard OpenAPI response schema definition
                x-traffic-parrot-validation: # array of validations that trigger this response code
    • To validate the entire request and return a plain text validation message:
      x-traffic-parrot-validation:
      - type: schema
        response: ${in} parameter ${name} has invalid value ${value} because ${reason}
    • To validate the entire request and return a specific response object:
      x-traffic-parrot-validation:
      - type: schema
        response:
          code: INVALID_REQUEST
          message: ${in} parameter ${name} has invalid value ${value} because ${reason}
    • To validate particular query/path/header parameters and return a specific response object:
      x-traffic-parrot-validation:
      - type: schema
        parameters:
        - name: style
          in: query
        - name: limit
          in: query
        - name: id
          in: path
        - name: X-Request-Label
          in: header
        response:
          code: INVALID_REQUEST_PARAMETER
          message: ${in} parameter ${name} has invalid value ${value} because ${reason}
    • To validate the request body:
      x-traffic-parrot-validation:
      - type: schema
        parameters:
        - name: *
          in: requestBody
        response:
          code: REQUEST_BODY_INVALID
          message: Request body has invalid value ${value} because ${reason}
    • To perform a specific validation and fall back on a catch-all validation:
      x-traffic-parrot-validation:
      - type: schema
        parameters:
        - name: style
          in: query
        response:
          code: INVALID_QUERY
          message: query parameter ${name} has invalid value ${value} because ${reason}
      - type: schema
        response:
          code: INVALID_REQUEST
          message: ${in} parameter ${name} has invalid value ${value} because ${reason}
      
    • Multiple response codes can be annotated, but only one response code per OpenAPI path should have a catch-all validation
    • The template parameters ${name} and ${value} will be populated with the name and value of the field that failed validation
    • The template parameter ${in} will be populated with query/path/header/requestBody
    • The template parameter ${reason} will be populated with a human-readable description of why the validation failed

Fixes

  • Library upgrades to fix OWASP issues
  • Upgrade script now migrates any previous logback configuration
  • Fixed an issue where {{ dataSource }} errors would shadow all other context variables
  • Improved internal error reporting when an expected Handlebars variable is not found or of the wrong type
  • Validate that mapping queue name is not empty when saving a mapping and when starting replay mode
  • Improved performance when using custom request matchers for requests that do not match the standard matcher checks

Changes

  • Upgraded WireMock from 2.35.0 to 2.35.1
  • Upgraded protoc from 3.23.4 to 3.24.4
  • Upgraded gRPC from 1.56.1 to 1.58.0
  • Upgraded bundled JRE from 8u372 to 8u382

5.41.7 — 26 Aug 2023

Fixes

  • Fixed support for modifying more than one header in a Handlebars script:
    {{ modifyResponse 'headerValue' 'header-name-1' 'header-value-1' }}
    {{ modifyResponse 'headerValue' 'header-name-2' 'header-value-2' }}
  • Improved system tray OS compatibility
  • Fixed a bug in the stop.sh script impacting Apple ARM based M1/M2 processors
  • The UI log file viewer now supports viewing .gz and .zip log files

Changes

  • Logback can now be specified as a logging provider in jvm.args:
    trafficparrotserver.logging.properties.filename=trafficparrotserver.logback.xml
  • For organizations that have parted ways with all versions of Log4j, we now offer a distribution with those JAR files removed entirely

5.41.0 — 10 Aug 2023

Features

  • Random mixed case strings of a fixed length can now be generated using
    {{ randomValue length=10 type='ALPHANUMERIC' mixedcase=true }}
  • Header values can now be set in Handlebars scripts using
    {{ modifyResponse 'headerValue' 'header-name' 'header-value' }}
  • New simplified OpenAPI mock import
    • Enable in trafficparrot.properties by setting:
      trafficparrot.openapi.import.mode=SELECT_RESPONSE_STATUS
      trafficparrot.openapi.skeletons.mode=SELECT_RESPONSE_STATUS
    • When OpenAPI response examples are present, they are used directly as mock responses
    • Otherwise, OpenAPI schema data types and field structures are used to generate a valid mock response
    • The request header x-traffic-parrot-select-response-status can be set to a numeric response code to select which response to return
    • The default response returned is the success response
    • The request body is not included in matching, to simplify the response selection
    • The request URL is used for matching, including checking for mandatory path and query parameters
  • Role based UI access to allow defining some read only UI users that are allowed view permissions but not edit permissions
    • Enable in trafficparrot.properties by setting:
      trafficparrot.gui.security.mode=LOGIN_PROPERTIES
    • Define users in trafficparrot.gui.login.properties by setting:
      admin=password,traffic-parrot-gui-role,traffic-parrot-gui-edit-role
      readonly=password,traffic-parrot-gui-role
    • HTTP basic authentication popup prompts users to specify a username and password
  • Allow loading gRPC existing proto set files in proto-bin with .set.bin extension (e.g. as output by gRPCurl)
  • Added a UI page with instructions on how to provide the required JAR files when working with IBM® MQ

Fixes

  • Library upgrades to fix OWASP issues
  • {{ evaluate 'variable' }} now recognizes a variable that was set using {{#assign 'variable'}}value{{/assign}}
  • Fixed an issue with the default permissions of the lib/external folder on Linux
  • Fixed an issue with saving very large XML body mappings in the UI

Changes

  • Upgraded protoc from 3.21.9 to 3.23.4
  • Upgraded gRPC from 1.51.0 to 1.56.1

5.40.2 — 01 Jun 2023

Features

  • Added Couchbase data source support:
    {{ dataSource 'couchbase.db' 'INSERT INTO PERSON(KEY, VALUE) VALUES ("$id", {"id" : $id,"name" : $name})' id=1000 name='some-name' syntax='N1QL' }}
    {{ dataSource 'couchbase.db' 'SELECT name FROM PERSON USE KEYS "$id"' id=1000 single=true syntax='N1QL' }}
    {{ dataSource 'couchbase.db' 'INSERT INTO PERSON(KEY, VALUE) VALUES ("$id", $object)' id=1000 object=example syntax='N1QL' }}
  • New helper to iterate a certain number of times:
    {{#times 10}}{{@index}}{{#unless @last}},{{/unless}}{{/times}}
  • New HTTP mapping bulk delete API:
    DELETE http://localhost:8080/api/http/mappings/bulk/UUID1,UUID2,UUID3
  • New gRPC mapping bulk delete API:
    DELETE http://localhost:8080/api/grpc/mappings/bulk/UUID1,UUID2,UUID3

Fixes

  • Library upgrades to fix OWASP issues

Changes

  • Upgraded bundled JRE from 8u362 to 8u372
  • Helper {{#equal a b }}true{{else}}false{{/equal} can now be written inline as {{ equal a b }}
  • When using Handlebars partial files, it is now possible to use a different file extension than .hbs for example {{>example.txt}} will read from file example.txt

5.39.5 — 05 May 2023

Features

  • Multiple gRPC servers can now be recorded at the same time, for example:
    com.example.Service/method -> host1:port1
    com.example.packageA.* -> host2:port2
    com.example.packageB.* -> host3:port3
  • Added support for Java object Serializable Proto messages sent over JMS connections e.g. RabbitMQ RPCs
  • Added support for sending multiple types of request/response message (e.g. two different Java Proto request/response pairs) on a single request/response queue pair
  • Added support for RabbitMQ contentType header
  • Added PostgreSQL example connection to database-connections.json
  • JSON request/response field data in mappings can now be externalized to/from MappingData.csv for an alternative way to edit field data across multiple mappings in a table format
  • Tools UI menu with links to simple file editor and mapping field data externalization

Fixes

  • JMS advanced request and response types are now retained in the UI form when starting/stopping recording
  • Improved HTTP recording UI error message when there is a problem fetching recording status in the UI
  • Increase HTTP recording UI status timeout to cope better with slow browser connections
  • If there is a problem decoding a recorded JMS message, fall back on a raw bytes recording representation
  • Mention which actual connection ids were present when a JMS connection id is not found
  • Removed deprecated "matches script" option from the request body matcher dropdown (replaced by dedicated fields)

Changes

  • Upgraded bundled JRE from 8u352 to 8u362
  • When matching JMS requests, mappings for Java object Serializable requests now must have the bodyType specified
  • The default UI HTTPS certificate user-interface-https.jks was renewed

5.38.1 — 09 Apr 2023

Features

  • Add request/response recording Protobuf type fields to JMS UI

5.38.0 — 03 Apr 2023

Features

  • RabbitMQ JMS now supports record/replay of Protobuf messages using their JSON representation
  • Added new dedicated endpoints that can be used for Docker and OpenShift health check probes:
    • http://localhost:8080/api/health
    • http://localhost:8081/__admin/health
  • The trafficparrot.license comment line is now printed in the logs to help clarify which license is being used

Fixes

  • If we can't import an OpenAPI YAML file example due to a schema mismatch exception, skip that one example and log why it was not imported
  • Library upgrades to fix OWASP issues

5.37.8 — 27 Mar 2023

Fixes

  • Added support for protoc on Apple ARM based M1/M2 processors running inside of Docker

5.37.7 — 20 Mar 2023

Features

  • New HTTP request matching script can be used to e.g. match a request header using a regular expression
  • New {{evaluate}} helper to evaluate a JavaScript command
  • JMS recording now supports requests that use JMSReplyTo
  • JMS IBM MQ new toggle in connection to enable copying request JMSMessageID to response JMSMessageID
  • RabbitMQ JMS improvements including:
    • RabbitMQ RPC support
    • RabbitMQ replyTo support
    • RabbitMQ virtual host support
    • Declare queue if it does not already exist in the broker on record/replay start using the arguments specified in the connection e.g. x-max-length
  • Object store improvements including:
    • All operations are now thread safe within a single Traffic Parrot instance
    • A default value can be specified to return if an object is not found
  • trafficparrot.virtualservice.handlebars.select.indexAndCacheCsvFiles property is now also taken into account for {{ dataSource }} CSV file access

Fixes

  • Allow API requests to set the Accept header with multiple content types, so long as the first one listed is application/json
  • Fixed an issue with the scenario dropdown when no default port specified
  • If there is an exception when starting, e.g. due to a missing property, startup fails immediately instead of waiting the full timeout duration to fail
  • If the trafficparrot.license does not exist on startup, a relevant message is now displayed in the UI
  • Improved compatibility with OpenShift 4 when using a TLS passthrough route to the license server

Changes

  • gRPC matching now returns the closest match if multiple candidate responses match and warns in the logs about multiple matches
  • Bundle third-party-licenses.zip instead of many small license text files, which were slow to extract on Windows

5.36.4 — 30 Jan 2023

Features

  • New upgrade script supporting Linux/Mac/Windows
  • The tray icon now displays the installation location and has a link to the latest Traffic Parrot documentation
  • The default implementation of {{now}} can be toggled using trafficparrot.properties
    • To use the Handlebars.java {{now}} helper:
      trafficparrot.virtualservice.handlebars.now.provider=HANDLEBARS
    • To use the WireMock {{now}} helper:
      trafficparrot.virtualservice.handlebars.now.provider=WIREMOCK
  • Alternatively, you can add the provider parameter per call to dynamically switch between them, otherwise the default implementation specified in trafficparrot.properties will be used
    • To enable this set in trafficparrot.properties:
      trafficparrot.virtualservice.handlebars.now.dynamic=true
    • To use the WireMock implementation:
      {{now offset='2 years' format='epoch' provider='WIREMOCK'}}
    • To use the Handlebars.java implementation:
      {{now format='short' provider='HANDLEBARS'}}

Fixes

  • Fixed a bug when parsing single quotes in OpenAPI specifications

Changes

  • Upgraded bundled JRE from 8u345 to 8u352
  • This release is compatible with the MQ com.ibm.mq.allclient JAR up to version 9.3.1.0
  • Mention both tp.out and trafficparrot.log when there is a problem starting

5.35.8 — 19 Dec 2022

Features

  • Added new "does not contain" request matcher support to the UI

Fixes

  • API now allows cross-origin requests
  • Trim whitespace from JSONPath request matcher to avoid confusing not matched issues
  • Fixed an issue exporting/importing HTTP mappings ZIP between different scenarios
  • Fixed a UI issue where gRPC mappings were saved with empty webhooks
  • Library upgrades to fix OWASP issues

Changes

  • UI now makes it clear that HTTP record/proxy/passthrough is not supported in a non default scenario yet
  • Upgraded gRPC from 1.50.2 to 1.51.0

5.35.6 — 07 Dec 2022

Fixes

  • Library upgrades to fix OWASP issues

Changes

  • HTTP mapping ZIP export now includes data directory

5.35.5 — 10 Nov 2022

Features

  • Added support for Apache Thrift service simulation, see a demo video
  • Added ability to configure HTTP basic authentication for the Traffic Parrot user interface
    • Enable in the trafficparrot.properties file by setting:
      trafficparrot.gui.security.mode=LOGIN_PROPERTIES
    • Configure users in the trafficparrot.gui.login.properties file, in Jetty HashLoginService format:
      admin=password,traffic-parrot-gui-role

Fixes

  • Fixed a UI issue with mappings edited multiple times during the same UI session
  • Added support for protoc on Apple ARM based M1/M2 processors
  • Library upgrades to fix OWASP issues

Changes

  • Upgraded bundled JRE from 8u332 to 8u345
  • Upgraded WireMock from 2.33.2 to 2.35.0
  • Upgraded gRPC from 1.46.0 to 1.50.2
  • Upgraded protoc from 3.20.1 to 3.21.9

5.34.7 — 14 Oct 2022

Fixes

  • Fixed an issue with the enabled script for HTTP webhook callbacks
  • Fixed an issue with XLS data stores when storing and retrieving values with leading zeros
  • Library upgrades to fix OWASP issues

5.34.3 — 16 Sep 2022

Features

Fixes

  • Library upgrades to fix OWASP issues

5.34.0 — 02 Aug 2022

Features

Fixes

  • Library upgrades to fix OWASP issues

Changes

  • The HTTP passthrough will be removed in a future release. Please use the proxy response feature instead.

5.33.11 — 03 Jun 2022

Features

  • Added access logging for UI interactions, written to logs/http-ui-access/http-ui-access-yyyy_mm_dd.log

Changes

  • Upgraded bundled JRE from 8u282 to 8u332
  • Upgraded gRPC from 1.43.1 to 1.46.0
  • Upgraded protoc from 3.19.1 to 3.20.1
  • Upgraded WireMock from 2.31.0 to 2.33.2
  • HTTP VS access logs are now written to logs/http-vs-access/http-vs-access-yyyy_mm_dd.log
  • Upgraded Gradle version in examples project from 4.10.1 to 7.4.2
  • Logs file listing in UI is now ordered by last modified date

Fixes

  • Library upgrades to fix OWASP issues

5.33.5 — 09 May 2022

Features

  • Added new trafficparrot.properties to allow sending custom headers to the on premise license server: trafficparrot.license.usage.custom.headers=ExampleA:ValueA,ExampleB:ValueB

Changes

  • Pressing the Cancel button on the Add mapping form now clears the form fields

Fixes

  • Library upgrades to fix OWASP issues

5.33.2 — 14 Mar 2022

Features

  • Native IBM® MQ mapping multiple response messages now support zero response messages. This allows for consuming request messages without sending any response message.
  • Added new trafficparrot.properties to allow starting JMS queue replay on startup:
    • trafficparrot.jms.start.queue.replay.on.startup=false
    • trafficparrot.jms.start.queue.replay.on.startup.consumeRequestsFromConnectionId=1
    • trafficparrot.jms.start.queue.replay.on.startup.replayResponsesToConnectionId=1
  • Extended virtual service support for using multiple JMS virtual services linked to separate mappings:
    • The scenarios/VirtualServiceName/service.properties now allows for configuring:
      • jms.queue.replay.on.startup=true
      • jms.queue.replay.request.connection.id=1
      • jms.queue.replay.response.connection.id=1
    • The scenarios/VirtualServiceName/jms-connections.json file is used to specify the queue manager connections per virtual service
    • The scenarios/VirtualServiceName/jms-mappings directory contains the mappings files per virtual service
    • The UI allows starting JMS replay for multiple virtual services at a time
  • RabbitMQ JMS queue declare arguments can now be specified in the mapping JSON. Please note that the UI does not yet support this feature.
  • RabbitMQ JMS queue names may now be specified in the format exchange/routingKey instead of a direct queue name

Changes

  • Upgraded bundled JRE from 8u292 to 8u322
  • RabbitMQ JMS with AMQP compatibility mode enabled does not support topics and will now fail with an error message

Fixes

  • Fix for too long error message with {{ dataSource }} when template parameters values incorrectly contain further template parameter keys
  • Fix to support using RabbitMQ AMQP replyTo to send a message to a temporary response queue as indicated in the request message replyTo property
  • Library upgrades to fix OWASP issues

5.32.0 — 17 Feb 2022

Features

  • Added support for using a proxy server with path based routing between Traffic Parrot and the license server

5.31.2 — 30 Jan 2022

Features

  • Added ability to import and export IBM MQ mappings in ZIP file format
  • JMS response messages now populate the response JMSCorrelationID using the JMSCorrelationID from the request message if it is present or else the JMSMessageID from the request
  • JMS response messages are now sent to the JMSReplyTo destination if present or else the mapping destination is used

Changes

  • Updated VS HTTPS certificates with new 3 year validity period

5.30.1 — 07 Jan 2022

Features

  • Added support for connecting to an internal or external ActiveMQ broker via JMS AMQP 1.0
  • Added support for username/password when connecting to external ActiveMQ broker

Changes

  • Include ActiveMQ sample JMS AMQP 1.0 connection

Fixes

  • Library upgrades to fix OWASP issues
  • Fixed an issue with the {{ regex }} helper when using an {{ xPath }} result as a parameter

5.29.7 — 31 Dec 2021

Features

  • Added new trafficparrot.properties to allow configuring separate HTTP and HTTPS ports for the UI:
    • trafficparrot.gui.http.port=8080
    • trafficparrot.gui.http.port.enabled=true
    • trafficparrot.gui.https.port=8079
    • trafficparrot.gui.https.port.enabled=true
    • trafficparrot.gui.https.jks.resource=certificates/user-interface-https.jks
    • trafficparrot.gui.https.jks.password=trafficparrot
  • Added support for connecting to an external RabbitMQ 3 broker via JMS
  • Added support for HTTP webhooks including:
    • UI to configure callback on the HTTP Add/Edit mapping page
    • Send request callback after a fixed delay
    • Use data from the original request and response body in the callback request template
    • Enable callback to be sent or not based on script
  • Added support for uploading data directory when uploading an HTTP mappings zip file
  • Added support for DOTALL option in {{ regexExtract }} helper

Changes

  • Upgraded WireMock from 2.29.1 to 2.31.0
    • WireMock removed support for parameter normalizing in response templates
    • To restore parameter normalizing behaviour, please set: trafficparrot.virtualservice.handlebars.normalizeHelperParameters=true
  • Upgraded gRPC from 1.39.0 to 1.43.1
  • Upgraded protoc from 3.17.3 to 3.19.1
  • Include RabbitMQ sample JMS connection

Fixes

  • Fixed a bug with indexed {{ dataSource }} parameters
  • Fixed a bug with mixed type XLS columns
  • Fixed a bug with the tray icon on Windows
  • Library upgrades to fix OWASP issues

5.28.2 — 09 Sep 2021

Features

  • Added a new property that allows to skip starting the web user interface trafficparrot.gui.enabled. By default, the user interface is enabled, but it can be disabled for example in CI/CD builds or pipelines to allow TP to use less resources.
  • Added a new property to allow skipping MQ RFH headers when matching the body of an MQ request message trafficparrot.ibmmq.skipHeadersInRequestMessageBodyWhenMatching=true
  • Added UI for viewing archived log files. Note that this currently supports only plain text archived log files without compression, as used in the default trafficparrotserver.log4j.properties configuration
  • Improve list of gRPC skeletons when multiple oneof or optional fields used in response

Changes

  • Upgraded WireMock from 2.29.0 to 2.29.1

5.27.3 — 22 Jul 2021

Features

  • Added a new helper to convert between data types in responses, which can be useful when combining helpers that require specific data types e.g. {{ randomInteger 0 (cast (xPath request.body '/Node/Max/text()') type='int') }}
  • Added a new helper to use an existing XLS/CSV/JDBC as a data source in responses, which can be used to lookup or update data e.g. {{ dataSource 'name.db' 'SELECT name FROM person WHERE id = :id' id=(cast (xPath request '//data/id/text()') type='string') single=true }}
  • Added a new helper to allow modifying the HTTP response code e.g. {{ modifyResponse 'statusCode' 404 }}
  • Added negate and round operations to the arithmetic operations helper
  • Added a new helper to manage a simple JSON object store that can be used to help implement simple stateful mocks (beta)
  • Line breaks are now supported in helper string arguments
  • Added a minimal configuration file editor to the configuration page to allow files that do not have dedicated UI elements to be edited via the UI as plain text files

Fixes

  • Fixed a bug where directory structure was not properly created when importing a zip of proto files
  • Fixed a UI memory leak that occurred when the Add/Edit page was left open for too long
  • Fixed support for HTTP state machine transitions

Changes

  • Change SDK workspace examples to use non-deprecated SDK methods
  • Upgraded bundled JRE from 8u282 to 8u292
  • Upgraded WireMock from 2.27.2 to 2.29.0
  • Upgraded gRPC from 1.36.0 to 1.39.0
  • Upgraded protoc from 3.15.5 to 3.17.3

5.26.3 — 14 Jun 2021

Features

  • Added a new helper to allow calculating and formatting date offsets in responses e.g. {{ dateOffset (jsonPath request.body '$.date_field') add=true format='yyyy-MM-dd' days=1 }}
  • Added support for accessing a standard set of runtime properties in plugins so that e.g. plugins can be supplied with configuration files at runtime that are placed in virtual service specific or global shared directories

Fixes

  • Improved support for handlebars partial template files:
    • The root for partials now takes into account the directory specified in trafficparrot.virtualservice.trafficFilesRootUrl=file:.
    • The root for partials when using virtual services is the named directory scenarios/ScenarioName/*.hbs

5.25.0 — 10 May 2021

Features

5.24.11 — 16 Apr 2021

Features

  • Properties not defined in trafficparrot.properties will now fall back on default values. The settings UI page and log file will display which properties are using default values not taken from the properties file.

Fixes

  • Improved diagnostic logging when ports are already in use at startup time
  • Maven MQ examples project now includes MQCSP parameter

Changes

  • This release is compatible with the MQ com.ibm.mq.allclient JAR up to version 9.2.2.0

5.24.9 — 25 Mar 2021

Features

  • Extended virtual service support for using multiple native IBM® MQ virtual services (beta) linked to separate mappings:
    • The scenarios/VirtualServiceName/service.properties now allows for configuring:
      • ibm.mq.queue.replay.on.startup=false
      • ibm.mq.queue.replay.request.queue.manager=REQ.QM
      • ibm.mq.queue.replay.response.queue.manager=RSP.QM
    • The scenarios/VirtualServiceName/ibm-mq-connections.json file is used to specify the queue manager connections per virtual service
    • The scenarios/VirtualServiceName/ibm-mq-mappings directory contains the mappings files per virtual service
    • The UI allows starting MQ replay for multiple virtual services at a time
  • The configuration points database-connections.jsondata and ibm-mq-connections.json are now configured per virtual service relative to the virtual service directory rather than globally
  • The service.properties file is now sorted by key when changes are made via the UI
  • The logs now contain the virtual service name to help determine which log lines correspond to which virtual services

Fixes

  • Improved OpenAPI import examples compatibility
  • Fixed an issue where the total number of MQ writeConnectionsToOpen specified in ibm-mq-connections.json was incorrectly being read from the readConnectionsToOpen field
  • Fixed a race condition where a scenario change could result in HTTP mapping file bodies being momentarily loaded from the incorrect directory
  • Fixed an issue where some temporary directories were not being cleaned up properly on shutdown
  • Fixed an issue where refreshing the page after stopping replay mode would result in attempting a form resubmission
  • Fixed an issue where the UI log pages would sometimes be incorrectly detected as binary files by the browser and downloaded instead of displayed

Changes

  • The xPath helper now allows iteration over specific extracted nodes as an alternative to using the xPathList helper, which iterates over all of the child nodes
  • The equal helper now additionally considers the arguments to be equal if they convert to the same string representation when rendered (e.g. XML nodes)
  • Upgraded bundled JRE from 8u262 to 8u282
  • Upgraded WireMock from 2.27.1 to 2.27.2
  • Upgraded gRPC from 1.31.1 to 1.36.0
  • Upgraded protoc from 3.12.0 to 3.15.5
  • This release is compatible with the MQ com.ibm.mq.allclient JAR up to version 9.2.1.0

5.23.0 — 01 Feb 2021

Features

  • Initial release of Traffic Parrot workstation client (beta):
    • The workstation (beta) is part of a new client-server product offering for customers
    • Traffic Parrot workstation clients create virtual services and save configuration files
    • Traffic Parrot servers run virtual services using the configuration files created by the clients
    • Configuration files can be stored and retrieved from version control systems or artifact repositories
  • Initial support for using multiple HTTP/HTTPS ports linked to separate mappings (beta):
    • New virtual services (beta) page to view/add/edit/delete virtual services
    • A distinct HTTP/HTTPS port may be assigned per virtual service
    • Only one virtual service can be edited at a time by selecting from the dropdown
    • The home page now lists all virtual service names and ports
    • Configuration is currently stored in scenarios/VirtualServiceName/service.properties directory structure
    • Increasing the number of virtual services will have a direct impact on memory usage of the server
    • Consider increasing your jvm.args configuration heap size -Xmx128m if you plan to use multiple virtual services per Traffic Parrot instance
  • New arithmetic operations in dynamic responses

Fixes

  • Fixed an issue where the navigation bar overlapped the main content on some smaller screen sizes
  • Fixed an issue where transformer names would be duplicated in mapping files on save

5.22.3 — 11 Nov 2020

Fixes

  • Minor fixes to UI text
  • Ensure mapping name when edited via the UI ends in .json

5.22.0 — 19 Oct 2020

Features

  • Made mapping name editable in the UI for all mapping types

Fixes

  • Ensure internal server errors log the full stack trace

Changes

  • Native IBM® MQ connections will now warn once in the logs the first time that a connection is shared between multiple threads, which can degrade performance. The mapping fields receiveThreads and sendThreads control the number of threads per queue. The ibm-mq-connections.json configuration controls the total readConnectionsToOpen and writeConnectionsToOpen per queue manager.

5.21.6 — 12 Oct 2020

Features

  • New property trafficparrot.virtualservice.http.monitorPerformance can be used to enable HTTP response timings in the logs:
    2020-10-07 20:09:32,330 INFO  Request to 'GET /test123' was received on '2020-10-07T19:09:32.326Z' from '127.0.0.1'. Response was sent on '2020-10-07T19:09:32.397Z' to '127.0.0.1'. Total processing time 71ms
  • Added new PassthroughMessage MQ proxy example to the SDK workspace

Fixes

  • Fixed support for OpenAPI array examples specified as a comma separated string
  • Ensure startup error causes are recorded in the logs

Changes

  • Upgraded bundled JRE from 8u262 to 8u265
  • Display system tray in a background thread to improve startup times on some systems
  • Valid JSON bodies in mapping files will be persisted as inline JSON rather than an escaped string

5.20.2 — 25 Sep 2020

Features

  • Mappings list user interface improvements for all protocols:
    • Added support for customizing which columns are displayed in the mappings list in the UI. The selected settings are stored in the browser to allow different Traffic Parrot users to set different preferences.
    • Display mapping file name when editing a mapping
  • Mappings list user interface improvements for HTTP protocol:
    • Edit mapping tags that can be used to organize and search mappings
    • Added new tags column which is hidden by default
  • Added mapping file name to the logs when reporting request match status for MQ/JMS/Files mappings

Fixes

  • Switching scenario with mappings caches enabled now resets the caches
  • Traffic Parrot now shuts down gracefully on Windows when the stop script is run
  • Fixed an issue where the HTTP virtual service would not respond if a mapping file was deleted while the request was being served

5.19.4 — 14 Sep 2020

Features

  • Added support for configuring gRPC delays via fixedDelayMilliseconds or distributionDelay in the mapping files
  • Exposed new properties for tuning gRPC performance:
    • trafficparrot.virtualservice.grpc.server.receiveThreads=DOUBLE_NUMBER_OF_PROCESSORS
    • trafficparrot.virtualservice.grpc.server.sendThreads=DOUBLE_NUMBER_OF_PROCESSORS
    • trafficparrot.virtualservice.grpc.server.replay.maxMessagesWaitingToBeSent=1000

Fixes

  • Traffic Parrot now shuts down gracefully when the launcher process is killed (e.g. during a docker stop)

Changes

  • Only consider TCP ports when printing diagnostic information when there is a port clash on startup

5.18.0 — 05 Sep 2020

Features

Fixes

  • Fixes to the gRPC mappings list editing and search mechanism
  • Fixed a bug where the edit modal would incorrectly close automatically if closed and reopened too quickly
  • Fixed a bug where the edit modal would show the previous flash message if closed and reopened too quickly
  • Fixes for JMS java.io.Serializable object support
  • Fixes for port in use diagnostic message when multiple PIDs are involved

Changes

  • The property trafficparrotserver.log4j.properties.filename has been replaced by trafficparrotserver.logging.properties.filename.
  • Logging properties file names indicate which type of logging configuration to use:
    • Names like *.log4j.* are assumed to be Log4j version 1 configuration
    • Names like *.log4j2.* are assumed to be Log4j version 2 configuration
  • The MQ message putDateTime log line now has a millisecond (instead of second) resolution to help investigate performance issues when working with Native IBM MQ

5.17.0 — 25 Aug 2020

Features

  • Internal release that was used for training purposes

5.16.0 — 10 Aug 2020

Features

  • Select handlebars helper CSV file caching. When you set
    trafficparrot.virtualservice.handlebars.select.indexAndCacheCsvFiles=true
    the CSV file loading performance will be significantly improved.
  • Supporting large number of CPU cores. When you run Traffic Parrot on many cores (40 or more) it would fail to start and report an error
    javax.servlet.ServletException: java.lang.IllegalStateException: Insufficient configured threads: required=212 < max=200 for QueuedThreadPool[qtp318353283]@12f9af83{STARTED,8<=168<=200,i=0,r=20,q=0}[ReservedThreadExecutor@71b3bc45{s=0/20,p=0}]
    The fix is to increase the number of threads Jetty can spin up. This was done by exposing two properties to configure HTTP Jetty server thread queues:
    trafficparrot.gui.http.queuedThreadPool.maxThreads=200
    trafficparrot.gui.http.queuedThreadPool.minThreads=8

Changes

  • Performance improvements to dynamic responses
  • Upgraded bundled JRE from 8u222 to 8u262
  • Upgraded WireMock from 2.25.1 to 2.27.1

5.15.0 — 16 Jul 2020

Features

  • Traffic Parrot can now connect to IBM MQ queue managers via SSL channels. You can do this via Native IBM MQ. We have added two new ibm-mq-connections.json properties to support Native IBM MQ SSL connections:
    "sslCipherSuite": "TLS_RSA_WITH_AES_128_CBC_SHA",
    "sslPeerName": "OU=TP IBM MQ"
    To provide the server and client certificates you can add the following config to jvm.args:
    -Djavax.net.ssl.trustStore=certificates/ca-chain.jks
    -Djavax.net.ssl.trustStorePassword=trafficparrot
    -Djavax.net.ssl.keyStore=certificates/mq-client.jks
    -Djavax.net.ssl.keyStorePassword=trafficparrot
    -Dcom.ibm.mq.cfg.useIBMCipherMappings=false

    For more details see Connect to the queue manager via SSL/TLS channels

5.14.1 — 10 Jul 2020

Features

  • A new property that allows to force logging Native IBM MQ message bodys as printable characters instead of UTF8
    trafficparrot.ibmmq.logger.logMessageBodyAsPrintableCharacters=false

Fixes

  • The Native IBM MQ messages can now contain UTF-8 characters, for example Arabic text
  • The Native IBM MQ logs are now correctly displaying UTF-8 characters, for example Arabic text
  • The JMS IBM MQ tutorial example fruit ordering system now supports UTF8 characters, for example Arabic text

5.13.0 — 07 Jul 2020

Features

  • New environment variable that allows configuring how long the startup scripts will wait for TP to start up use TP_STARTUP_WAIT_MILLIS, for example:
    test@test-pcs:~/Downloads/trafficparrot-no-jre-5.x.y$ export TP_STARTUP_WAIT_MILLIS=180000
    test@test-pcs:~/Downloads/trafficparrot-no-jre-5.x.y$ ./start.sh
    /optf/programs/jdk1.8.0_181/bin/java
    Picked up environment startup timeout in milliseconds 180000
  • A new property that allows to specify a replay Native IBM MQ script that will be run on startup
    trafficparrot.ibmmq.start.queue.replay.on.startup.script=classpath:start-ibmmq-queue-replay-on-startup.txt

Changes

  • The SDK Workspace allows now for Native IBM MQ message transformers to specify an MQMessage directly. This allows for creating transforming proxies of messages. A sample has been provided in the SDK workspace.

Fixes

  • Users were unable to update Native IBM MQ mappings in renamed files.

5.12.0 — 26 May 2020

Features

  • New property that allows configuring how IBM® MQ queues will be accessed
    trafficparrot.ibmmq.connect.options.accessQueue.output=MQOO_OUTPUT|MQOO_FAIL_IF_QUIESCING
  • New property that allows to skip logging message body for native IBM® MQ
    trafficparrot.ibmmq.logger.logMessageBody=true
  • Native IBM® MQ now respects the existing properties that allow for caching mappings in memory
    trafficparrot.virtualservice.mapping.cache.milliseconds=0
    trafficparrot.virtualservice.mapping.cache.populate.on.startup=false
  • You can now configure per connection to an IBM® MQ broker how many read and how many write connections to open. You do it in the ibm-mq-connections.json. For example:
    "readConnectionsToOpen": 5,
    "writeConnectionsToOpen": 5
  • The Native IBM® MQ mapping allows for configuring how many threads should be used to access the queue, for example:
    "receiveThreads" : 5,
    "sendThreads" : 1
  • You can define in the mapping how many messages the Native IBM® MQ connector will be keeping in memory at once, which will be relevant for scenarios when sending delayd messages, for example:
    "maxMessagesInProgress": 1000000
  • You can start the Native IBM® MQ replay with a script, for example:
    #
    # This is a sample comment 1
    #
    RequestQueueManager:'Request QM1'
    ResponseQueueManager:'Response QM1'
    RequestQueueNames:'REQ_1_A','REQ_1_B'
    
    #
    # This is a sample comment 2
    #
    RequestQueueManager:'Request QM2'
    ResponseQueueManager:'Response QM2'
    RequestQueueNames:'REQ_2_A','REQ_2_B'
  • Handlebar templates are cached allowing for better performance

Changes

  • There has been performance improvements made to the Native IBM® MQ connector. See the performance benchmarks for more details.
  • Native IBM® MQ response messages during a replay have the replyToQueueEmpty and replyToQueueManager set to the connected queue manager if they did not have any of these attributes set on the request message
  • Native IBM® MQ sends the queue manager name along with queue name when sending a message. This is applicable in scenarios with multiple queue managers set up in a cluster without the cluster sender and cluster receiver channels
  • Logging more runtime information on startup
  • Additional logging when connections to IBM® MQ fail

5.11.1 — 06 Apr 2020

Changes

  • Updated VS HTTPS certificates with new 3 year validity period

5.10.0 — 17 Jan 2020

Features

  • Added support for IBM®MQ message delays in replay mode
  • Added support for specifying multiple IBM®MQ queues, using queue manager names from ibm-mq-connections.json to record using syntax in script tab in the UI:
    #
    # This is a sample comment
    #
    QueueManager:'Local Docker MQ 9'
    ProxyRequestQueue:'PROXY_PROCESS_PAYMENT'
    LiveRequestQueue:'PROCESS_PAYMENT'
    LiveResponseQueue:'PAYMENT_PROCESSESED'
    ProxyResponseQueue:'PROXY_PAYMENT_PROCESSESED'
    
    
    #
    # This is a sample comment
    #
    QueueManager:'Local Docker MQ 9'
    ProxyRequestQueue:'PROXY_CREATE_ORDER'
    LiveRequestQueue:'CREATE_ORDER'
    LiveResponseQueue:'ORDER_CREATED'
    ProxyResponseQueue:'PROXY_ORDER_CREATED'

Fixes

  • Ensure IBM®MQ channel connections are always released after use

5.9.0 — 16 Dec 2019

Features

  • Improvements to gRPC mappings list user interface:
    • Edit mapping tags that can be used to organize and search mappings
    • Added new tags column which is hidden by default

Fixes

  • WireMock compatible HTTP APIs are now hosted on both:
    • http://localhost:8080/api/http/__admin/*
    • http://localhost:8080/api/http/*

    This means that the standard WireMock client libraries can be used when connecting to the API port e.g. when using WireMock.configureFor("localhost", 8080, "/api/http");

    Custom HTTP clients or a browser may continue to drop the /__admin section of the path so that API calls such as http://localhost:8080/api/http/mappings can be made

5.8.0 — 02 Dec 2019

Features

  • Improvements to gRPC mappings list user interface:
    • Added sorting to columns
    • Added a button to pause auto reload
    • Added a button to select which columns to display
    • Added two new columns which are hidden by default: id and name

Fixes

  • Pause gRPC mappings list auto reload when highlighting text so that it is possible to highlight and copy text without the auto reload clearing the highlight
  • Allow spaces in gRPC mapping file name template

5.7.3 — 25 Nov 2019

Features

  • gRPC mapping file name templates when saving mappings via the UI can now be customized with the following properties:
    #
    # Template used for gRPC mapping file names
    #
    # Available properties:
    # {{ mapping.id }}
    # {{ mapping.package }}
    # {{ mapping.service }}
    # {{ mapping.method }}
    # {{ mapping.isSuccess }}
    # {{ mapping.status.name }}
    # {{ mapping.status.code }}
    #
    # Available commands:
    # {{ countGrpcMappings package=mapping.package service=mapping.service method=mapping.method success=true offset=1 format='%02d' }}
    trafficparrot.virtualservice.grpc.saved.mapping.file.name.template={{ mapping.package }}.{{ countGrpcMappings package=mapping.package offset=1 format='%02d' }}.{{ mapping.service }}-{{ mapping.method }}[{{ mapping.status.name }}]
    trafficparrot.virtualservice.grpc.saved.mapping.file.name.collision.suffix.template=-{{ mapping.id }}
                                            
  • When editing a gRPC mapping in the UI you can now choose whether to keep the existing file name or generate a new one according to the template properties when the mapping is saved

5.6.0 — 11 Nov 2019

Features

  • gRPC unmatched requests now display the closest match in both the logs and error response description. For example:
    UNKNOWN: Traffic Parrot Virtual Service: No responses matched the given request. See the Traffic Parrot logs for more details.
                                                   Request was not matched
                                                   =======================
    
    -----------------------------------------------------------------------------------------------------------------------
    | Closest stub                                             | Request                                                  |
    -----------------------------------------------------------------------------------------------------------------------
                                                               |
    helloworldgreetersayhello-38d8ac56-38fe-4a57-89b3-5af8368  |
    874a5.json                                                 |
                                                               |
    ANY                                                        | ANY
    helloworld.Greeter/SayHello                                | helloworld.Greeter/SayHello
                                                               |
    Protocol: GRPC                                             | Protocol: GRPC
                                                               |
    {                                                          | {                                                   <<<<< Body does not match [equalToJson]
      "inputName" : "example"                                  |   "inputName" : "not matching"
    }                                                          | }
                                                               |
    -----------------------------------------------------------------------------------------------------------------------
  • Upgraded WireMock to 2.25.0
  • Upgraded Proto compiler to 3.10.1

Fixes

  • Fixed support for reserved fields in gRPC proto files
  • Errors when compiling proto files are now reported in the logs
  • Swagger/OpenAPI example dates are now considered when performing an import

Changes

  • New toggle trafficparrot.virtualservice.grpc.check.mapping.schema.allow.missing.fields that can be set to true to allow gRPC mapping files to have fields missing when compared to the proto schema. This is to allow for usages where there are fields that are intentionally omitted to pick up on the default.

5.5.3 — 25 Oct 2019

Fixes

  • Fixed support for gRPC error mappings in the new static analysis check
  • Fixed support for gRPC dynamic response mappings in the new static analysis check
  • Fixed support for gRPC mappings with repeated fields in the new static analysis check
  • More consistent error reporting format for errors in dynamic responses, to make it clear which helper had a problem
  • Always print log file in the Maven/Gradle plugin console if Traffic Parrot fails to start

Features

  • New state management examples added to the examples project

5.5.1 — 14 Oct 2019

Features

  • Traffic Parrot can now check that gRPC mapping files match proto schema on startup. You can enable this check to prevent startup if mapping files are out of date when compared to the proto schema.
    • The following property enables the feature: trafficparrot.virtualservice.grpc.check.mapping.schema.on.startup=true
    • Currently supports checking gRPC mapping equalToJson request matchers
    • Currently supports checking gRPC mapping response
    • This feature is currently in public beta and is subject to change
    • Please let us know your feedback feedback@trafficparrot.com and help us improve this feature

Changes

  • Traffic Parrot now only requires a single port for the UI:
    • trafficparrot.gui.http.port=8080
    The following ports are no longer used by the UI:
    • trafficparrot.virtualservice.http.management.port=8083
    • trafficparrot.virtualservice.jms.management.port=9093
    • trafficparrot.virtualservice.http.port=8081
    Please note that these ports are still required by the Traffic Parrot backend.

5.4.5 — 07 Oct 2019

Fixes

  • gRPC mapping files will now be written with the correct status code of 0 to represent a successful response status. gRPC mapping files with status code 200 will continue to be interpreted as status code 0 to preserve backwards compatibility.

5.4.4 — 09 Sep 2019

Changes

  • The HTTPS client used for making outbound HTTPS connections now trusts all server certificates by default. This means that it is no longer necessary to specify a javax.net.ssl.trustStore when connecting to HTTPS servers that are not already trusted by the system during recording or proxying.

Fixes

  • Using the javax.net.ssl.keyStore system property will now completely override the HTTPS client key store used for making outbound HTTPS connections for mutual authentication scenarios during recording or proxying.

5.4.0 — 16 Aug 2019

Features

  • Added JMS REST API to count the number of requests made that match the given criteria using POST /api/jms/requests/count and reset the count using DELETE /api/jms/requests
  • See the OpenAPI documentation or import the Postman workspace for more information.

Fixes

  • Fixed usage of {{ anyNumber }} to match numbers within JSON string fields

5.3.2 — 07 Aug 2019

Fixes

  • Fixed a memory leak in the user interface

5.3.1 — 05 Aug 2019

Features

  • New operating system specific release with bundled JRE:
    • Any operating system with no bundled JRE: trafficparrot-no-jre-5.3.1.zip
    • 64-bit Linux with bundled JRE: trafficparrot-linux-x64-jre-5.3.1.zip
    • 64-bit Mac with bundled JRE: trafficparrot-mac-x64-jre-5.3.1.zip
    • 64-bit Windows with bundled JRE: trafficparrot-windows-x64-jre-5.3.1.zip
    • 32-bit Windows with bundled JRE: trafficparrot-windows-x86-32-jre-5.3.1.zip
  • New state management REST API for global state:
    • Create or update state using PUT /api/state/global/{name}
    • Get state using GET /api/state/global/{name}
    • Reset all state using DELETE /api/state
    • See the OpenAPI documentation or import the Postman workspace for more information on the API usage
    • {{ manageState 'example' 'set' 1234 }} to set a variable in a response template
    • {{ manageState 'example' 'get' }} to get a variable in a response template

5.2.0 — 19 Jul 2019

Features

  • WireMock 2.10.1 compatible REST API is now mounted on /api/http/* on the Traffic Parrot UI/API port (default 8080) for example POST /api/http/requests/count can be used to count requests
  • Added gRPC REST API to count the number of requests made that match the given criteria using POST /api/grpc/requests/count and reset the count using DELETE /api/grpc/requests
  • See the OpenAPI documentation or import the Postman workspace for more information.

Fixes

  • Fix scenarios dropdown UI on Windows browsers

Changes

  • Rename "request body" to "request message payload" in the gRPC UI

5.1.1 — 15 Jul 2019

Fixes

  • Fixed support gRPC status details. We now support using both the status key and proto key header conventions.
  • Fixed support for well known gRPC error details types

Changes

  • Additional logging when a gRPC request fails to match any mappings
  • Specify text representation of month in license logs to make it more clear when the start date is

5.1.0 — 08 Jul 2019

Features

  • gRPC improvements
    • Import gRPC proto files using the import button on the gRPC Add/Edit page
    • Convert OpenAPI files to gRPC proto files with openapi2proto using the import button on the gRPC Add/Edit page
    • Use the trafficparrot.virtualservice.grpc.openapi2proto.plugin.location property to configure the openapi2proto binary location, which can be either AUTO_DETECT (which searches the system environment path, go/bin directory and Traffic Parrot plugins directory) or a specific location
  • Configure HTTP proxy mappings on the HTTP Add/Edit page to allow routing some calls to the virtual service and some calls to real services
  • Added support for database queries in responses
    • New {{ databaseQuery }} helper
    • Configure JDBC connections in the database-connections.json file
    • Provide the JDBC driver JAR files for your database in the lib/external folder
  • Added support for default value when using {{ select }} to look up values in CSV files
  • Added support for the IBM®MQ Message ID as Correlation ID pattern

Fixes

  • When a property is missing from trafficparrot.properties we now report which key is missing in the logs
  • PDF files can now be correctly recorded and replayed as HTTP multipart/related attachments

Changes

  • Removed equal to matcher from gRPC edit mapping form (equal to JSON always makes more sense to use than equal to)
  • New toggle trafficparrot.virtualservice.grpc.message.field.naming to choose whether to define gRPC mappings using CAMEL_CASE field names or using the ORIGINAL field name case used in the proto files
  • Binary (non plain text) HTTP responses are now recorded in .bin files

5.0.3 — 17 Jun 2019

Fixes

  • Added support for google.protobuf.Any fields when working with gRPC skeletons. For more details on how this field is serialized see here.

5.0.2 — 14 Jun 2019

Fixes

  • Correct links to latest documentation pages

5.0.1 — 12 Jun 2019

Changes

  • Added a new property trafficparrot.openapi.import.mode that acts as a toggle for the different ways Traffic Parrot supports for importing OpenAPI files. The default MATCHING_RESPONSE_CODE will use the response status in request matchers convention and SKELETON will template the mapping with the request and response structure.

5.0.0 — 10 Jun 2019

Features

  • New HTTP skeletons feature:
    • OpenAPI specifications are used to generate a list of HTTP skeletons that can be used to help design HTTP mappings in the Traffic Parrot user interface
    • Place OpenAPI specifications in the openapi configuration directory to populate the dropdown menu or use the upload button on the HTTP Add/Edit page next to the dropdown
    • This replaces the old scenarios.js dropdown, which has been removed (see changes section below for migration instructions)
  • Maven plugin improvements:
    • New trafficparrot:check-environment goal to run in the pre-clean phase to check nothing is preventing a successful start of Traffic Parrot
    • Check that there is not an existing Traffic Parrot instance running
    • Check for locked files or directories that are unable to be cleaned on Windows (typically this is because a file is open in a text editor or command prompt)
    • Improved speed when cacheDownload is enabled by also caching the extracted zip file
    • Accept either file:/// or file:// syntax when specifying file URLs
    • Remember to upgrade your plugin version to 5.0.0

Fixes

  • The randomInteger and randomDouble helpers now return a number type instead of a string, so that they can be combined with other helpers that require a number. For example when combined with the stringFormat helper: {{stringFormat '%02d:%02d' (randomInteger 0 59) (randomInteger 0 59)}}

Changes

  • The scenarios.js HTTP dropdown has been removed.
    • We recommend migrating to an OpenAPI specification file which can be used to produce a similar dropdown via the new HTTP skeletons functionality
    • Please email support@trafficparrot.com with your scenarios.js file and we will translate it to an OpenAPI file for you
    • Removed unused property trafficparrot.gui.scenarios.resource.name
  • Improved reporting of port clashes and how to change ports in trafficparrot.properties

4.7.2 — 13 May 2019

Features

  • gRPC improvements
    • Support specifying a status details object in exception responses
    • Support for matching by simple key: value request headers. The property trafficparrot.virtualservice.grpc.exclude.request.headers.from.matching=content-type,user-agent,grpc-accept-encoding can be used to choose which headers are considered for matching during replay.
    • New properties for performance tuning:
      • trafficparrot.virtualservice.grpc.server.replay.proto.cache.populate.on.startup will populate the proto cache when starting up
      • trafficparrot.virtualservice.grpc.server.warmup.on.startup will warm up the JVM to improve gRPC performance when starting up
      • trafficparrot.virtualservice.mapping.cache.milliseconds will cache mapping files for both gRPC and HTTP for the specified duration
      • trafficparrot.virtualservice.mapping.cache.populate.on.startup will populate the mapping file cache for both gRPC and HTTP when starting up
      • New constant NUMBER_OF_PROCESSORS can be used in the existing trafficparrot.virtualservice.grpc.server.boss.threads and trafficparrot.virtualservice.grpc.server.worker.threads properties
    • Use proto cache settings when loading gRPC skeletons
  • Amazon SQS virtualization improvements:
    • Added support for the PurgeQueue command
    • Added a user interface to view outstanding messages and receipt handles

Fixes

  • gRPC performance improved by approximately 80%
  • Trim extra empty lines from jvm.args file to avoid a start issue
  • Amazon SQS ReceiveMessage now correctly only peeks a message rather than deleting it; deleting is done via the receipt handle to DeleteMessage

Changes

  • Amazon SQS virtualization changes:
    • Support is now enabled via the trafficparrot.virtualservice.amazon.sqs.enabled=true property instead of the trafficparrot.http.responsetransformers property
    • The virtual service is now hosted under the URL path /aws/sqs instead of directly under the root path
  • Removed unused property trafficparrot.virtualservice.inMemoryFileSystemBackedStubMappings

4.6.1 — 07 May 2019

Fixes

  • Search %PATH% and %JAVA_HOME% on Windows as possible locations to find a Java installation. This is in addition to checking the standard registry entries that are populated when using the official Java installer. The standard registry entries take precedence over other locations.

4.6.0 — 19 Apr 2019

Features

  • Added support for mapping priority to distinguish between many matching mappings. The default priority is 5 and 1 is the highest.

4.5.4 — 16 Apr 2019

Features

  • New tray icon is displayed when running in a non-headless environment (e.g. on your laptop)
  • New jvm.args file allows setting JVM arguments for the main Traffic Parrot process (e.g. to tune memory options)
  • New configuration property trafficparrot.virtualservice.http.no.mapping.found.code to allow changing the no mappping found HTTP response code
  • New start.exe and stop.exe launchers for Windows users
  • Support JMS connections to an external Azure AMQP Service Bus broker in jms-connections.json
  • Support Amazon SQS queue simulation and verification over the SQS HTTP REST APIs via the com.trafficparrot.virtualservice.extensions.responsetransformer.AmazonSQSTransformer which can be enabled via the trafficparrot.http.responsetransformers property
  • Additional diagnostic information is printed when starting up and shutting down
  • Maven and Gradle plugin improvements:
    • Allow specifying a trafficparrot.properties file location in the propertiesFile plugin property; this file is combined with the default properties file and any plugin overrides
    • Store a copy of the traffic files root in the build directory so that mappings imported dynamically e.g. from OpenAPI specifications do not pollute the source traffic files root
    • Print the startup and shutdown logs inline to make the build output easier to navigate
    • Remember to upgrade your plugin version to 4.5.4

Fixes

  • The default gRPC ports have changed to trafficparrot.virtualservice.grpc.tls.port=5551 and trafficparrot.virtualservice.grpc.non.tls.port=5552 so that they no longer overlap with the typical Windows ephemeral port range

Changes

  • When starting and stopping, the console output is appended to the tp.out file
  • When running in the background, only file appenders in trafficparrotserver.log4j.properties are used; any console appenders are switched off
  • When running in the foreground, both file and console appenders are used

4.4.2 — 24 Mar 2019

Fixes

  • New trafficparrot.properties properties to help with gRPC server performance tuning:
    • Configure how long to cache the proto files during replay using the trafficparrot.virtualservice.grpc.server.replay.proto.cache.milliseconds property.

      A value of 0 means do not cache at all.

    • Configure the number of boss and worker threads of the gRPC server using the trafficparrot.virtualservice.grpc.server.boss.threads and trafficparrot.virtualservice.grpc.server.worker.threads properties.

      The special value DOUBLE_NUMBER_OF_PROCESSORS means use double the number of processors.

4.4.1 — 08 Mar 2019

Fixes

  • Added gRPC message skeleton support for:
    • Self referential types e.g. google.protobuf.Struct
    • Messages that use the oneof feature

4.4.0 — 25 Jan 2019

Features

Fixes

  • Adding a new JMS mapping now correctly saves the properties

Changes

  • Always use DeliveryMode.PERSISTENT when sending JMS messages
  • The Maven/Gradle plugin properties printLogs and deleteAfterStop are now also respected if Traffic Parrot fails to start up
  • The jms-mappings, ibm-mq-mappings and file-mappings directories will be created on start up if they do not exist

4.3.3 — 15 Jan 2019

Features

  • Support for importing a ZIP file of HTTP mappings
  • More verbose logging when there are port binding issues
  • More verbose logging of start up configuration
  • Pretty print JSON responses when importing Swagger/OpenAPI

Fixes

  • Take into account basePath when importing Swagger/OpenAPI

Changes

  • Consider only the name of the mapping file when setting the HTTP mapping name, not the entire path

4.2.10 — 23 Sep 2018

Features

  • Added support for gRPC StatusRuntimeException
  • New page to download HTTP mappings
  • New Gradle plugin for teams that prefer to use Gradle over Maven
  • New examples added including Gradle examples
  • New Postman workspace file that you can import to demonstrate some of the common Traffic Parrot management APIs
  • Import mappings using Swagger/OpenAPI definitions using the Maven or Gradle plugin
  • Better diagnostic logging if Traffic Parrot fails to start up due to e.g. an existing port already in use
  • New {{randomInteger min max}} helper to generate random numbers in a range

Fixes

  • Fix various unclosed file handles
  • Stopping Traffic Parrot now properly waits for gRPC proxy server shutdown
  • Cache busting strategy implemented to cope with browsers that like to e.g. cache JavaScript files forever
  • The data directory is now considered to be under the trafficparrot.virtualservice.trafficFilesRootUrl

4.1.6 — 07 Sep 2018

Features

  • New matchesJson matcher
  • Import mappings using Swagger/OpenAPI definitions
  • Record multiple HTTP URLs at the same time
  • Enable redirect handling during HTTP recording using property trafficparrot.virtualservice.enableRedirectHandling=true
  • Initial support for Java 9 and 10 in the start scripts

Changes

  • HTTP mappings are now sorted by last modified date in the UI

Fixes

  • Improve file extension detection for recorded HTTP body files
  • Windows start script now correctly passes on system properties

4.0.7 — 09 Jul 2018

Features

  • Support for mocking and virtualizing gRPC APIs and services
  • Visual XML editor
  • Extended support for SOAP - matching on request body SOAP values
  • New matchesXml matcher
  • HTTP(S) stateful scenarios available via the Web UI
  • Signing SOAP messages
  • Duplicate mapping button for HTTP

Changes

  • Traffic Parrot 4.x now requires Java 8 (Java 7 is supported by 3.13.x)
  • gRPC support requires a 64bit JVM
  • Virtual service runs in the same process at the Web UI
  • These properties have been removed:
    • trafficparrot.gui.virtualservice.classpath
    • trafficparrot.virtualservice.jvm.Xmx
    • trafficparrot.virtualservice.virtualServerLog4jPropertiesFilename

Fixes

  • Configuration files now have Windows style line endings

3.13.0 — 23 Apr 2018

Features

  • Support native IBM®MQ ReplyToQMgr during recording
  • Importing RAML v0.8 into HTTP mappings
  • The Maven plugin has a new cacheDownload property which can be used to choose whether to cache the download in the java.io.tmpdir or not
  • New HTTP Management API that can be used to remotely start/stop the record/replay of IBM®MQ, JMS and File Message protocols

3.12.6 — 12 Feb 2018

Features

  • Recording and replaying native IBM®MQ RFH headers with message format MQFMT_RF_HEADER_1 or MQFMT_RF_HEADER_2
  • Support MQFMT_NONE MQ message format
  • Recording and replaying native IBM®MQ responses using dynamic MQ model queues
  • Support native IBM®MQ ReplyToQ during record and replay
  • Support configuring the IBM®MQ MQCSP authentication mode

Fixes

  • When you connect to a wrong IBM MQ channel or with wrong IBM MQ username/password you do not see it in the logs
  • Spaces in the path to the Traffic Parrot installation directory are now supported

3.11.3 — 26 Jan 2018

Features

  • Recording and editing JMS Properties
  • During File mocking, request files are now deleted after processing
  • More user friendly (easier to read and follow) logs for JMS and File stubbing

Fixes

  • Windows start script start.cmd now works even if system32 directory is not on the %PATH%
  • The dynamic HTTPS Proxy does not spin up so many threads any more and does not consume so much RAM
  • Better error messages in failure scenarios when using several Handlebars
  • More rigid stopping

Changes

  • Default selection on replay page is now based on the type of mappings that are present (e.g. Queue will be ticked if there are any Queue mappings)

3.10.0 — 10 Dec 2017

Features

  • Support for virtualizing services that read and write files (currently in beta)
  • Support JMS byte messages (any bytes message, with special support for java.io.Serializable objects)
  • Upgraded WireMock to 2.10.1
  • New handlebar helpers xPath, xPathList, jsonPath, jsonPathList, regex, equal, ifEven, size
  • JMS is not in beta any more
  • IBM®MQ native MQ support is not in alpha any more
  • New Maven plugin for replaying HTTP/JMS/MQ traffic during integration tests

Fixes

  • Fixed missing pages in community edition
  • Fixed links on help page

Changes

  • Do not escape characters < > " ' ` & if they are produced by handlebars helpers
  • Handlebars each helper now only iterates over iterable arguments
  • Recorded cookies format has changed
  • com.trafficparrot.sdk.jms.Equal moved to com.trafficparrot.sdk.handlebars.Equal
  • com.trafficparrot.sdk.jms.MissingHelper moved to com.trafficparrot.sdk.handlebars.MissingHelper

3.9.1 — 11 Nov 2017

Features

Earlier versions

Available on request.

Old version warning!

This documentation is for an old version of Traffic Parrot. There is a more recent Traffic Parrot version available for download at trafficparrot.com

Browse documentation for recent version