Version x.x.x (20xx-xx-xx) -------------------------- * Some change Version 0.6.9 (2021-06-19) -------------------------- * Upgrade several dependencies for security reasons. No actual changes to the code. * Internal clean-ups, including rewriting of tests and avoiding the use of deprecated Buffer APIs. Version 0.6.8 (2018-09-08) -------------------------- * Fix proxying in Node >= 9. Version 0.6.7 (2018-08-06) -------------------------- * Fix embarrassing bug in the proxy-cache plugin (thanks Anuga!). * Make the WebSocket proxy example a bit more robust. * Upgrade dependencies for security reasons. Version 0.6.6 (2017-09-20) -------------------------- * Upgrade several dependencies for security reasons. No actual changes to the code. Version 0.6.5 (2016-10-24) -------------------------- * Add new "body" property to request objects, and deprecate "bodyParams". The new "body" property will contain a parsed version of the body, if possible. So: for "application/x-www-form-urlencoded" requests, "body" will have the same contents as "bodyParams"; for "application/json" requests, "body" will have an object with the parsed JSON body, etc. * Add a new option to RoboHydraHeadFilesystem, "passThrough", to allow requests to pass-through to the next head if no matching static files are found. * Add a new priority for dynamic heads, "admin", which allows placing heads before the admin plugin. This is useful for replacing parts of the admin UI, or to protect it with a password or against certain IPs ranges. * Add robohydra/ to the plugin search path, so that plugins can be written as robohydra/PLUGINNAME/index.js. This saves one level in the directory structure which proved to be too deep for no gain. * Drop websocket.io dependency as it was outdated (spits out warning in Node 6.1.0) and ws could handle its usecase, too. Version 0.6.4 (2016-02-23) -------------------------- * Disable snyk to avoid installation problems (only on Windows?). Version 0.6.3 (2016-02-20) -------------------------- * Avoid bad plugin config when using pluginConfigDefaults. * Make the logger plugin compatible with streaming. Version 0.6.2 (2015-11-12) -------------------------- * Add a new "pluginConfigDefaults" key to configuration files, to provide configuration defaults for all plugins. * Pass query parameters correctly when proxying requests by using the "proxyRequest" function directly (as opposed to using a "RoboHydraHeadProxy" head. * Don't die if the incoming request body is unparseable. * Tighten the versioned dependency on qs to avoid breaking compatibility with older versions of Node. Version 0.6.1 (2015-07-09) -------------------------- * Allow inspection and deletion of hydras spawned by the summoner. Finally consider it fit for production, not an experiment. * Replayer plugin: big improvements, mostly in the UI. * New RoboHydraHeadReplayer head: it allows you to easily replay traffic files recorded with the replayer plugin. * Other small improvements, like fixes in the CORS plugin and a new option "delaydisabled" for the delayer plugin. Version 0.6.0 (2015-04-14) -------------------------- * WebSocket support! There are two WebSocket heads available: RoboHydraWebSocketHead, a basic head similar to RoboHydraHead, and RoboHydraWebSocketHeadProxy, similar to RoboHydraHeadProxy but allowing filtering and blocking of data sent in either direction. See the documentation for details. * Accept a list of extra plugin load directories (as opposed to only one). * CORS plugin: always set the Access-Control-Allow-Credentials header to true to allow credentials to be passed. * Finally decided in favour of the name "testResults" instead of "scenarioResults" (and mark the latter as deprecated). Drop many names that have been deprecated for a long time. Version 0.5.2 (2015-01-16) --------------------------- * Fix some compatibility problem with Windows and Mac OS X (in the last release there were two files call the same except for case). Version 0.5.1 (2014-12-21) -------------------------- * Make the 'reset' available for RoboHydraHead. * Potential compatibility problem: now scenarios are checked so that they always contain the "heads" property, and don't contain any unknown properties. If you are hit by this your scenarios were broken anyway, and better to be stricter now than later. * Deprecated function name roboHydraHeadType for the more consistent robohydraHeadType. * Deprecated configuration name corsUrlPath for the more consistent corsurlpath in the cors plugin. * Deprecated method "chain" in Response objects. See the new method "follow" below. * New property "headers" for RoboHydraHeadStatic allows the user to set arbitrary headers for the head response(s). Add support to add headers from the Admin UI. * RoboHydra is now easier to embed in your own programs. See the "createRoboHydraServer" function. * New command-line option --quiet to suppress non-error messages to the console. * New method "follow" in Response objects. Similar to "chain", but called on the receiving object. * Other bugfixes and smaller improvements. Version 0.5 (2014-08-28) ------------------------ * Potential compatibility problem: dynamic heads registered as "high priority" now come *after* the admin plugin. That mostly means that (a) you can't replace the Admin UI with your own plugin (you'll have to use a different URL) and that (b) you won't get all the admin plugin requests in robohydra.log. * Deprecated mixed-case configuration variables names for plugins (ie. variables like trafficFilePath become now trafficfilepath). * Deprecated inconsistent roboHydraHeadType names: some parameters to roboHydraHeadType were inconsistent and have been replaced with more consistent names. In particular, "defaultProps" becomes "defaultPropertyObject" and "parentPropBuilder" becomes "parentPropertyBuilder". * New head matching possibilities: now all heads accept properties "method" and "hostname" and will only match requests that have the same method(s) and/or that have the same hostname. See the documentation and the "advanced-matching" example for details. * New delayer plugin: there's a new plugin that will delay all requests to a given URL (by default, all of them) by a given number of milliseconds (by default, 2000). * New CORS plugin: there's a new plugin that accepts all CORS requests. * New proxy-cache plugin: there's a new proxy plugin that caches responses to GET requests. * Compatibility bugfix: Windows absolute paths work now as plugin load paths. * Configuration files: now they can specify plugin load paths and the port the RoboHydra server will listen on. * Multiple RoboHydraHeadStatic response improvement: there's a new property "repeatMode" that can be set to "round-robin" (default) and "repeat-last", which just repeats the last response forever upon reaching it. * Bugfixes, improvements and code clean-ups. Version 0.4 (2013-11-10) ------------------------ * Broken compatibility: the API of the "registerPluginObject" function has changed, check the new documentation. The function "requirePlugin" no longer exists. * Potential compatibility problem: the setHostHeader property of the proxy head is now true by default. It's unlikely that this change will bite anyone, but if you needed the proxy head to NOT set the Host HTTP header you have to change your RoboHydraHeadProxy definitions. * Potential compatibility problem: now dynamic heads have precedence over any dynamic heads created before. This behaviour makes much more sense (heads you create will override whatever the current behaviour is), and it's very unlikely that this change will be a problem for anyone, but if you're creating dynamic heads programmatically for some reason, check that this doesn't break your plugins. * Deprecated name "tests": now you should use "scenarios". It's just a name change, functionality stays the same. The functions "startTest" and "stoptest" are deprecated, and "startScenario" and "stopScenario" should be used instead (see next point for details). * External scenarios: scenarios can now be specified in separate files, in addition to inline inside the plugin's index.js file. Each scenario is a file inside the scenarios/ subdirectory of the plugin directory. * Scenario reliability: now scenarios should be more reliable, as heads contained in the scenario are reset to their original state (assuming they have any state at all; RoboHydraHeadStatic is currently the only head type with state, and only in the case of using multiple responses). * New "fixtures" module: plugins now have access to a second module, "fixtures". This module contains a single function, "load", that allows you to easily load files sitting in the fixtures/ subdirectory of the plugin directory. * Dynamic head priority: the registerDynamicHead method of the RoboHydra object now supports an optional parameter to specify the priority of the head (for now, only "normal" or "high"). Dynamic heads with "high" priority will be added to the "*priority-dynamic*" pseudo-plugin, which is placed before "*dynamic*". This is useful for plugins like "logger", which thanks to this change can add "overall" heads that will have precedence over regular dynamic heads added afterwards (see also the dynamic head precedence change above). * Multiple user support: RoboHydra servers can now be shared among several users. Each user will have her own state independent of the other users' state. This allows you to setup a single, shared RoboHydra server for a whole team, as opposed to every member of the team having to install RoboHydra in her own computer. See the "summoners" documentation for more information. * REST API: there is a new API to interact with the RoboHydra server. It's REST based, and for now it only supports JSON as a format. It allows you to check the loaded plugins, information about a given plugin, head or scenario, and change the state of a given head or scenario. * Admin UI: simplified the head and scenario list UI; static heads can now be created with a specific status code; show the hydra name (related to the multiple user support) and the date in which the server was started. * Logger plugin: it now logs the original request sent by the client, as opposed to the possibly-modified request (eg. the request could be modified in place before calling the next function). * Creating new head classes: there is now a function ("roboHydraHeadType") to create head classes that inherit from other, existing head classes. See the documentation and examples for more details. * Command-line UI: now configuration files are optional, and plugins can be specified on the command-line directly (options -n and -P). * Add more and better examples to the examples/ folder. * Many code clean-ups and improvements. Version 0.3 (2012-09-02) ------------------------ * Potentially breaking change: assertion failures won't throw exceptions from now on. Instead, they will simply return false. This means that code after a failed assertion *does get executed* in RoboHydra 0.3. Most of the time this is exactly what you want. Moreover, it's much easier to simulate the old behaviour in RoboHydra 0.3, in the very few cases you might need it, than simulate the new behaviour with RoboHydra 0.2. * Streaming support: calls to the "write" method will be written immediately, even when chaining requests (when setup properly). This allows sending data in chunks, or sending data and never close the connection. Check the new "chain" and "on" methods in the Response class documentation for details. * Make heads more strict: heads will complain now about any properties they don't understand. * HTTPS: RoboHydra can now receive HTTPS requests, and RoboHydraProxyHead can connect to HTTPS websites. * Compact configuration: plugins with no special configuration can be specified in configuration files as a simple string (the plugin name), as opposed to a Javascript object with the keys "name" and "config". * New RoboHydraHeadFilter head: this new head allows you to filter the result of any matching request and return a different response. It understands compression and will transparently uncompress and compress back any compressed responses. See the documentation for more details. * New RoboHydraHeadWatchdog head: it allows you to watch the traffic for a certain pattern, and act when that pattern is found. For example, you might want to log responses containing a given text separately. It will transparently uncompress to make it easier to inspect response bodies. * Admin UI: now filesystem and proxy heads can be created dynamically from the web UI; URL paths for dynamically-created static content heads will now match GET parameters; the path debugger will now highlight *all* matching heads, not just the first one; the admin plugin is not shown on the list of heads anymore (see the source for details if you really want to show them). * RoboHydraFilesystemHead: add support for index files. See documentation for details. * RoboHydraFilesystemHead and RoboHydraProxyHead: "mountPath" is now treated as a plain string, meaning any special regexp characters must not be escaped from the mount path. * New request class: you can use it to create new, fake requests (eg. when chaining). * Query (GET) parameters: the "getParams" property is deprecated now, in favour of "queryParams". * Exceptions: if a head throws an exception, it will be caught and the request will return a 500 internal server error with the stacktrace as the response body.