Testing Viewer Upgrades

From Second Life Wiki
Jump to navigation Jump to search

Viewers listed in the Third Party Viewer Directory may use the Linden Lab Viewer Version Management system to manage user upgrades.

Before actually posting a version where your users will get it, you should test whether or not upgrading to that version from an earlier version of your viewer works, and whether or not upgrading from that new version to some successor version will work.


The upgrade query is just an HTTP GET request, and the responses are just XML-encoded LLSD. You can create your own test infrastructure by creating a web service that returns the responses you want for each test. This can be as simple as putting hard-coded responses into the content of a normal HTTP server that returns files, or you could build a CGI or other program to return the responses your test needs.

Update Query Requests

An update query request URL looks like:


or, generically:



Viewer Channel Name
your viewer channel name
the four part version number of the requesting viewer
the platform identifier (in the official viewer, one of: win, mac, lnx)
a three part version number for the platform
either testok or testno to indicate the value of the WillingToTest setting
an MD5 hash value constructed to be specific to the requesting system

The system-unique-id is the name of the file that holds the LLSD data that is listed below. The web site directory structure should follow the data within the update query request. As indicated below you need to run the viewer platform and check the log to get the set of values needed for your website directory tree.Nicky Perian

The easiest way to get the values your viewer will send from any given system is to look in the log file for the request it generates; you can then configure the responses that will be returned for those queries.

Update Query Responses

An update query might get any of three sorts of responses:

HTTP Errors
Any HTTP error response should result in the update query being treated as complete with no update needed, and then retried after a number of seconds specified by the setting UpdaterServiceCheckPeriod.
No Update
A 200 Ok response containing an empty LLSD map means that there is no update available:
<?xml version="1.0"?><llsd><map/></llsd>
Update Available
A 200 Ok response for an update has a map with contents as shown here:
<?xml version="1.0"?>
   <boolean>0|1</boolean>                <!-- 1 == required, 0 == optional -->
   <string></string>         <!-- new version number -->
   <string>Viewer Channel Name</string>  <!-- channel name for your new viewer -->
   <integer>size of the installer download in bytes</integer>
   <string>32 character hex MD5 checksum of installer download</string>

Critical Cases To Test

  1. From a previous version, does a required update response result in downloading and installing the new version (or at least offering it, depending on the users upgrade preference)
  2. From the new version, does an HTTP error response result in a retry after UpdaterServiceCheckPeriod seconds
  3. From the new version, does a no-update response result in a retry after UpdaterServiceCheckPeriod seconds
  4. From the new version, does a required update response result in downloading and installing the new version (or at least offering it, depending on the users upgrade preference)

Helpful Settings and Switches

Any setting can be overridden by using the --set setting-name setting-value command line switch.

defaults to 3600 (an hour) - shortening this makes retry testing much quicker
limits the download speed of the request for the installer. The default is deliberately very slow (so as to prevent a background download from interfering with Second Life performance). When testing, setting this to 10000000 makes downloads go quickly.

Overriding the update service location

  • At and after version 3.6.4-release, use the command line option:
--update-service https://your-host/your-prefix


your-prefix is any path that precedes the v1.1 in the request query URL
  • Prior to version 3.6.4-release, override the location using the two settings:
set to http://hostname for your service
any path elements between the host name and the v1.1 (defaults to /update/)

Should this be the set variable used in llviewernetwork.cpp CmdLineUpdateService? Instead of UpdaterServiceURL Nicky Perian 17:49, 1 September 2013 (PDT)

Yes, probably, but just use the new option above -- Oz Linden