| Index: testing_support/gerrit-init.sh | 
| diff --git a/testing_support/gerrit-init.sh b/testing_support/gerrit-init.sh | 
| new file mode 100755 | 
| index 0000000000000000000000000000000000000000..83d617161a67446c10c181ade3c1c510835cc251 | 
| --- /dev/null | 
| +++ b/testing_support/gerrit-init.sh | 
| @@ -0,0 +1,137 @@ | 
| +#!/bin/bash | 
| +# Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
| +# Use of this source code is governed by a BSD-style license that can be | 
| +# found in the LICENSE file. | 
| + | 
| +if [ -n "$1" ]; then | 
| +  rundir="$1" | 
| +else | 
| +  rundir=$(mktemp -d) | 
| +fi | 
| + | 
| +account_id=101 | 
| +full_name='Test Account' | 
| +maximum_page_size='25' | 
| +password='test-password' | 
| +preferred_email="${username}@test.org" | 
| +registered_on=$(date '+%Y-%m-%d %H:%M:%S.000%:::z') | 
| +username='test-username' | 
| + | 
| +# The python code below for picking the "latest" gerrit release is cribbed and | 
| +# ported from the javascript at: | 
| +# | 
| +#     http://gerrit-releases.storage.googleapis.com/index.html | 
| +url='https://www.googleapis.com/storage/v1beta2/b/gerrit-releases/o?projection=noAcl' | 
| +curl --ssl-reqd -s $url | python <(cat <<EOF | 
| +# Reads json-encoded text from stdin in the format: | 
| +# | 
| +#    { | 
| +#     "items": [ | 
| +#      { | 
| +#       "name": "gerrit-<version>.war", | 
| +#       "md5Hash": "<base64 encoded md5sum>", | 
| +#      }, | 
| +#      { | 
| +#       "name": "gerrit-<version>.war", | 
| +#       "md5Hash": "<base64 encoded md5sum>", | 
| +#      }, | 
| +#      ... | 
| +#    } | 
| +# | 
| +# ...and prints the name and md5sum of the latest non-release-candidate version. | 
| + | 
| +import json | 
| +import re | 
| +import sys | 
| + | 
| +gerrit_re = re.compile('gerrit(?:-full)?-([0-9.]+(?:-rc[0-9]+)?)[.]war') | 
| +j = json.load(sys.stdin) | 
| +items = [(x, gerrit_re.match(x['name'])) for x in j['items']] | 
| +items = [(x, m.group(1)) for x, m in items if m] | 
| +def _cmp(a, b): | 
| +  an = a[1].replace('-rc', '.rc').split('.') | 
| +  bn = b[1].replace('-rc', '.rc').split('.') | 
| +  while len(an) < len(bn): | 
| +    an.append('0') | 
| +  while len(bn) < len(an): | 
| +    bn.append('0') | 
| +  for i in range(len(an)): | 
| +    ai = int(an[i][2:]) if 'rc' in an[i] else 1000 + int(an[i]) | 
| +    bi = int(bn[i][2:]) if 'rc' in bn[i] else 1000 + int(bn[i]) | 
| +    if ai != bi: | 
| +      return -1 if ai > bi else 1 | 
| +  return 0 | 
| +items.sort(cmp=_cmp) | 
| +for x in items: | 
| +  if 'rc' not in x[0]['name']: | 
| +    print '"%s" "%s"' % (x[0]['name'], x[0]['md5Hash']) | 
| +    sys.exit(0) | 
| +EOF | 
| +) | xargs | while read name md5; do | 
| +  # Download the latest gerrit version if necessary, and verify the md5sum. | 
| +  net_sum=$(echo -n $md5 | base64 -d | od -tx1 | head -1 | cut -d ' ' -f 2- | | 
| +            sed 's/ //g') | 
| +  if [ -f "./$name" ]; then | 
| +    file_sum=$(md5sum "./$name" | awk '{print $1}' | xargs) | 
| +    if [ "$file_sum" = "$net_sum" ]; then | 
| +      ln -sf "./$name" gerrit.war | 
| +      break | 
| +    else | 
| +      rm -rf "./$name" | 
| +    fi | 
| +  fi | 
| +  curl --ssl-reqd -s -o "./$name" \ | 
| +      "https://gerrit-releases.storage.googleapis.com/$name" | 
| +  file_sum=$(md5sum "./$name" | awk '{print $1}' | xargs) | 
| +  if [ "$file_sum" != "$net_sum" ]; then | 
| +    echo "ERROR: md5sum mismatch when downloading $name" 1>&2 | 
| +    rm -rf "./$name" | 
| +    exit 1 | 
| +  else | 
| +    ln -sf "./$name" gerrit.war | 
| +  fi | 
| +done | 
| + | 
| +if [ ! -e "./gerrit.war" ]; then | 
| +  echo "ERROR: No gerrit.war file or link present, and unable " 1>&2 | 
| +  echo "       to download the latest version." 1>&2 | 
| +  exit 1 | 
| +fi | 
| + | 
| +# By default, gerrit only accepts https connections, which is a good thing.  But | 
| +# for testing, it's convenient to enable plain http. | 
| +mkdir -p "${rundir}/etc" | 
| +cat <<EOF > "${rundir}/etc/gerrit.config" | 
| +[auth] | 
| +	type = http | 
| +	gitBasicAuth = true | 
| +EOF | 
| + | 
| +# Initialize the gerrit instance. | 
| +java -jar "./gerrit.war" init --no-auto-start --batch -d "${rundir}" | 
| + | 
| +# Set up the first user, with admin priveleges. | 
| +cat <<EOF | java -jar "./gerrit.war" gsql -d "${rundir}" > /dev/null | 
| +INSERT INTO ACCOUNTS (FULL_NAME, MAXIMUM_PAGE_SIZE, PREFERRED_EMAIL, REGISTERED_ON, ACCOUNT_ID) VALUES ('${full_name}', ${maximum_page_size}, '${preferred_email}', '${registered_on}', ${account_id}); | 
| +INSERT INTO ACCOUNT_EXTERNAL_IDS (ACCOUNT_ID, EXTERNAL_ID) VALUES (${account_id}, 'gerrit:${username}'); | 
| +INSERT INTO ACCOUNT_EXTERNAL_IDS (ACCOUNT_ID, EXTERNAL_ID) VALUES (${account_id}, 'username:${username}'); | 
| +INSERT INTO ACCOUNT_EXTERNAL_IDS (ACCOUNT_ID, EMAIL_ADDRESS, PASSWORD) VALUES (${account_id}, '${preferred_email}', '${password}'); | 
| +INSERT INTO ACCOUNT_GROUP_MEMBERS (ACCOUNT_ID, GROUP_ID) VALUES (${account_id}, 1); | 
| +EOF | 
| + | 
| +# Create a netrc file to authenticate as the first user. | 
| +mkdir -p "${rundir}/tmp" | 
| +cat <<EOF > "${rundir}/tmp/.netrc" | 
| +machine localhost login ${username} password ${password} | 
| +EOF | 
| + | 
| +echo | 
| +echo "To start gerrit server:" | 
| +echo "  ${rundir}/bin/gerrit.sh start" | 
| +echo | 
| +echo "To use the REST API:" | 
| +echo "  curl --netrc-file ${rundir}/tmp/.netrc http://localhost:8080/<endpoint>" | 
| +echo | 
| +echo "To stop the server:" | 
| +echo "  ${rundir}/bin/gerrit.sh stop" | 
| +echo | 
|  |