Changes to automatically provision,build and run Radius containers for Auth tests.
Changes to cord test server to handle radius server restart requests.
diff --git a/src/test/setup/radius-config/freeradius/mods-available/cache b/src/test/setup/radius-config/freeradius/mods-available/cache
new file mode 100644
index 0000000..e679a1f
--- /dev/null
+++ b/src/test/setup/radius-config/freeradius/mods-available/cache
@@ -0,0 +1,98 @@
+# -*- text -*-
+#
+#  $Id: 53f2169741ce8c7f78eb525ddc5a6fddf1dcc0cc $
+
+#
+#	A module to cache attributes.  The idea is that you can look
+#	up information in a database, and then cache it.  Repeated
+#	requests for the same information will then have the cached
+#	values added to the request.
+#
+#	The module can cache a fixed set of attributes per key.
+#	It can be listed in "authorize", "post-auth", "pre-proxy"
+#	and "post-proxy".
+#
+#	If you want different things cached for authorize and post-auth,
+#	you will need to define two instances of the "cache" module.
+#
+#	The module returns "ok" if it found a cache entry.
+#	The module returns "updated" if it added a new cache entry.
+#	The module returns "noop" if it did nothing.
+#
+cache {
+	#  The key used to index the cache.  It is dynamically expanded
+	#  at run time.
+	key = "%{User-Name}"
+
+	#  The TTL of cache entries, in seconds.  Entries older than this
+	#  will be expired.
+	#
+	#  You can set the TTL per cache entry, but adding a control
+	#  variable "Cache-TTL".  The value there will over-ride this one.
+	#  Setting a Cache-TTL of 0 means "delete this entry".
+	#
+	#  This value should be between 10 and 86400.
+	ttl = 10
+
+	#  You can flush the cache via
+	#
+	#	radmin -e "set module config cache epoch 123456789"
+	#
+	#  Where last value is a 32-bit Unix timestamp.  Cache entries
+	#  older than this are expired, and new entries added.
+	#
+	#  You should never set the "epoch" configuration item in
+	#  this file.
+
+	#  The module can also operate in status-only mode where it will
+	#  not add new cache entries, or merge existing ones.
+	#
+	#  To enable set the control attribute "Cache-Status-Only" to "yes"
+	#  The module will return "ok" if it found a cache entry.
+	#  The module will return "notfound" if it failed to find a cache entry,
+	#  or the entry had expired.
+	#
+	#  Note: expired entries will still be removed.
+
+	#  If yes the following attributes will be added to the request list:
+	#  	* Cache-Entry-Hits - The number of times this entry has been
+	#			     retrieved.
+	add_stats = no
+
+	#  The list of attributes to cache for a particular key.
+	#  Each key gets the same set of cached attributes.
+	#  The attributes are dynamically expanded at run time.
+	#
+	#  You can specify which list the attribute goes into by
+	#  prefixing the attribute name with the list.  This allows
+	#  you to update multiple lists with one configuration.
+	#
+	#  If no list is specified the default list will be updated.
+	#
+	#  The default list is specified in the same way as unlang update
+	#  stanzas. If no default list is set, it will default to the
+	#  request list.
+	#
+	#  Quoting around values determine how they're processed:
+	#  - double quoted values are xlat expanded.
+	#  - single quoted values are treated as literals.
+	#  - bare values are treated as attribute references.
+	#
+	#  The '+=' operator causes all instances of the reference to
+	#  be cached.
+	#
+	#  Attributes that are generated from processing the update section
+	#  are also added to the current request, as if there'd been a cache
+	#  hit.
+	update {
+		# [outer.]<list>:<attribute> <op> <value>
+
+		# Cache all instances of Reply-Message in the reply list
+		reply:Reply-Message += &reply:Reply-Message
+
+		# Add our own to show when the cache was last updated
+		reply:Reply-Message += "Cache last updated at %t"
+
+		reply:Class := "%{randstr:ssssssssssssssssssssssssssssssss}"
+	}
+}