MCPcopy Create free account
hub / github.com/cloudspannerecosystem/spanner-cli / TestIsolationLevel

Function TestIsolationLevel

session_test.go:194–267  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

192}
193
194func TestIsolationLevel(t *testing.T) {
195 server := setupTestServer(t)
196
197 var recorder requestRecorder
198 unaryInterceptor, streamInterceptor := recordRequestsInterceptors(&recorder)
199 opts := []grpc.DialOption{
200 grpc.WithInsecure(),
201 grpc.WithUnaryInterceptor(unaryInterceptor),
202 grpc.WithStreamInterceptor(streamInterceptor),
203 }
204 ctx := context.Background()
205 conn, err := grpc.DialContext(ctx, server.Addr, opts...)
206 if err != nil {
207 t.Fatalf("failed to dial: %v", err)
208 }
209
210 for _, test := range []struct {
211 desc string
212 isolationLevel pb.TransactionOptions_IsolationLevel
213 want pb.TransactionOptions_IsolationLevel
214 }{
215 {
216 desc: "use default unspecified isolation level",
217 isolationLevel: pb.TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED,
218 want: pb.TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED,
219 },
220 {
221 desc: "use SERIALIZABLE isolation level",
222 isolationLevel: pb.TransactionOptions_SERIALIZABLE,
223 want: pb.TransactionOptions_SERIALIZABLE,
224 },
225 {
226 desc: "use REPEATABLE READ isolation level",
227 isolationLevel: pb.TransactionOptions_REPEATABLE_READ,
228 want: pb.TransactionOptions_REPEATABLE_READ,
229 },
230 } {
231 t.Run(test.desc, func(t *testing.T) {
232 defer recorder.flush()
233
234 session, err := NewSession("project", "instance", "database", pb.RequestOptions_PRIORITY_UNSPECIFIED, "role", nil, nil, option.WithGRPCConn(conn))
235 if err != nil {
236 t.Fatalf("failed to create spanner-cli session: %v", err)
237 }
238
239 // Read-Write Transaction.
240 if err := session.BeginReadWriteTransaction(ctx, test.isolationLevel, pb.RequestOptions_PRIORITY_UNSPECIFIED, ""); err != nil {
241 t.Fatalf("failed to begin read write transaction: %v", err)
242 }
243 iter, _ := session.RunQuery(ctx, spanner.NewStatement("SELECT * FROM t1"))
244 if err := iter.Do(func(r *spanner.Row) error {
245 return nil
246 }); err != nil {
247 t.Fatalf("failed to run query: %v", err)
248 }
249 if _, _, _, _, err := session.RunUpdate(ctx, spanner.NewStatement("DELETE FROM t1 WHERE Id = 1"), true); err != nil {
250 t.Fatalf("failed to run update: %v", err)
251 }

Callers

nothing calls this directly

Calls 8

flushMethod · 0.95
RunQueryMethod · 0.95
RunUpdateMethod · 0.95
setupTestServerFunction · 0.85
NewSessionFunction · 0.85

Tested by

no test coverage detected