Skip to content

Commit c39594f

Browse files
committed
feat: add --version flag
1 parent e555b0f commit c39594f

File tree

6 files changed

+92
-11
lines changed

6 files changed

+92
-11
lines changed

cmd/root.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package cmd
1616

1717
import (
1818
"context"
19+
_ "embed"
1920
"errors"
2021
"fmt"
2122
"net"
@@ -31,6 +32,11 @@ import (
3132
"github.com/spf13/cobra"
3233
)
3334

35+
var (
36+
versionString = "2.0.0-dev"
37+
userAgent = "cloud-sql-auth-proxy/" + strings.TrimSpace(versionString)
38+
)
39+
3440
// Execute adds all child commands to the root command and sets flags appropriately.
3541
// This is called by main.main(). It only needs to happen once to the rootCmd.
3642
func Execute() {
@@ -56,8 +62,9 @@ func NewCommand() *Command {
5662
}
5763

5864
cmd := &cobra.Command{
59-
Use: "cloud_sql_proxy instance_connection_name...",
60-
Short: "cloud_sql_proxy provides a secure way to authorize connections to Cloud SQL.",
65+
Use: "cloud_sql_proxy instance_connection_name...",
66+
Version: strings.TrimSpace(versionString),
67+
Short: "cloud_sql_proxy provides a secure way to authorize connections to Cloud SQL.",
6168
Long: `The Cloud SQL Auth proxy provides IAM-based authorization and encryption when
6269
connecting to Cloud SQL instances. It listens on a local port and forwards connections
6370
to your instance's IP address, providing a secure connection without having to manage
@@ -178,7 +185,8 @@ func runSignalWrapper(cmd *Command) error {
178185
startCh := make(chan *proxy.Client)
179186
go func() {
180187
defer close(startCh)
181-
d, err := cloudsqlconn.NewDialer(ctx, cmd.conf.DialerOpts()...)
188+
opts := append(cmd.conf.DialerOpts(), cloudsqlconn.WithUserAgent(userAgent))
189+
d, err := cloudsqlconn.NewDialer(ctx, opts...)
182190
if err != nil {
183191
shutdownCh <- fmt.Errorf("error initializing dialer: %v", err)
184192
return

go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/GoogleCloudPlatform/cloudsql-proxy/v2
33
go 1.17
44

55
require (
6-
cloud.google.com/go/cloudsqlconn v0.2.1-0.20220317212813-c79136972083
6+
cloud.google.com/go/cloudsqlconn v0.2.1-0.20220401153611-87e713b37755
77
cloud.google.com/go/compute v1.5.0
88
github.com/GoogleCloudPlatform/cloudsql-proxy v1.29.0
99
github.com/coreos/go-systemd/v22 v22.3.2
@@ -15,11 +15,11 @@ require (
1515
github.com/lib/pq v1.10.4
1616
github.com/spf13/cobra v1.2.1
1717
go.uber.org/zap v1.21.0
18-
golang.org/x/net v0.0.0-20220225172249-27dd8689420f
18+
golang.org/x/net v0.0.0-20220325170049-de3da57026de
1919
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a
2020
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886
2121
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65
22-
google.golang.org/api v0.73.0
22+
google.golang.org/api v0.74.0
2323
)
2424

2525
require (
@@ -28,7 +28,7 @@ require (
2828
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
2929
github.com/golang/protobuf v1.5.2 // indirect
3030
github.com/google/uuid v1.3.0 // indirect
31-
github.com/googleapis/gax-go/v2 v2.1.1 // indirect
31+
github.com/googleapis/gax-go/v2 v2.2.0 // indirect
3232
github.com/inconshreveable/mousetrap v1.0.0 // indirect
3333
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
3434
github.com/jackc/pgconn v1.11.0 // indirect
@@ -44,7 +44,7 @@ require (
4444
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
4545
golang.org/x/text v0.3.7 // indirect
4646
google.golang.org/appengine v1.6.7 // indirect
47-
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 // indirect
47+
google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 // indirect
4848
google.golang.org/grpc v1.45.0 // indirect
49-
google.golang.org/protobuf v1.27.1 // indirect
49+
google.golang.org/protobuf v1.28.0 // indirect
5050
)

go.sum

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g
3636
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
3737
cloud.google.com/go/cloudsqlconn v0.2.1-0.20220317212813-c79136972083 h1:wD6r6mYz97+/iS4OuX1tf+8WIRFGQN/nPqFl8/gPQzI=
3838
cloud.google.com/go/cloudsqlconn v0.2.1-0.20220317212813-c79136972083/go.mod h1:7JeNiyYmQKqNFJ+HMceyAiYra2KRVowsLZqPmu1IMe0=
39+
cloud.google.com/go/cloudsqlconn v0.2.1-0.20220401153611-87e713b37755 h1:74ZeQyxqrRSBoytWhFCDqScGNuF4PpCh7fe+BR9eX/I=
40+
cloud.google.com/go/cloudsqlconn v0.2.1-0.20220401153611-87e713b37755/go.mod h1:y/ogms5BQof7JguwhcHsTPfskl7BFxXI8lvyXCQu/5E=
3941
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
4042
cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw=
4143
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
@@ -208,6 +210,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
208210
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
209211
github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU=
210212
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
213+
github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE=
214+
github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=
211215
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
212216
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
213217
github.com/hanwen/go-fuse v1.0.0 h1:GxS9Zrn6c35/BnfiVsZVWmsG803xwE7eVRDvcf/BEVc=
@@ -506,6 +510,8 @@ golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qx
506510
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
507511
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
508512
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
513+
golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc=
514+
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
509515
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
510516
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
511517
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -523,6 +529,7 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ
523529
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
524530
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
525531
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
532+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
526533
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=
527534
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
528535
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -725,8 +732,11 @@ google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oY
725732
google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
726733
google.golang.org/api v0.68.0/go.mod h1:sOM8pTpwgflXRhz+oC8H2Dr+UcbMqkPPWNJo88Q7TH8=
727734
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
735+
google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
728736
google.golang.org/api v0.73.0 h1:O9bThUh35K1rvUrQwTUQ1eqLC/IYyzUpWavYIO2EXvo=
729737
google.golang.org/api v0.73.0/go.mod h1:lbd/q6BRFJbdpV6OUCXstVeiI5mL/d3/WifG7iNKnjI=
738+
google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE=
739+
google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
730740
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
731741
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
732742
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -802,8 +812,12 @@ google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ6
802812
google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
803813
google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
804814
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
815+
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
805816
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc=
806817
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
818+
google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
819+
google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 h1:HOL66YCI20JvN2hVk6o2YIp9i/3RvzVUz82PqNr7fXw=
820+
google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
807821
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
808822
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
809823
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -848,6 +862,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
848862
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
849863
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
850864
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
865+
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
866+
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
851867
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
852868
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
853869
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=

testsV2/common_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (p *proxyExec) Wait(ctx context.Context) error {
8989
}
9090
}
9191

92-
// Stop sends the pskill signal to the proxy and returns.
92+
// Done returns true if the proxy has exited.
9393
func (p *proxyExec) Done() bool {
9494
select {
9595
case <-p.done:

testsV2/other_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright 2022 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+
15+
// other_test runs various tests that are database agnostic.
16+
package tests
17+
18+
import (
19+
"bufio"
20+
"context"
21+
"os"
22+
"strings"
23+
"testing"
24+
"time"
25+
)
26+
27+
func TestVersion(t *testing.T) {
28+
ctx := context.Background()
29+
30+
data, err := os.ReadFile("../version.txt")
31+
if err != nil {
32+
t.Fatalf("failed to read version.txt: %v", err)
33+
}
34+
want := strings.TrimSpace(string(data))
35+
36+
// Start the proxy
37+
p, err := StartProxy(ctx, "--version")
38+
if err != nil {
39+
t.Fatalf("proxy start failed: %v", err)
40+
}
41+
defer p.Close()
42+
43+
// Assume the proxy should be able to print "version" relatively quickly
44+
ctx, cancel := context.WithTimeout(ctx, 50*time.Millisecond)
45+
defer cancel()
46+
err = p.Wait(ctx)
47+
if err != nil {
48+
t.Fatalf("proxy exited unexpectedly: %v", err)
49+
}
50+
output, err := bufio.NewReader(p.Out).ReadString('\n')
51+
if err != nil {
52+
t.Fatalf("failed to read output from proxy: %v", err)
53+
}
54+
if !strings.Contains(output, want) {
55+
t.Errorf("proxy did not return correct version: want %q, got %q", want, output)
56+
}
57+
}

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.29.1-dev
1+
2.0.0-dev

0 commit comments

Comments
 (0)