spanner: run integration tests against the emulator in Kokoro Presubmit

This includes three changes:

* fix an issue that presubmit runs `go test -short` twice.
* add a step in presubmit.sh if emulator_test.sh exists, run it.
* add emulator_test.sh in spanner directory.

Note: the reason why directly download a binary instead of using gcloud
is because it requires to update gcloud components that ideally should
be done in Dockerfile when creating the image. However, this is not
needed for other submodules so downloading the binary is the simplest
approach.

Change-Id: I69a9426aecf6b793ce2e7ff9e9d51fa05590172e
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/55236
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Cody Oss <codyoss@google.com>
diff --git a/internal/kokoro/presubmit.sh b/internal/kokoro/presubmit.sh
index 1b97f9d..107d3be 100755
--- a/internal/kokoro/presubmit.sh
+++ b/internal/kokoro/presubmit.sh
@@ -56,8 +56,10 @@
       go test -race -v -timeout 45m ./... 2>&1 \
       | tee sponge_log.log
     fi
-    go test -race -v -timeout 15m -short ./... 2>&1 \
-      | tee sponge_log.log
+    # Run integration tests against an emulator.
+    if [ -f "emulator_test.sh" ]; then
+      ./emulator_test.sh
+    fi
     # Takes the kokoro output log (raw stdout) and creates a machine-parseable
     # xUnit XML file.
     cat sponge_log.log \
diff --git a/spanner/emulator_test.sh b/spanner/emulator_test.sh
new file mode 100755
index 0000000..b01ba28
--- /dev/null
+++ b/spanner/emulator_test.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License..
+
+# Fail on any error
+set -eo pipefail
+
+# Display commands being run
+set -x
+
+export SPANNER_EMULATOR_HOST=localhost:9010
+export GCLOUD_TESTS_GOLANG_PROJECT_ID=emulator-test-project
+echo "Running the Cloud Spanner emulator: $SPANNER_EMULATOR_HOST";
+
+# Download the emulator
+EMULATOR_VERSION=0.7.3
+wget https://storage.googleapis.com/cloud-spanner-emulator/releases/${EMULATOR_VERSION}/cloud-spanner-emulator_linux_amd64-${EMULATOR_VERSION}.tar.gz
+tar zxvf cloud-spanner-emulator_linux_amd64-${EMULATOR_VERSION}.tar.gz
+chmod u+x emulator_main
+
+# Start the emulator
+./emulator_main --host_port $SPANNER_EMULATOR_HOST &
+
+EMULATOR_PID=$!
+
+# Stop the emulator & clean the environment variable
+function cleanup() {
+    kill -2 $EMULATOR_PID
+    unset SPANNER_EMULATOR_HOST
+    unset GCLOUD_TESTS_GOLANG_PROJECT_ID
+    echo "Cleanup the emulator";
+}
+trap cleanup EXIT
+
+go test -v -timeout 10m ./... -run '^TestIntegration_' 2>&1 | tee sponge_log.log