You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1086 lines
31 KiB

  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. // https://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. // AUTO-GENERATED CODE. DO NOT EDIT.
  15. package spanner
  16. import (
  17. emptypb "github.com/golang/protobuf/ptypes/empty"
  18. spannerpb "google.golang.org/genproto/googleapis/spanner/v1"
  19. )
  20. import (
  21. "flag"
  22. "fmt"
  23. "io"
  24. "log"
  25. "net"
  26. "os"
  27. "strings"
  28. "testing"
  29. "github.com/golang/protobuf/proto"
  30. "github.com/golang/protobuf/ptypes"
  31. "golang.org/x/net/context"
  32. "google.golang.org/api/option"
  33. status "google.golang.org/genproto/googleapis/rpc/status"
  34. "google.golang.org/grpc"
  35. "google.golang.org/grpc/codes"
  36. "google.golang.org/grpc/metadata"
  37. gstatus "google.golang.org/grpc/status"
  38. )
  39. var _ = io.EOF
  40. var _ = ptypes.MarshalAny
  41. var _ status.Status
  42. type mockSpannerServer struct {
  43. // Embed for forward compatibility.
  44. // Tests will keep working if more methods are added
  45. // in the future.
  46. spannerpb.SpannerServer
  47. reqs []proto.Message
  48. // If set, all calls return this error.
  49. err error
  50. // responses to return if err == nil
  51. resps []proto.Message
  52. }
  53. func (s *mockSpannerServer) CreateSession(ctx context.Context, req *spannerpb.CreateSessionRequest) (*spannerpb.Session, error) {
  54. md, _ := metadata.FromIncomingContext(ctx)
  55. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  56. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  57. }
  58. s.reqs = append(s.reqs, req)
  59. if s.err != nil {
  60. return nil, s.err
  61. }
  62. return s.resps[0].(*spannerpb.Session), nil
  63. }
  64. func (s *mockSpannerServer) GetSession(ctx context.Context, req *spannerpb.GetSessionRequest) (*spannerpb.Session, error) {
  65. md, _ := metadata.FromIncomingContext(ctx)
  66. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  67. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  68. }
  69. s.reqs = append(s.reqs, req)
  70. if s.err != nil {
  71. return nil, s.err
  72. }
  73. return s.resps[0].(*spannerpb.Session), nil
  74. }
  75. func (s *mockSpannerServer) ListSessions(ctx context.Context, req *spannerpb.ListSessionsRequest) (*spannerpb.ListSessionsResponse, error) {
  76. md, _ := metadata.FromIncomingContext(ctx)
  77. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  78. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  79. }
  80. s.reqs = append(s.reqs, req)
  81. if s.err != nil {
  82. return nil, s.err
  83. }
  84. return s.resps[0].(*spannerpb.ListSessionsResponse), nil
  85. }
  86. func (s *mockSpannerServer) DeleteSession(ctx context.Context, req *spannerpb.DeleteSessionRequest) (*emptypb.Empty, error) {
  87. md, _ := metadata.FromIncomingContext(ctx)
  88. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  89. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  90. }
  91. s.reqs = append(s.reqs, req)
  92. if s.err != nil {
  93. return nil, s.err
  94. }
  95. return s.resps[0].(*emptypb.Empty), nil
  96. }
  97. func (s *mockSpannerServer) ExecuteSql(ctx context.Context, req *spannerpb.ExecuteSqlRequest) (*spannerpb.ResultSet, error) {
  98. md, _ := metadata.FromIncomingContext(ctx)
  99. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  100. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  101. }
  102. s.reqs = append(s.reqs, req)
  103. if s.err != nil {
  104. return nil, s.err
  105. }
  106. return s.resps[0].(*spannerpb.ResultSet), nil
  107. }
  108. func (s *mockSpannerServer) ExecuteStreamingSql(req *spannerpb.ExecuteSqlRequest, stream spannerpb.Spanner_ExecuteStreamingSqlServer) error {
  109. md, _ := metadata.FromIncomingContext(stream.Context())
  110. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  111. return fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  112. }
  113. s.reqs = append(s.reqs, req)
  114. if s.err != nil {
  115. return s.err
  116. }
  117. for _, v := range s.resps {
  118. if err := stream.Send(v.(*spannerpb.PartialResultSet)); err != nil {
  119. return err
  120. }
  121. }
  122. return nil
  123. }
  124. func (s *mockSpannerServer) Read(ctx context.Context, req *spannerpb.ReadRequest) (*spannerpb.ResultSet, error) {
  125. md, _ := metadata.FromIncomingContext(ctx)
  126. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  127. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  128. }
  129. s.reqs = append(s.reqs, req)
  130. if s.err != nil {
  131. return nil, s.err
  132. }
  133. return s.resps[0].(*spannerpb.ResultSet), nil
  134. }
  135. func (s *mockSpannerServer) StreamingRead(req *spannerpb.ReadRequest, stream spannerpb.Spanner_StreamingReadServer) error {
  136. md, _ := metadata.FromIncomingContext(stream.Context())
  137. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  138. return fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  139. }
  140. s.reqs = append(s.reqs, req)
  141. if s.err != nil {
  142. return s.err
  143. }
  144. for _, v := range s.resps {
  145. if err := stream.Send(v.(*spannerpb.PartialResultSet)); err != nil {
  146. return err
  147. }
  148. }
  149. return nil
  150. }
  151. func (s *mockSpannerServer) BeginTransaction(ctx context.Context, req *spannerpb.BeginTransactionRequest) (*spannerpb.Transaction, error) {
  152. md, _ := metadata.FromIncomingContext(ctx)
  153. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  154. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  155. }
  156. s.reqs = append(s.reqs, req)
  157. if s.err != nil {
  158. return nil, s.err
  159. }
  160. return s.resps[0].(*spannerpb.Transaction), nil
  161. }
  162. func (s *mockSpannerServer) Commit(ctx context.Context, req *spannerpb.CommitRequest) (*spannerpb.CommitResponse, error) {
  163. md, _ := metadata.FromIncomingContext(ctx)
  164. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  165. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  166. }
  167. s.reqs = append(s.reqs, req)
  168. if s.err != nil {
  169. return nil, s.err
  170. }
  171. return s.resps[0].(*spannerpb.CommitResponse), nil
  172. }
  173. func (s *mockSpannerServer) Rollback(ctx context.Context, req *spannerpb.RollbackRequest) (*emptypb.Empty, error) {
  174. md, _ := metadata.FromIncomingContext(ctx)
  175. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  176. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  177. }
  178. s.reqs = append(s.reqs, req)
  179. if s.err != nil {
  180. return nil, s.err
  181. }
  182. return s.resps[0].(*emptypb.Empty), nil
  183. }
  184. func (s *mockSpannerServer) PartitionQuery(ctx context.Context, req *spannerpb.PartitionQueryRequest) (*spannerpb.PartitionResponse, error) {
  185. md, _ := metadata.FromIncomingContext(ctx)
  186. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  187. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  188. }
  189. s.reqs = append(s.reqs, req)
  190. if s.err != nil {
  191. return nil, s.err
  192. }
  193. return s.resps[0].(*spannerpb.PartitionResponse), nil
  194. }
  195. func (s *mockSpannerServer) PartitionRead(ctx context.Context, req *spannerpb.PartitionReadRequest) (*spannerpb.PartitionResponse, error) {
  196. md, _ := metadata.FromIncomingContext(ctx)
  197. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  198. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  199. }
  200. s.reqs = append(s.reqs, req)
  201. if s.err != nil {
  202. return nil, s.err
  203. }
  204. return s.resps[0].(*spannerpb.PartitionResponse), nil
  205. }
  206. // clientOpt is the option tests should use to connect to the test server.
  207. // It is initialized by TestMain.
  208. var clientOpt option.ClientOption
  209. var (
  210. mockSpanner mockSpannerServer
  211. )
  212. func TestMain(m *testing.M) {
  213. flag.Parse()
  214. serv := grpc.NewServer()
  215. spannerpb.RegisterSpannerServer(serv, &mockSpanner)
  216. lis, err := net.Listen("tcp", "localhost:0")
  217. if err != nil {
  218. log.Fatal(err)
  219. }
  220. go serv.Serve(lis)
  221. conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
  222. if err != nil {
  223. log.Fatal(err)
  224. }
  225. clientOpt = option.WithGRPCConn(conn)
  226. os.Exit(m.Run())
  227. }
  228. func TestSpannerCreateSession(t *testing.T) {
  229. var name string = "name3373707"
  230. var expectedResponse = &spannerpb.Session{
  231. Name: name,
  232. }
  233. mockSpanner.err = nil
  234. mockSpanner.reqs = nil
  235. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  236. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  237. var request = &spannerpb.CreateSessionRequest{
  238. Database: formattedDatabase,
  239. }
  240. c, err := NewClient(context.Background(), clientOpt)
  241. if err != nil {
  242. t.Fatal(err)
  243. }
  244. resp, err := c.CreateSession(context.Background(), request)
  245. if err != nil {
  246. t.Fatal(err)
  247. }
  248. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  249. t.Errorf("wrong request %q, want %q", got, want)
  250. }
  251. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  252. t.Errorf("wrong response %q, want %q)", got, want)
  253. }
  254. }
  255. func TestSpannerCreateSessionError(t *testing.T) {
  256. errCode := codes.PermissionDenied
  257. mockSpanner.err = gstatus.Error(errCode, "test error")
  258. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  259. var request = &spannerpb.CreateSessionRequest{
  260. Database: formattedDatabase,
  261. }
  262. c, err := NewClient(context.Background(), clientOpt)
  263. if err != nil {
  264. t.Fatal(err)
  265. }
  266. resp, err := c.CreateSession(context.Background(), request)
  267. if st, ok := gstatus.FromError(err); !ok {
  268. t.Errorf("got error %v, expected grpc error", err)
  269. } else if c := st.Code(); c != errCode {
  270. t.Errorf("got error code %q, want %q", c, errCode)
  271. }
  272. _ = resp
  273. }
  274. func TestSpannerGetSession(t *testing.T) {
  275. var name2 string = "name2-1052831874"
  276. var expectedResponse = &spannerpb.Session{
  277. Name: name2,
  278. }
  279. mockSpanner.err = nil
  280. mockSpanner.reqs = nil
  281. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  282. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  283. var request = &spannerpb.GetSessionRequest{
  284. Name: formattedName,
  285. }
  286. c, err := NewClient(context.Background(), clientOpt)
  287. if err != nil {
  288. t.Fatal(err)
  289. }
  290. resp, err := c.GetSession(context.Background(), request)
  291. if err != nil {
  292. t.Fatal(err)
  293. }
  294. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  295. t.Errorf("wrong request %q, want %q", got, want)
  296. }
  297. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  298. t.Errorf("wrong response %q, want %q)", got, want)
  299. }
  300. }
  301. func TestSpannerGetSessionError(t *testing.T) {
  302. errCode := codes.PermissionDenied
  303. mockSpanner.err = gstatus.Error(errCode, "test error")
  304. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  305. var request = &spannerpb.GetSessionRequest{
  306. Name: formattedName,
  307. }
  308. c, err := NewClient(context.Background(), clientOpt)
  309. if err != nil {
  310. t.Fatal(err)
  311. }
  312. resp, err := c.GetSession(context.Background(), request)
  313. if st, ok := gstatus.FromError(err); !ok {
  314. t.Errorf("got error %v, expected grpc error", err)
  315. } else if c := st.Code(); c != errCode {
  316. t.Errorf("got error code %q, want %q", c, errCode)
  317. }
  318. _ = resp
  319. }
  320. func TestSpannerListSessions(t *testing.T) {
  321. var nextPageToken string = ""
  322. var sessionsElement *spannerpb.Session = &spannerpb.Session{}
  323. var sessions = []*spannerpb.Session{sessionsElement}
  324. var expectedResponse = &spannerpb.ListSessionsResponse{
  325. NextPageToken: nextPageToken,
  326. Sessions: sessions,
  327. }
  328. mockSpanner.err = nil
  329. mockSpanner.reqs = nil
  330. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  331. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  332. var request = &spannerpb.ListSessionsRequest{
  333. Database: formattedDatabase,
  334. }
  335. c, err := NewClient(context.Background(), clientOpt)
  336. if err != nil {
  337. t.Fatal(err)
  338. }
  339. resp, err := c.ListSessions(context.Background(), request).Next()
  340. if err != nil {
  341. t.Fatal(err)
  342. }
  343. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  344. t.Errorf("wrong request %q, want %q", got, want)
  345. }
  346. want := (interface{})(expectedResponse.Sessions[0])
  347. got := (interface{})(resp)
  348. var ok bool
  349. switch want := (want).(type) {
  350. case proto.Message:
  351. ok = proto.Equal(want, got.(proto.Message))
  352. default:
  353. ok = want == got
  354. }
  355. if !ok {
  356. t.Errorf("wrong response %q, want %q)", got, want)
  357. }
  358. }
  359. func TestSpannerListSessionsError(t *testing.T) {
  360. errCode := codes.PermissionDenied
  361. mockSpanner.err = gstatus.Error(errCode, "test error")
  362. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  363. var request = &spannerpb.ListSessionsRequest{
  364. Database: formattedDatabase,
  365. }
  366. c, err := NewClient(context.Background(), clientOpt)
  367. if err != nil {
  368. t.Fatal(err)
  369. }
  370. resp, err := c.ListSessions(context.Background(), request).Next()
  371. if st, ok := gstatus.FromError(err); !ok {
  372. t.Errorf("got error %v, expected grpc error", err)
  373. } else if c := st.Code(); c != errCode {
  374. t.Errorf("got error code %q, want %q", c, errCode)
  375. }
  376. _ = resp
  377. }
  378. func TestSpannerDeleteSession(t *testing.T) {
  379. var expectedResponse *emptypb.Empty = &emptypb.Empty{}
  380. mockSpanner.err = nil
  381. mockSpanner.reqs = nil
  382. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  383. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  384. var request = &spannerpb.DeleteSessionRequest{
  385. Name: formattedName,
  386. }
  387. c, err := NewClient(context.Background(), clientOpt)
  388. if err != nil {
  389. t.Fatal(err)
  390. }
  391. err = c.DeleteSession(context.Background(), request)
  392. if err != nil {
  393. t.Fatal(err)
  394. }
  395. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  396. t.Errorf("wrong request %q, want %q", got, want)
  397. }
  398. }
  399. func TestSpannerDeleteSessionError(t *testing.T) {
  400. errCode := codes.PermissionDenied
  401. mockSpanner.err = gstatus.Error(errCode, "test error")
  402. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  403. var request = &spannerpb.DeleteSessionRequest{
  404. Name: formattedName,
  405. }
  406. c, err := NewClient(context.Background(), clientOpt)
  407. if err != nil {
  408. t.Fatal(err)
  409. }
  410. err = c.DeleteSession(context.Background(), request)
  411. if st, ok := gstatus.FromError(err); !ok {
  412. t.Errorf("got error %v, expected grpc error", err)
  413. } else if c := st.Code(); c != errCode {
  414. t.Errorf("got error code %q, want %q", c, errCode)
  415. }
  416. }
  417. func TestSpannerExecuteSql(t *testing.T) {
  418. var expectedResponse *spannerpb.ResultSet = &spannerpb.ResultSet{}
  419. mockSpanner.err = nil
  420. mockSpanner.reqs = nil
  421. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  422. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  423. var sql string = "sql114126"
  424. var request = &spannerpb.ExecuteSqlRequest{
  425. Session: formattedSession,
  426. Sql: sql,
  427. }
  428. c, err := NewClient(context.Background(), clientOpt)
  429. if err != nil {
  430. t.Fatal(err)
  431. }
  432. resp, err := c.ExecuteSql(context.Background(), request)
  433. if err != nil {
  434. t.Fatal(err)
  435. }
  436. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  437. t.Errorf("wrong request %q, want %q", got, want)
  438. }
  439. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  440. t.Errorf("wrong response %q, want %q)", got, want)
  441. }
  442. }
  443. func TestSpannerExecuteSqlError(t *testing.T) {
  444. errCode := codes.PermissionDenied
  445. mockSpanner.err = gstatus.Error(errCode, "test error")
  446. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  447. var sql string = "sql114126"
  448. var request = &spannerpb.ExecuteSqlRequest{
  449. Session: formattedSession,
  450. Sql: sql,
  451. }
  452. c, err := NewClient(context.Background(), clientOpt)
  453. if err != nil {
  454. t.Fatal(err)
  455. }
  456. resp, err := c.ExecuteSql(context.Background(), request)
  457. if st, ok := gstatus.FromError(err); !ok {
  458. t.Errorf("got error %v, expected grpc error", err)
  459. } else if c := st.Code(); c != errCode {
  460. t.Errorf("got error code %q, want %q", c, errCode)
  461. }
  462. _ = resp
  463. }
  464. func TestSpannerExecuteStreamingSql(t *testing.T) {
  465. var chunkedValue bool = true
  466. var resumeToken []byte = []byte("103")
  467. var expectedResponse = &spannerpb.PartialResultSet{
  468. ChunkedValue: chunkedValue,
  469. ResumeToken: resumeToken,
  470. }
  471. mockSpanner.err = nil
  472. mockSpanner.reqs = nil
  473. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  474. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  475. var sql string = "sql114126"
  476. var request = &spannerpb.ExecuteSqlRequest{
  477. Session: formattedSession,
  478. Sql: sql,
  479. }
  480. c, err := NewClient(context.Background(), clientOpt)
  481. if err != nil {
  482. t.Fatal(err)
  483. }
  484. stream, err := c.ExecuteStreamingSql(context.Background(), request)
  485. if err != nil {
  486. t.Fatal(err)
  487. }
  488. resp, err := stream.Recv()
  489. if err != nil {
  490. t.Fatal(err)
  491. }
  492. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  493. t.Errorf("wrong request %q, want %q", got, want)
  494. }
  495. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  496. t.Errorf("wrong response %q, want %q)", got, want)
  497. }
  498. }
  499. func TestSpannerExecuteStreamingSqlError(t *testing.T) {
  500. errCode := codes.PermissionDenied
  501. mockSpanner.err = gstatus.Error(errCode, "test error")
  502. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  503. var sql string = "sql114126"
  504. var request = &spannerpb.ExecuteSqlRequest{
  505. Session: formattedSession,
  506. Sql: sql,
  507. }
  508. c, err := NewClient(context.Background(), clientOpt)
  509. if err != nil {
  510. t.Fatal(err)
  511. }
  512. stream, err := c.ExecuteStreamingSql(context.Background(), request)
  513. if err != nil {
  514. t.Fatal(err)
  515. }
  516. resp, err := stream.Recv()
  517. if st, ok := gstatus.FromError(err); !ok {
  518. t.Errorf("got error %v, expected grpc error", err)
  519. } else if c := st.Code(); c != errCode {
  520. t.Errorf("got error code %q, want %q", c, errCode)
  521. }
  522. _ = resp
  523. }
  524. func TestSpannerRead(t *testing.T) {
  525. var expectedResponse *spannerpb.ResultSet = &spannerpb.ResultSet{}
  526. mockSpanner.err = nil
  527. mockSpanner.reqs = nil
  528. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  529. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  530. var table string = "table110115790"
  531. var columns []string = nil
  532. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  533. var request = &spannerpb.ReadRequest{
  534. Session: formattedSession,
  535. Table: table,
  536. Columns: columns,
  537. KeySet: keySet,
  538. }
  539. c, err := NewClient(context.Background(), clientOpt)
  540. if err != nil {
  541. t.Fatal(err)
  542. }
  543. resp, err := c.Read(context.Background(), request)
  544. if err != nil {
  545. t.Fatal(err)
  546. }
  547. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  548. t.Errorf("wrong request %q, want %q", got, want)
  549. }
  550. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  551. t.Errorf("wrong response %q, want %q)", got, want)
  552. }
  553. }
  554. func TestSpannerReadError(t *testing.T) {
  555. errCode := codes.PermissionDenied
  556. mockSpanner.err = gstatus.Error(errCode, "test error")
  557. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  558. var table string = "table110115790"
  559. var columns []string = nil
  560. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  561. var request = &spannerpb.ReadRequest{
  562. Session: formattedSession,
  563. Table: table,
  564. Columns: columns,
  565. KeySet: keySet,
  566. }
  567. c, err := NewClient(context.Background(), clientOpt)
  568. if err != nil {
  569. t.Fatal(err)
  570. }
  571. resp, err := c.Read(context.Background(), request)
  572. if st, ok := gstatus.FromError(err); !ok {
  573. t.Errorf("got error %v, expected grpc error", err)
  574. } else if c := st.Code(); c != errCode {
  575. t.Errorf("got error code %q, want %q", c, errCode)
  576. }
  577. _ = resp
  578. }
  579. func TestSpannerStreamingRead(t *testing.T) {
  580. var chunkedValue bool = true
  581. var resumeToken []byte = []byte("103")
  582. var expectedResponse = &spannerpb.PartialResultSet{
  583. ChunkedValue: chunkedValue,
  584. ResumeToken: resumeToken,
  585. }
  586. mockSpanner.err = nil
  587. mockSpanner.reqs = nil
  588. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  589. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  590. var table string = "table110115790"
  591. var columns []string = nil
  592. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  593. var request = &spannerpb.ReadRequest{
  594. Session: formattedSession,
  595. Table: table,
  596. Columns: columns,
  597. KeySet: keySet,
  598. }
  599. c, err := NewClient(context.Background(), clientOpt)
  600. if err != nil {
  601. t.Fatal(err)
  602. }
  603. stream, err := c.StreamingRead(context.Background(), request)
  604. if err != nil {
  605. t.Fatal(err)
  606. }
  607. resp, err := stream.Recv()
  608. if err != nil {
  609. t.Fatal(err)
  610. }
  611. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  612. t.Errorf("wrong request %q, want %q", got, want)
  613. }
  614. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  615. t.Errorf("wrong response %q, want %q)", got, want)
  616. }
  617. }
  618. func TestSpannerStreamingReadError(t *testing.T) {
  619. errCode := codes.PermissionDenied
  620. mockSpanner.err = gstatus.Error(errCode, "test error")
  621. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  622. var table string = "table110115790"
  623. var columns []string = nil
  624. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  625. var request = &spannerpb.ReadRequest{
  626. Session: formattedSession,
  627. Table: table,
  628. Columns: columns,
  629. KeySet: keySet,
  630. }
  631. c, err := NewClient(context.Background(), clientOpt)
  632. if err != nil {
  633. t.Fatal(err)
  634. }
  635. stream, err := c.StreamingRead(context.Background(), request)
  636. if err != nil {
  637. t.Fatal(err)
  638. }
  639. resp, err := stream.Recv()
  640. if st, ok := gstatus.FromError(err); !ok {
  641. t.Errorf("got error %v, expected grpc error", err)
  642. } else if c := st.Code(); c != errCode {
  643. t.Errorf("got error code %q, want %q", c, errCode)
  644. }
  645. _ = resp
  646. }
  647. func TestSpannerBeginTransaction(t *testing.T) {
  648. var id []byte = []byte("27")
  649. var expectedResponse = &spannerpb.Transaction{
  650. Id: id,
  651. }
  652. mockSpanner.err = nil
  653. mockSpanner.reqs = nil
  654. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  655. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  656. var options *spannerpb.TransactionOptions = &spannerpb.TransactionOptions{}
  657. var request = &spannerpb.BeginTransactionRequest{
  658. Session: formattedSession,
  659. Options: options,
  660. }
  661. c, err := NewClient(context.Background(), clientOpt)
  662. if err != nil {
  663. t.Fatal(err)
  664. }
  665. resp, err := c.BeginTransaction(context.Background(), request)
  666. if err != nil {
  667. t.Fatal(err)
  668. }
  669. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  670. t.Errorf("wrong request %q, want %q", got, want)
  671. }
  672. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  673. t.Errorf("wrong response %q, want %q)", got, want)
  674. }
  675. }
  676. func TestSpannerBeginTransactionError(t *testing.T) {
  677. errCode := codes.PermissionDenied
  678. mockSpanner.err = gstatus.Error(errCode, "test error")
  679. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  680. var options *spannerpb.TransactionOptions = &spannerpb.TransactionOptions{}
  681. var request = &spannerpb.BeginTransactionRequest{
  682. Session: formattedSession,
  683. Options: options,
  684. }
  685. c, err := NewClient(context.Background(), clientOpt)
  686. if err != nil {
  687. t.Fatal(err)
  688. }
  689. resp, err := c.BeginTransaction(context.Background(), request)
  690. if st, ok := gstatus.FromError(err); !ok {
  691. t.Errorf("got error %v, expected grpc error", err)
  692. } else if c := st.Code(); c != errCode {
  693. t.Errorf("got error code %q, want %q", c, errCode)
  694. }
  695. _ = resp
  696. }
  697. func TestSpannerCommit(t *testing.T) {
  698. var expectedResponse *spannerpb.CommitResponse = &spannerpb.CommitResponse{}
  699. mockSpanner.err = nil
  700. mockSpanner.reqs = nil
  701. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  702. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  703. var mutations []*spannerpb.Mutation = nil
  704. var request = &spannerpb.CommitRequest{
  705. Session: formattedSession,
  706. Mutations: mutations,
  707. }
  708. c, err := NewClient(context.Background(), clientOpt)
  709. if err != nil {
  710. t.Fatal(err)
  711. }
  712. resp, err := c.Commit(context.Background(), request)
  713. if err != nil {
  714. t.Fatal(err)
  715. }
  716. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  717. t.Errorf("wrong request %q, want %q", got, want)
  718. }
  719. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  720. t.Errorf("wrong response %q, want %q)", got, want)
  721. }
  722. }
  723. func TestSpannerCommitError(t *testing.T) {
  724. errCode := codes.PermissionDenied
  725. mockSpanner.err = gstatus.Error(errCode, "test error")
  726. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  727. var mutations []*spannerpb.Mutation = nil
  728. var request = &spannerpb.CommitRequest{
  729. Session: formattedSession,
  730. Mutations: mutations,
  731. }
  732. c, err := NewClient(context.Background(), clientOpt)
  733. if err != nil {
  734. t.Fatal(err)
  735. }
  736. resp, err := c.Commit(context.Background(), request)
  737. if st, ok := gstatus.FromError(err); !ok {
  738. t.Errorf("got error %v, expected grpc error", err)
  739. } else if c := st.Code(); c != errCode {
  740. t.Errorf("got error code %q, want %q", c, errCode)
  741. }
  742. _ = resp
  743. }
  744. func TestSpannerRollback(t *testing.T) {
  745. var expectedResponse *emptypb.Empty = &emptypb.Empty{}
  746. mockSpanner.err = nil
  747. mockSpanner.reqs = nil
  748. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  749. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  750. var transactionId []byte = []byte("28")
  751. var request = &spannerpb.RollbackRequest{
  752. Session: formattedSession,
  753. TransactionId: transactionId,
  754. }
  755. c, err := NewClient(context.Background(), clientOpt)
  756. if err != nil {
  757. t.Fatal(err)
  758. }
  759. err = c.Rollback(context.Background(), request)
  760. if err != nil {
  761. t.Fatal(err)
  762. }
  763. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  764. t.Errorf("wrong request %q, want %q", got, want)
  765. }
  766. }
  767. func TestSpannerRollbackError(t *testing.T) {
  768. errCode := codes.PermissionDenied
  769. mockSpanner.err = gstatus.Error(errCode, "test error")
  770. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  771. var transactionId []byte = []byte("28")
  772. var request = &spannerpb.RollbackRequest{
  773. Session: formattedSession,
  774. TransactionId: transactionId,
  775. }
  776. c, err := NewClient(context.Background(), clientOpt)
  777. if err != nil {
  778. t.Fatal(err)
  779. }
  780. err = c.Rollback(context.Background(), request)
  781. if st, ok := gstatus.FromError(err); !ok {
  782. t.Errorf("got error %v, expected grpc error", err)
  783. } else if c := st.Code(); c != errCode {
  784. t.Errorf("got error code %q, want %q", c, errCode)
  785. }
  786. }
  787. func TestSpannerPartitionQuery(t *testing.T) {
  788. var expectedResponse *spannerpb.PartitionResponse = &spannerpb.PartitionResponse{}
  789. mockSpanner.err = nil
  790. mockSpanner.reqs = nil
  791. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  792. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  793. var sql string = "sql114126"
  794. var request = &spannerpb.PartitionQueryRequest{
  795. Session: formattedSession,
  796. Sql: sql,
  797. }
  798. c, err := NewClient(context.Background(), clientOpt)
  799. if err != nil {
  800. t.Fatal(err)
  801. }
  802. resp, err := c.PartitionQuery(context.Background(), request)
  803. if err != nil {
  804. t.Fatal(err)
  805. }
  806. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  807. t.Errorf("wrong request %q, want %q", got, want)
  808. }
  809. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  810. t.Errorf("wrong response %q, want %q)", got, want)
  811. }
  812. }
  813. func TestSpannerPartitionQueryError(t *testing.T) {
  814. errCode := codes.PermissionDenied
  815. mockSpanner.err = gstatus.Error(errCode, "test error")
  816. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  817. var sql string = "sql114126"
  818. var request = &spannerpb.PartitionQueryRequest{
  819. Session: formattedSession,
  820. Sql: sql,
  821. }
  822. c, err := NewClient(context.Background(), clientOpt)
  823. if err != nil {
  824. t.Fatal(err)
  825. }
  826. resp, err := c.PartitionQuery(context.Background(), request)
  827. if st, ok := gstatus.FromError(err); !ok {
  828. t.Errorf("got error %v, expected grpc error", err)
  829. } else if c := st.Code(); c != errCode {
  830. t.Errorf("got error code %q, want %q", c, errCode)
  831. }
  832. _ = resp
  833. }
  834. func TestSpannerPartitionRead(t *testing.T) {
  835. var expectedResponse *spannerpb.PartitionResponse = &spannerpb.PartitionResponse{}
  836. mockSpanner.err = nil
  837. mockSpanner.reqs = nil
  838. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  839. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  840. var table string = "table110115790"
  841. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  842. var request = &spannerpb.PartitionReadRequest{
  843. Session: formattedSession,
  844. Table: table,
  845. KeySet: keySet,
  846. }
  847. c, err := NewClient(context.Background(), clientOpt)
  848. if err != nil {
  849. t.Fatal(err)
  850. }
  851. resp, err := c.PartitionRead(context.Background(), request)
  852. if err != nil {
  853. t.Fatal(err)
  854. }
  855. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  856. t.Errorf("wrong request %q, want %q", got, want)
  857. }
  858. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  859. t.Errorf("wrong response %q, want %q)", got, want)
  860. }
  861. }
  862. func TestSpannerPartitionReadError(t *testing.T) {
  863. errCode := codes.PermissionDenied
  864. mockSpanner.err = gstatus.Error(errCode, "test error")
  865. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  866. var table string = "table110115790"
  867. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  868. var request = &spannerpb.PartitionReadRequest{
  869. Session: formattedSession,
  870. Table: table,
  871. KeySet: keySet,
  872. }
  873. c, err := NewClient(context.Background(), clientOpt)
  874. if err != nil {
  875. t.Fatal(err)
  876. }
  877. resp, err := c.PartitionRead(context.Background(), request)
  878. if st, ok := gstatus.FromError(err); !ok {
  879. t.Errorf("got error %v, expected grpc error", err)
  880. } else if c := st.Code(); c != errCode {
  881. t.Errorf("got error code %q, want %q", c, errCode)
  882. }
  883. _ = resp
  884. }