1// Copyright 2018 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package spanner
16
17import (
18	"context"
19	"testing"
20	"time"
21
22	"cloud.google.com/go/internal/testutil"
23	stestutil "cloud.google.com/go/spanner/internal/testutil"
24	"google.golang.org/api/option"
25	"google.golang.org/grpc"
26)
27
28// Check that stats are being exported.
29func TestOCStats(t *testing.T) {
30	te := testutil.NewTestExporter()
31	defer te.Unregister()
32
33	ms := stestutil.NewMockCloudSpanner(t, trxTs)
34	ms.Serve()
35	ctx := context.Background()
36	c, err := NewClientWithConfig(ctx, "projects/P/instances/I/databases/D",
37		ClientConfig{SessionPoolConfig: SessionPoolConfig{
38			MinOpened: 0,
39		}},
40		option.WithEndpoint(ms.Addr()),
41		option.WithGRPCDialOption(grpc.WithInsecure()),
42		option.WithoutAuthentication())
43	if err != nil {
44		t.Fatal(err)
45	}
46	defer c.Close()
47
48	c.Single().ReadRow(ctx, "Users", Key{"alice"}, []string{"email"})
49	// Wait until we see data from the view.
50	select {
51	case <-te.Stats:
52	case <-time.After(1 * time.Second):
53		t.Fatal("no stats were exported before timeout")
54	}
55}
56