don't barf if no HTTP_USER_AGENT (Django test client doesn't emit)

This decorator logs useful info for certain views.
Except that one of the things it tries to log is HTTP_USER_AGENT
which Django's unittest client does not emit.
first stab at unittesting using Django's test browser simulator

These tests are not an exhaustive unit-testing implementation.
It basically just browses the various pages and confirms that
none of the pages errors out.  Login and logout are implemented
but no editing is done.

Django's test client visits URIs, retrieves HTTP responses and
page text as well as the context returned by the view and some
template information.
testing user/pass, repo/org/cid/etc from configs; disable login/out

- Get username/password from config file. We're not actually
  including the username/password for security reasons, so you'll
  have to manually edit ddr.cfg when testing.
- Get repo,org,cid,eid,role,sha1 from config file rather than
  trying to derive from response data.  It's just easier for now.
- Disable login, which for some unknown reason works in a browser
  but not in the test client.
Make web test class names sortable

For the unittest framework to do collections,entities,files
in order.
restore commented-out loging/logout test steps

These had been freezing before but now they work.
Perhaps because I was only logging in and never logging out???
remove hard-coded test values

We don't know in advance what repo/org/cid we want to test on.
there has to be a models.py before Django unit tests will work
tests for storage mounting and unmounting

- Start by "zeroing out", unmounting any mounted devices.
- Mount device specified in settings.

Note: this doesn't yet test if the /var/www/media/base symlink
gets created or not.
Merge branch 'master' into 073-unittest-start
setting for whether unittests create new collections/entities
lots of work on testing collection/entity edit views

Having test_NN_login and _logout functions in each test class did
not work because we are not using a normal Django login process.

We still have login and logout test functions; these seem to test
login/logout successfully.  Login doesn't carry over to other
test functions, however, so all the extra login/logout functions
were removed, leaving only the first one of each.

In edit test functions, the test client was not logged in.
Perhaps sessions work differently from the way the Django docs say
they do.  Or maybe the webui.views.decorator.login_required
doesn't work the way we expect.
The login_required decorator checks for "git_name" and "git_mail"
in session, so we write these to session inside the edit test
functions and it works.

For forms, it is not enough to insert only the field with the test
string.  All form fields must be filled.
script for generating test coverage report