spanner: session client should return Spanner errors

The session client would return non-Spanner errors to the session
consumer when a context error or a gRPC error would occur.

Updates #1719.

Change-Id: Ife5b6cc503609404a9b8abed290fdb1932b29a56
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/50231
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Shanika Kuruppu <skuruppu@google.com>
diff --git a/spanner/sessionclient.go b/spanner/sessionclient.go
index 68b5b49..1f551e3 100644
--- a/spanner/sessionclient.go
+++ b/spanner/sessionclient.go
@@ -191,7 +191,7 @@
 		}
 		if ctx.Err() != nil {
 			trace.TracePrintf(ctx, nil, "Context error while creating a batch of %d sessions: %v", createCount, ctx.Err())
-			consumer.sessionCreationFailed(ctx.Err(), remainingCreateCount)
+			consumer.sessionCreationFailed(toSpannerError(ctx.Err()), remainingCreateCount)
 			break
 		}
 		response, err := client.BatchCreateSessions(ctx, &sppb.BatchCreateSessionsRequest{
@@ -201,7 +201,7 @@
 		})
 		if err != nil {
 			trace.TracePrintf(ctx, nil, "Error creating a batch of %d sessions: %v", remainingCreateCount, err)
-			consumer.sessionCreationFailed(err, remainingCreateCount)
+			consumer.sessionCreationFailed(toSpannerError(err), remainingCreateCount)
 			break
 		}
 		actuallyCreated := int32(len(response.Session))
diff --git a/spanner/sessionclient_test.go b/spanner/sessionclient_test.go
index 13b61c7..802d42b 100644
--- a/spanner/sessionclient_test.go
+++ b/spanner/sessionclient_test.go
@@ -308,7 +308,7 @@
 	}
 	for _, e := range consumer.errors {
 		if g, w := status.Code(e.err), codes.DeadlineExceeded; g != w {
-			t.Fatalf("Error code mismatch\ngot: %v\nwant: %v", g, w)
+			t.Fatalf("Error code mismatch\ngot: %v (%s)\nwant: %v", g, e.err, w)
 		}
 	}
 	client.Close()