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.
 
 
 

1166 lines
34 KiB

  1. // Copyright 2019 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. // Code generated by gapic-generator. 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. "context"
  22. "flag"
  23. "fmt"
  24. "io"
  25. "log"
  26. "net"
  27. "os"
  28. "strings"
  29. "testing"
  30. "github.com/golang/protobuf/proto"
  31. "github.com/golang/protobuf/ptypes"
  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) ExecuteBatchDml(ctx context.Context, req *spannerpb.ExecuteBatchDmlRequest) (*spannerpb.ExecuteBatchDmlResponse, 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.ExecuteBatchDmlResponse), nil
  134. }
  135. func (s *mockSpannerServer) Read(ctx context.Context, req *spannerpb.ReadRequest) (*spannerpb.ResultSet, error) {
  136. md, _ := metadata.FromIncomingContext(ctx)
  137. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  138. return nil, 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 nil, s.err
  143. }
  144. return s.resps[0].(*spannerpb.ResultSet), nil
  145. }
  146. func (s *mockSpannerServer) StreamingRead(req *spannerpb.ReadRequest, stream spannerpb.Spanner_StreamingReadServer) error {
  147. md, _ := metadata.FromIncomingContext(stream.Context())
  148. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  149. return fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  150. }
  151. s.reqs = append(s.reqs, req)
  152. if s.err != nil {
  153. return s.err
  154. }
  155. for _, v := range s.resps {
  156. if err := stream.Send(v.(*spannerpb.PartialResultSet)); err != nil {
  157. return err
  158. }
  159. }
  160. return nil
  161. }
  162. func (s *mockSpannerServer) BeginTransaction(ctx context.Context, req *spannerpb.BeginTransactionRequest) (*spannerpb.Transaction, 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.Transaction), nil
  172. }
  173. func (s *mockSpannerServer) Commit(ctx context.Context, req *spannerpb.CommitRequest) (*spannerpb.CommitResponse, 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].(*spannerpb.CommitResponse), nil
  183. }
  184. func (s *mockSpannerServer) Rollback(ctx context.Context, req *spannerpb.RollbackRequest) (*emptypb.Empty, 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].(*emptypb.Empty), nil
  194. }
  195. func (s *mockSpannerServer) PartitionQuery(ctx context.Context, req *spannerpb.PartitionQueryRequest) (*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. func (s *mockSpannerServer) PartitionRead(ctx context.Context, req *spannerpb.PartitionReadRequest) (*spannerpb.PartitionResponse, error) {
  207. md, _ := metadata.FromIncomingContext(ctx)
  208. if xg := md["x-goog-api-client"]; len(xg) == 0 || !strings.Contains(xg[0], "gl-go/") {
  209. return nil, fmt.Errorf("x-goog-api-client = %v, expected gl-go key", xg)
  210. }
  211. s.reqs = append(s.reqs, req)
  212. if s.err != nil {
  213. return nil, s.err
  214. }
  215. return s.resps[0].(*spannerpb.PartitionResponse), nil
  216. }
  217. // clientOpt is the option tests should use to connect to the test server.
  218. // It is initialized by TestMain.
  219. var clientOpt option.ClientOption
  220. var (
  221. mockSpanner mockSpannerServer
  222. )
  223. func TestMain(m *testing.M) {
  224. flag.Parse()
  225. serv := grpc.NewServer()
  226. spannerpb.RegisterSpannerServer(serv, &mockSpanner)
  227. lis, err := net.Listen("tcp", "localhost:0")
  228. if err != nil {
  229. log.Fatal(err)
  230. }
  231. go serv.Serve(lis)
  232. conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure())
  233. if err != nil {
  234. log.Fatal(err)
  235. }
  236. clientOpt = option.WithGRPCConn(conn)
  237. os.Exit(m.Run())
  238. }
  239. func TestSpannerCreateSession(t *testing.T) {
  240. var name string = "name3373707"
  241. var expectedResponse = &spannerpb.Session{
  242. Name: name,
  243. }
  244. mockSpanner.err = nil
  245. mockSpanner.reqs = nil
  246. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  247. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  248. var request = &spannerpb.CreateSessionRequest{
  249. Database: formattedDatabase,
  250. }
  251. c, err := NewClient(context.Background(), clientOpt)
  252. if err != nil {
  253. t.Fatal(err)
  254. }
  255. resp, err := c.CreateSession(context.Background(), request)
  256. if err != nil {
  257. t.Fatal(err)
  258. }
  259. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  260. t.Errorf("wrong request %q, want %q", got, want)
  261. }
  262. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  263. t.Errorf("wrong response %q, want %q)", got, want)
  264. }
  265. }
  266. func TestSpannerCreateSessionError(t *testing.T) {
  267. errCode := codes.PermissionDenied
  268. mockSpanner.err = gstatus.Error(errCode, "test error")
  269. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  270. var request = &spannerpb.CreateSessionRequest{
  271. Database: formattedDatabase,
  272. }
  273. c, err := NewClient(context.Background(), clientOpt)
  274. if err != nil {
  275. t.Fatal(err)
  276. }
  277. resp, err := c.CreateSession(context.Background(), request)
  278. if st, ok := gstatus.FromError(err); !ok {
  279. t.Errorf("got error %v, expected grpc error", err)
  280. } else if c := st.Code(); c != errCode {
  281. t.Errorf("got error code %q, want %q", c, errCode)
  282. }
  283. _ = resp
  284. }
  285. func TestSpannerGetSession(t *testing.T) {
  286. var name2 string = "name2-1052831874"
  287. var expectedResponse = &spannerpb.Session{
  288. Name: name2,
  289. }
  290. mockSpanner.err = nil
  291. mockSpanner.reqs = nil
  292. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  293. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  294. var request = &spannerpb.GetSessionRequest{
  295. Name: formattedName,
  296. }
  297. c, err := NewClient(context.Background(), clientOpt)
  298. if err != nil {
  299. t.Fatal(err)
  300. }
  301. resp, err := c.GetSession(context.Background(), request)
  302. if err != nil {
  303. t.Fatal(err)
  304. }
  305. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  306. t.Errorf("wrong request %q, want %q", got, want)
  307. }
  308. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  309. t.Errorf("wrong response %q, want %q)", got, want)
  310. }
  311. }
  312. func TestSpannerGetSessionError(t *testing.T) {
  313. errCode := codes.PermissionDenied
  314. mockSpanner.err = gstatus.Error(errCode, "test error")
  315. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  316. var request = &spannerpb.GetSessionRequest{
  317. Name: formattedName,
  318. }
  319. c, err := NewClient(context.Background(), clientOpt)
  320. if err != nil {
  321. t.Fatal(err)
  322. }
  323. resp, err := c.GetSession(context.Background(), request)
  324. if st, ok := gstatus.FromError(err); !ok {
  325. t.Errorf("got error %v, expected grpc error", err)
  326. } else if c := st.Code(); c != errCode {
  327. t.Errorf("got error code %q, want %q", c, errCode)
  328. }
  329. _ = resp
  330. }
  331. func TestSpannerListSessions(t *testing.T) {
  332. var nextPageToken string = ""
  333. var sessionsElement *spannerpb.Session = &spannerpb.Session{}
  334. var sessions = []*spannerpb.Session{sessionsElement}
  335. var expectedResponse = &spannerpb.ListSessionsResponse{
  336. NextPageToken: nextPageToken,
  337. Sessions: sessions,
  338. }
  339. mockSpanner.err = nil
  340. mockSpanner.reqs = nil
  341. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  342. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  343. var request = &spannerpb.ListSessionsRequest{
  344. Database: formattedDatabase,
  345. }
  346. c, err := NewClient(context.Background(), clientOpt)
  347. if err != nil {
  348. t.Fatal(err)
  349. }
  350. resp, err := c.ListSessions(context.Background(), request).Next()
  351. if err != nil {
  352. t.Fatal(err)
  353. }
  354. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  355. t.Errorf("wrong request %q, want %q", got, want)
  356. }
  357. want := (interface{})(expectedResponse.Sessions[0])
  358. got := (interface{})(resp)
  359. var ok bool
  360. switch want := (want).(type) {
  361. case proto.Message:
  362. ok = proto.Equal(want, got.(proto.Message))
  363. default:
  364. ok = want == got
  365. }
  366. if !ok {
  367. t.Errorf("wrong response %q, want %q)", got, want)
  368. }
  369. }
  370. func TestSpannerListSessionsError(t *testing.T) {
  371. errCode := codes.PermissionDenied
  372. mockSpanner.err = gstatus.Error(errCode, "test error")
  373. var formattedDatabase string = fmt.Sprintf("projects/%s/instances/%s/databases/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]")
  374. var request = &spannerpb.ListSessionsRequest{
  375. Database: formattedDatabase,
  376. }
  377. c, err := NewClient(context.Background(), clientOpt)
  378. if err != nil {
  379. t.Fatal(err)
  380. }
  381. resp, err := c.ListSessions(context.Background(), request).Next()
  382. if st, ok := gstatus.FromError(err); !ok {
  383. t.Errorf("got error %v, expected grpc error", err)
  384. } else if c := st.Code(); c != errCode {
  385. t.Errorf("got error code %q, want %q", c, errCode)
  386. }
  387. _ = resp
  388. }
  389. func TestSpannerDeleteSession(t *testing.T) {
  390. var expectedResponse *emptypb.Empty = &emptypb.Empty{}
  391. mockSpanner.err = nil
  392. mockSpanner.reqs = nil
  393. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  394. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  395. var request = &spannerpb.DeleteSessionRequest{
  396. Name: formattedName,
  397. }
  398. c, err := NewClient(context.Background(), clientOpt)
  399. if err != nil {
  400. t.Fatal(err)
  401. }
  402. err = c.DeleteSession(context.Background(), request)
  403. if err != nil {
  404. t.Fatal(err)
  405. }
  406. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  407. t.Errorf("wrong request %q, want %q", got, want)
  408. }
  409. }
  410. func TestSpannerDeleteSessionError(t *testing.T) {
  411. errCode := codes.PermissionDenied
  412. mockSpanner.err = gstatus.Error(errCode, "test error")
  413. var formattedName string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  414. var request = &spannerpb.DeleteSessionRequest{
  415. Name: formattedName,
  416. }
  417. c, err := NewClient(context.Background(), clientOpt)
  418. if err != nil {
  419. t.Fatal(err)
  420. }
  421. err = c.DeleteSession(context.Background(), request)
  422. if st, ok := gstatus.FromError(err); !ok {
  423. t.Errorf("got error %v, expected grpc error", err)
  424. } else if c := st.Code(); c != errCode {
  425. t.Errorf("got error code %q, want %q", c, errCode)
  426. }
  427. }
  428. func TestSpannerExecuteSql(t *testing.T) {
  429. var expectedResponse *spannerpb.ResultSet = &spannerpb.ResultSet{}
  430. mockSpanner.err = nil
  431. mockSpanner.reqs = nil
  432. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  433. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  434. var sql string = "sql114126"
  435. var request = &spannerpb.ExecuteSqlRequest{
  436. Session: formattedSession,
  437. Sql: sql,
  438. }
  439. c, err := NewClient(context.Background(), clientOpt)
  440. if err != nil {
  441. t.Fatal(err)
  442. }
  443. resp, err := c.ExecuteSql(context.Background(), request)
  444. if err != nil {
  445. t.Fatal(err)
  446. }
  447. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  448. t.Errorf("wrong request %q, want %q", got, want)
  449. }
  450. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  451. t.Errorf("wrong response %q, want %q)", got, want)
  452. }
  453. }
  454. func TestSpannerExecuteSqlError(t *testing.T) {
  455. errCode := codes.PermissionDenied
  456. mockSpanner.err = gstatus.Error(errCode, "test error")
  457. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  458. var sql string = "sql114126"
  459. var request = &spannerpb.ExecuteSqlRequest{
  460. Session: formattedSession,
  461. Sql: sql,
  462. }
  463. c, err := NewClient(context.Background(), clientOpt)
  464. if err != nil {
  465. t.Fatal(err)
  466. }
  467. resp, err := c.ExecuteSql(context.Background(), request)
  468. if st, ok := gstatus.FromError(err); !ok {
  469. t.Errorf("got error %v, expected grpc error", err)
  470. } else if c := st.Code(); c != errCode {
  471. t.Errorf("got error code %q, want %q", c, errCode)
  472. }
  473. _ = resp
  474. }
  475. func TestSpannerExecuteStreamingSql(t *testing.T) {
  476. var chunkedValue bool = true
  477. var resumeToken []byte = []byte("103")
  478. var expectedResponse = &spannerpb.PartialResultSet{
  479. ChunkedValue: chunkedValue,
  480. ResumeToken: resumeToken,
  481. }
  482. mockSpanner.err = nil
  483. mockSpanner.reqs = nil
  484. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  485. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  486. var sql string = "sql114126"
  487. var request = &spannerpb.ExecuteSqlRequest{
  488. Session: formattedSession,
  489. Sql: sql,
  490. }
  491. c, err := NewClient(context.Background(), clientOpt)
  492. if err != nil {
  493. t.Fatal(err)
  494. }
  495. stream, err := c.ExecuteStreamingSql(context.Background(), request)
  496. if err != nil {
  497. t.Fatal(err)
  498. }
  499. resp, err := stream.Recv()
  500. if err != nil {
  501. t.Fatal(err)
  502. }
  503. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  504. t.Errorf("wrong request %q, want %q", got, want)
  505. }
  506. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  507. t.Errorf("wrong response %q, want %q)", got, want)
  508. }
  509. }
  510. func TestSpannerExecuteStreamingSqlError(t *testing.T) {
  511. errCode := codes.PermissionDenied
  512. mockSpanner.err = gstatus.Error(errCode, "test error")
  513. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  514. var sql string = "sql114126"
  515. var request = &spannerpb.ExecuteSqlRequest{
  516. Session: formattedSession,
  517. Sql: sql,
  518. }
  519. c, err := NewClient(context.Background(), clientOpt)
  520. if err != nil {
  521. t.Fatal(err)
  522. }
  523. stream, err := c.ExecuteStreamingSql(context.Background(), request)
  524. if err != nil {
  525. t.Fatal(err)
  526. }
  527. resp, err := stream.Recv()
  528. if st, ok := gstatus.FromError(err); !ok {
  529. t.Errorf("got error %v, expected grpc error", err)
  530. } else if c := st.Code(); c != errCode {
  531. t.Errorf("got error code %q, want %q", c, errCode)
  532. }
  533. _ = resp
  534. }
  535. func TestSpannerExecuteBatchDml(t *testing.T) {
  536. var expectedResponse *spannerpb.ExecuteBatchDmlResponse = &spannerpb.ExecuteBatchDmlResponse{}
  537. mockSpanner.err = nil
  538. mockSpanner.reqs = nil
  539. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  540. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  541. var transaction *spannerpb.TransactionSelector = &spannerpb.TransactionSelector{}
  542. var statements []*spannerpb.ExecuteBatchDmlRequest_Statement = nil
  543. var seqno int64 = 109325920
  544. var request = &spannerpb.ExecuteBatchDmlRequest{
  545. Session: formattedSession,
  546. Transaction: transaction,
  547. Statements: statements,
  548. Seqno: seqno,
  549. }
  550. c, err := NewClient(context.Background(), clientOpt)
  551. if err != nil {
  552. t.Fatal(err)
  553. }
  554. resp, err := c.ExecuteBatchDml(context.Background(), request)
  555. if err != nil {
  556. t.Fatal(err)
  557. }
  558. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  559. t.Errorf("wrong request %q, want %q", got, want)
  560. }
  561. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  562. t.Errorf("wrong response %q, want %q)", got, want)
  563. }
  564. }
  565. func TestSpannerExecuteBatchDmlError(t *testing.T) {
  566. errCode := codes.PermissionDenied
  567. mockSpanner.err = gstatus.Error(errCode, "test error")
  568. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  569. var transaction *spannerpb.TransactionSelector = &spannerpb.TransactionSelector{}
  570. var statements []*spannerpb.ExecuteBatchDmlRequest_Statement = nil
  571. var seqno int64 = 109325920
  572. var request = &spannerpb.ExecuteBatchDmlRequest{
  573. Session: formattedSession,
  574. Transaction: transaction,
  575. Statements: statements,
  576. Seqno: seqno,
  577. }
  578. c, err := NewClient(context.Background(), clientOpt)
  579. if err != nil {
  580. t.Fatal(err)
  581. }
  582. resp, err := c.ExecuteBatchDml(context.Background(), request)
  583. if st, ok := gstatus.FromError(err); !ok {
  584. t.Errorf("got error %v, expected grpc error", err)
  585. } else if c := st.Code(); c != errCode {
  586. t.Errorf("got error code %q, want %q", c, errCode)
  587. }
  588. _ = resp
  589. }
  590. func TestSpannerRead(t *testing.T) {
  591. var expectedResponse *spannerpb.ResultSet = &spannerpb.ResultSet{}
  592. mockSpanner.err = nil
  593. mockSpanner.reqs = nil
  594. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  595. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  596. var table string = "table110115790"
  597. var columns []string = nil
  598. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  599. var request = &spannerpb.ReadRequest{
  600. Session: formattedSession,
  601. Table: table,
  602. Columns: columns,
  603. KeySet: keySet,
  604. }
  605. c, err := NewClient(context.Background(), clientOpt)
  606. if err != nil {
  607. t.Fatal(err)
  608. }
  609. resp, err := c.Read(context.Background(), request)
  610. if err != nil {
  611. t.Fatal(err)
  612. }
  613. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  614. t.Errorf("wrong request %q, want %q", got, want)
  615. }
  616. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  617. t.Errorf("wrong response %q, want %q)", got, want)
  618. }
  619. }
  620. func TestSpannerReadError(t *testing.T) {
  621. errCode := codes.PermissionDenied
  622. mockSpanner.err = gstatus.Error(errCode, "test error")
  623. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  624. var table string = "table110115790"
  625. var columns []string = nil
  626. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  627. var request = &spannerpb.ReadRequest{
  628. Session: formattedSession,
  629. Table: table,
  630. Columns: columns,
  631. KeySet: keySet,
  632. }
  633. c, err := NewClient(context.Background(), clientOpt)
  634. if err != nil {
  635. t.Fatal(err)
  636. }
  637. resp, err := c.Read(context.Background(), request)
  638. if st, ok := gstatus.FromError(err); !ok {
  639. t.Errorf("got error %v, expected grpc error", err)
  640. } else if c := st.Code(); c != errCode {
  641. t.Errorf("got error code %q, want %q", c, errCode)
  642. }
  643. _ = resp
  644. }
  645. func TestSpannerStreamingRead(t *testing.T) {
  646. var chunkedValue bool = true
  647. var resumeToken []byte = []byte("103")
  648. var expectedResponse = &spannerpb.PartialResultSet{
  649. ChunkedValue: chunkedValue,
  650. ResumeToken: resumeToken,
  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 table string = "table110115790"
  657. var columns []string = nil
  658. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  659. var request = &spannerpb.ReadRequest{
  660. Session: formattedSession,
  661. Table: table,
  662. Columns: columns,
  663. KeySet: keySet,
  664. }
  665. c, err := NewClient(context.Background(), clientOpt)
  666. if err != nil {
  667. t.Fatal(err)
  668. }
  669. stream, err := c.StreamingRead(context.Background(), request)
  670. if err != nil {
  671. t.Fatal(err)
  672. }
  673. resp, err := stream.Recv()
  674. if err != nil {
  675. t.Fatal(err)
  676. }
  677. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  678. t.Errorf("wrong request %q, want %q", got, want)
  679. }
  680. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  681. t.Errorf("wrong response %q, want %q)", got, want)
  682. }
  683. }
  684. func TestSpannerStreamingReadError(t *testing.T) {
  685. errCode := codes.PermissionDenied
  686. mockSpanner.err = gstatus.Error(errCode, "test error")
  687. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  688. var table string = "table110115790"
  689. var columns []string = nil
  690. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  691. var request = &spannerpb.ReadRequest{
  692. Session: formattedSession,
  693. Table: table,
  694. Columns: columns,
  695. KeySet: keySet,
  696. }
  697. c, err := NewClient(context.Background(), clientOpt)
  698. if err != nil {
  699. t.Fatal(err)
  700. }
  701. stream, err := c.StreamingRead(context.Background(), request)
  702. if err != nil {
  703. t.Fatal(err)
  704. }
  705. resp, err := stream.Recv()
  706. if st, ok := gstatus.FromError(err); !ok {
  707. t.Errorf("got error %v, expected grpc error", err)
  708. } else if c := st.Code(); c != errCode {
  709. t.Errorf("got error code %q, want %q", c, errCode)
  710. }
  711. _ = resp
  712. }
  713. func TestSpannerBeginTransaction(t *testing.T) {
  714. var id []byte = []byte("27")
  715. var expectedResponse = &spannerpb.Transaction{
  716. Id: id,
  717. }
  718. mockSpanner.err = nil
  719. mockSpanner.reqs = nil
  720. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  721. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  722. var options *spannerpb.TransactionOptions = &spannerpb.TransactionOptions{}
  723. var request = &spannerpb.BeginTransactionRequest{
  724. Session: formattedSession,
  725. Options: options,
  726. }
  727. c, err := NewClient(context.Background(), clientOpt)
  728. if err != nil {
  729. t.Fatal(err)
  730. }
  731. resp, err := c.BeginTransaction(context.Background(), request)
  732. if err != nil {
  733. t.Fatal(err)
  734. }
  735. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  736. t.Errorf("wrong request %q, want %q", got, want)
  737. }
  738. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  739. t.Errorf("wrong response %q, want %q)", got, want)
  740. }
  741. }
  742. func TestSpannerBeginTransactionError(t *testing.T) {
  743. errCode := codes.PermissionDenied
  744. mockSpanner.err = gstatus.Error(errCode, "test error")
  745. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  746. var options *spannerpb.TransactionOptions = &spannerpb.TransactionOptions{}
  747. var request = &spannerpb.BeginTransactionRequest{
  748. Session: formattedSession,
  749. Options: options,
  750. }
  751. c, err := NewClient(context.Background(), clientOpt)
  752. if err != nil {
  753. t.Fatal(err)
  754. }
  755. resp, err := c.BeginTransaction(context.Background(), request)
  756. if st, ok := gstatus.FromError(err); !ok {
  757. t.Errorf("got error %v, expected grpc error", err)
  758. } else if c := st.Code(); c != errCode {
  759. t.Errorf("got error code %q, want %q", c, errCode)
  760. }
  761. _ = resp
  762. }
  763. func TestSpannerCommit(t *testing.T) {
  764. var expectedResponse *spannerpb.CommitResponse = &spannerpb.CommitResponse{}
  765. mockSpanner.err = nil
  766. mockSpanner.reqs = nil
  767. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  768. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  769. var mutations []*spannerpb.Mutation = nil
  770. var request = &spannerpb.CommitRequest{
  771. Session: formattedSession,
  772. Mutations: mutations,
  773. }
  774. c, err := NewClient(context.Background(), clientOpt)
  775. if err != nil {
  776. t.Fatal(err)
  777. }
  778. resp, err := c.Commit(context.Background(), request)
  779. if err != nil {
  780. t.Fatal(err)
  781. }
  782. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  783. t.Errorf("wrong request %q, want %q", got, want)
  784. }
  785. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  786. t.Errorf("wrong response %q, want %q)", got, want)
  787. }
  788. }
  789. func TestSpannerCommitError(t *testing.T) {
  790. errCode := codes.PermissionDenied
  791. mockSpanner.err = gstatus.Error(errCode, "test error")
  792. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  793. var mutations []*spannerpb.Mutation = nil
  794. var request = &spannerpb.CommitRequest{
  795. Session: formattedSession,
  796. Mutations: mutations,
  797. }
  798. c, err := NewClient(context.Background(), clientOpt)
  799. if err != nil {
  800. t.Fatal(err)
  801. }
  802. resp, err := c.Commit(context.Background(), request)
  803. if st, ok := gstatus.FromError(err); !ok {
  804. t.Errorf("got error %v, expected grpc error", err)
  805. } else if c := st.Code(); c != errCode {
  806. t.Errorf("got error code %q, want %q", c, errCode)
  807. }
  808. _ = resp
  809. }
  810. func TestSpannerRollback(t *testing.T) {
  811. var expectedResponse *emptypb.Empty = &emptypb.Empty{}
  812. mockSpanner.err = nil
  813. mockSpanner.reqs = nil
  814. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  815. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  816. var transactionId []byte = []byte("28")
  817. var request = &spannerpb.RollbackRequest{
  818. Session: formattedSession,
  819. TransactionId: transactionId,
  820. }
  821. c, err := NewClient(context.Background(), clientOpt)
  822. if err != nil {
  823. t.Fatal(err)
  824. }
  825. err = c.Rollback(context.Background(), request)
  826. if err != nil {
  827. t.Fatal(err)
  828. }
  829. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  830. t.Errorf("wrong request %q, want %q", got, want)
  831. }
  832. }
  833. func TestSpannerRollbackError(t *testing.T) {
  834. errCode := codes.PermissionDenied
  835. mockSpanner.err = gstatus.Error(errCode, "test error")
  836. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  837. var transactionId []byte = []byte("28")
  838. var request = &spannerpb.RollbackRequest{
  839. Session: formattedSession,
  840. TransactionId: transactionId,
  841. }
  842. c, err := NewClient(context.Background(), clientOpt)
  843. if err != nil {
  844. t.Fatal(err)
  845. }
  846. err = c.Rollback(context.Background(), request)
  847. if st, ok := gstatus.FromError(err); !ok {
  848. t.Errorf("got error %v, expected grpc error", err)
  849. } else if c := st.Code(); c != errCode {
  850. t.Errorf("got error code %q, want %q", c, errCode)
  851. }
  852. }
  853. func TestSpannerPartitionQuery(t *testing.T) {
  854. var expectedResponse *spannerpb.PartitionResponse = &spannerpb.PartitionResponse{}
  855. mockSpanner.err = nil
  856. mockSpanner.reqs = nil
  857. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  858. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  859. var sql string = "sql114126"
  860. var request = &spannerpb.PartitionQueryRequest{
  861. Session: formattedSession,
  862. Sql: sql,
  863. }
  864. c, err := NewClient(context.Background(), clientOpt)
  865. if err != nil {
  866. t.Fatal(err)
  867. }
  868. resp, err := c.PartitionQuery(context.Background(), request)
  869. if err != nil {
  870. t.Fatal(err)
  871. }
  872. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  873. t.Errorf("wrong request %q, want %q", got, want)
  874. }
  875. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  876. t.Errorf("wrong response %q, want %q)", got, want)
  877. }
  878. }
  879. func TestSpannerPartitionQueryError(t *testing.T) {
  880. errCode := codes.PermissionDenied
  881. mockSpanner.err = gstatus.Error(errCode, "test error")
  882. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  883. var sql string = "sql114126"
  884. var request = &spannerpb.PartitionQueryRequest{
  885. Session: formattedSession,
  886. Sql: sql,
  887. }
  888. c, err := NewClient(context.Background(), clientOpt)
  889. if err != nil {
  890. t.Fatal(err)
  891. }
  892. resp, err := c.PartitionQuery(context.Background(), request)
  893. if st, ok := gstatus.FromError(err); !ok {
  894. t.Errorf("got error %v, expected grpc error", err)
  895. } else if c := st.Code(); c != errCode {
  896. t.Errorf("got error code %q, want %q", c, errCode)
  897. }
  898. _ = resp
  899. }
  900. func TestSpannerPartitionRead(t *testing.T) {
  901. var expectedResponse *spannerpb.PartitionResponse = &spannerpb.PartitionResponse{}
  902. mockSpanner.err = nil
  903. mockSpanner.reqs = nil
  904. mockSpanner.resps = append(mockSpanner.resps[:0], expectedResponse)
  905. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  906. var table string = "table110115790"
  907. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  908. var request = &spannerpb.PartitionReadRequest{
  909. Session: formattedSession,
  910. Table: table,
  911. KeySet: keySet,
  912. }
  913. c, err := NewClient(context.Background(), clientOpt)
  914. if err != nil {
  915. t.Fatal(err)
  916. }
  917. resp, err := c.PartitionRead(context.Background(), request)
  918. if err != nil {
  919. t.Fatal(err)
  920. }
  921. if want, got := request, mockSpanner.reqs[0]; !proto.Equal(want, got) {
  922. t.Errorf("wrong request %q, want %q", got, want)
  923. }
  924. if want, got := expectedResponse, resp; !proto.Equal(want, got) {
  925. t.Errorf("wrong response %q, want %q)", got, want)
  926. }
  927. }
  928. func TestSpannerPartitionReadError(t *testing.T) {
  929. errCode := codes.PermissionDenied
  930. mockSpanner.err = gstatus.Error(errCode, "test error")
  931. var formattedSession string = fmt.Sprintf("projects/%s/instances/%s/databases/%s/sessions/%s", "[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
  932. var table string = "table110115790"
  933. var keySet *spannerpb.KeySet = &spannerpb.KeySet{}
  934. var request = &spannerpb.PartitionReadRequest{
  935. Session: formattedSession,
  936. Table: table,
  937. KeySet: keySet,
  938. }
  939. c, err := NewClient(context.Background(), clientOpt)
  940. if err != nil {
  941. t.Fatal(err)
  942. }
  943. resp, err := c.PartitionRead(context.Background(), request)
  944. if st, ok := gstatus.FromError(err); !ok {
  945. t.Errorf("got error %v, expected grpc error", err)
  946. } else if c := st.Code(); c != errCode {
  947. t.Errorf("got error code %q, want %q", c, errCode)
  948. }
  949. _ = resp
  950. }