func TestVTGateExecute(t *testing.T) { sandbox := createSandbox(KsTestUnsharded) sbc := &sandboxConn{} sandbox.MapTestConn("0", sbc) q := proto.Query{ Sql: "select * from t1", TabletType: topo.TYPE_MASTER, } qr := new(proto.QueryResult) err := rpcVTGate.Execute(context.Background(), &q, qr) if err != nil { t.Errorf("want nil, got %v", err) } wantqr := new(proto.QueryResult) wantqr.Result = singleRowResult if !reflect.DeepEqual(wantqr, qr) { t.Errorf("want \n%+v, got \n%+v", singleRowResult, qr) } if qr.Session != nil { t.Errorf("want nil, got %+v\n", qr.Session) } q.Session = new(proto.Session) rpcVTGate.Begin(context.Background(), q.Session) if !q.Session.InTransaction { t.Errorf("want true, got false") } rpcVTGate.Execute(context.Background(), &q, qr) wantSession := &proto.Session{ InTransaction: true, ShardSessions: []*proto.ShardSession{{ Keyspace: KsTestUnsharded, Shard: "0", TabletType: topo.TYPE_MASTER, TransactionId: 1, }}, } if !reflect.DeepEqual(wantSession, q.Session) { t.Errorf("want \n%+v, got \n%+v", wantSession, q.Session) } rpcVTGate.Commit(context.Background(), q.Session) if sbc.CommitCount != 1 { t.Errorf("want 1, got %d", sbc.CommitCount) } q.Session = new(proto.Session) rpcVTGate.Begin(context.Background(), q.Session) rpcVTGate.Execute(context.Background(), &q, qr) rpcVTGate.Rollback(context.Background(), q.Session) }