Skip to content

Commit 605f5a9

Browse files
authored
Merge pull request #50 from davidz627/feature/identityTests
Added unit tests for identity server, fixed small spec inconsistency
2 parents 35eafe4 + f5d59ac commit 605f5a9

File tree

10 files changed

+105
-28
lines changed

10 files changed

+105
-28
lines changed

Dockerfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
16+
1517
FROM golang:1.10.1-alpine3.7 as builder
1618
WORKDIR /go/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
1719
ADD . .
18-
RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o bin/gce-pd-csi-driver ./cmd/
20+
ARG TAG
21+
RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-X main.vendorVersion='"${TAG:-latest}"' -extldflags "-static"' -o bin/gce-pd-csi-driver ./cmd/
1922

2023
# Start from Google Debian base
2124
FROM gcr.io/google-containers/debian-base-amd64:0.3

Makefile

+7-5
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,23 @@ STAGINGVERSION=latest
1717

1818
PRODIMAGE=gcr.io/google-containers/volume-csi/compute-persistent-disk-csi-driver
1919
PRODVERSION=v0.2.0.alpha
20+
2021
all: gce-pd-driver
2122

2223
gce-pd-driver:
2324
mkdir -p bin
24-
go build -o bin/gce-pd-csi-driver ./cmd/
25+
go build -ldflags "-X main.vendorVersion=${STAGINGVERSION}" -o bin/gce-pd-csi-driver ./cmd/
2526
go test -c sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e -o bin/e2e.test
2627

27-
build-container: gce-pd-driver
28-
docker build -t $(STAGINGIMAGE):$(STAGINGVERSION) .
28+
build-container:
29+
# TODO CHANGE PRODVERSION TO STAGINGVERSION AFTER TESTING
30+
docker build --build-arg TAG=$(STAGINGVERSION) -t $(STAGINGIMAGE):$(STAGINGVERSION) .
2931

3032
push-container: build-container
3133
gcloud docker -- push $(STAGINGIMAGE):$(STAGINGVERSION)
3234

33-
prod-build-container: gce-pd-driver
34-
docker build -t $(PRODIMAGE):$(PRODVERSION)
35+
prod-build-container:
36+
docker build --build-arg TAG=$(PRODVERSION) -t $(PRODIMAGE):$(PRODVERSION)
3537

3638
prod-push-container: prod-build-container
3739
gcloud docker -- push $(PRODIMAGE):$(PRODVERSION)

cmd/main.go

+11-6
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,28 @@ func init() {
3030
}
3131

3232
var (
33-
endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint")
34-
driverName = flag.String("drivername", "com.google.csi.gcepd", "name of the driver")
35-
nodeID = flag.String("nodeid", "", "node id")
33+
endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint")
34+
driverName = flag.String("drivername", "com.google.csi.gcepd", "name of the driver")
35+
nodeID = flag.String("nodeid", "", "node id")
36+
vendorVersion string
3637
)
3738

3839
func main() {
3940
flag.Parse()
40-
4141
handle()
4242
os.Exit(0)
4343
}
4444

4545
func handle() {
46+
if vendorVersion == "" {
47+
glog.Fatalf("vendorVersion must be set at compile time")
48+
}
49+
glog.Infof("Driver vendor version %v", vendorVersion)
50+
4651
gceDriver := driver.GetGCEDriver()
4752

4853
//Initialize GCE Driver (Move setup to main?)
49-
cloudProvider, err := gce.CreateCloudProvider()
54+
cloudProvider, err := gce.CreateCloudProvider(vendorVersion)
5055
if err != nil {
5156
glog.Fatalf("Failed to get cloud provider: %v", err)
5257
}
@@ -56,7 +61,7 @@ func handle() {
5661
glog.Fatalf("Failed to get mounter: %v", err)
5762
}
5863

59-
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, *driverName, *nodeID)
64+
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, *driverName, *nodeID, vendorVersion)
6065
if err != nil {
6166
glog.Fatalf("Failed to initialize GCE CSI Driver: %v", err)
6267
}

pkg/gce-cloud-provider/gce.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ type CloudProvider struct {
4646

4747
var _ GCECompute = &CloudProvider{}
4848

49-
func CreateCloudProvider() (*CloudProvider, error) {
50-
svc, err := createCloudService()
49+
func CreateCloudProvider(vendorVersion string) (*CloudProvider, error) {
50+
svc, err := createCloudService(vendorVersion)
5151
if err != nil {
5252
return nil, err
5353
}
@@ -66,13 +66,13 @@ func CreateCloudProvider() (*CloudProvider, error) {
6666

6767
}
6868

69-
func createCloudService() (*compute.Service, error) {
69+
func createCloudService(vendorVersion string) (*compute.Service, error) {
7070
// TODO: support alternate methods of authentication
71-
svc, err := createCloudServiceWithDefaultServiceAccount()
71+
svc, err := createCloudServiceWithDefaultServiceAccount(vendorVersion)
7272
return svc, err
7373
}
7474

75-
func createCloudServiceWithDefaultServiceAccount() (*compute.Service, error) {
75+
func createCloudServiceWithDefaultServiceAccount(vendorVersion string) (*compute.Service, error) {
7676
client, err := newDefaultOauthClient()
7777
if err != nil {
7878
return nil, err
@@ -81,8 +81,7 @@ func createCloudServiceWithDefaultServiceAccount() (*compute.Service, error) {
8181
if err != nil {
8282
return nil, err
8383
}
84-
// TODO(dyzz) parameterize version number
85-
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", "0.2.0", runtime.GOOS, runtime.GOARCH)
84+
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
8685
return service, nil
8786
}
8887

pkg/gce-pd-csi-driver/gce-pd-driver.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ import (
2626
)
2727

2828
type GCEDriver struct {
29-
name string
30-
nodeID string
29+
name string
30+
nodeID string
31+
vendorVersion string
3132

3233
ids *GCEIdentityServer
3334
ns *GCENodeServer
@@ -42,7 +43,7 @@ func GetGCEDriver() *GCEDriver {
4243
return &GCEDriver{}
4344
}
4445

45-
func (gceDriver *GCEDriver) SetupGCEDriver(cloudProvider gce.GCECompute, mounter mountmanager.Mounter, name string, nodeID string) error {
46+
func (gceDriver *GCEDriver) SetupGCEDriver(cloudProvider gce.GCECompute, mounter mountmanager.Mounter, name, nodeID, vendorVersion string) error {
4647
if name == "" {
4748
return fmt.Errorf("Driver name missing")
4849
}
@@ -52,6 +53,7 @@ func (gceDriver *GCEDriver) SetupGCEDriver(cloudProvider gce.GCECompute, mounter
5253

5354
gceDriver.name = name
5455
gceDriver.nodeID = nodeID
56+
gceDriver.vendorVersion = vendorVersion
5557

5658
// Adding Capabilities
5759
vcam := []csi.VolumeCapability_AccessMode_Mode{

pkg/gce-pd-csi-driver/identity.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ func (gceIdentity *GCEIdentityServer) GetPluginInfo(ctx context.Context, req *cs
3535
}
3636

3737
return &csi.GetPluginInfoResponse{
38-
Name: gceIdentity.Driver.name,
38+
Name: gceIdentity.Driver.name,
39+
VendorVersion: gceIdentity.Driver.vendorVersion,
3940
}, nil
4041
}
4142

pkg/gce-pd-csi-driver/identity_test.go

+63
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,66 @@ limitations under the License.
1313
*/
1414

1515
package gceGCEDriver
16+
17+
import (
18+
"testing"
19+
20+
csi "github.com/container-storage-interface/spec/lib/go/csi/v0"
21+
"golang.org/x/net/context"
22+
)
23+
24+
func TestGetPluginInfo(t *testing.T) {
25+
gceDriver := GetGCEDriver()
26+
err := gceDriver.SetupGCEDriver(nil, nil, driver, node)
27+
if err != nil {
28+
t.Fatalf("Failed to setup GCE Driver: %v", err)
29+
}
30+
31+
resp, err := gceDriver.ids.GetPluginInfo(context.TODO(), &csi.GetPluginInfoRequest{})
32+
if err != nil {
33+
t.Fatalf("GetPluginInfo returned unexpected error: %v", err)
34+
}
35+
36+
if resp.GetName() != driver {
37+
t.Fatalf("Response name expected: %v, got: %v", driver, resp.GetName())
38+
}
39+
40+
respVer := resp.GetVendorVersion()
41+
if respVer != vendorVersion {
42+
t.Fatalf("Vendor version expected: %v, got: %v", vendorVersion, respVer)
43+
}
44+
}
45+
46+
func TestGetPluginCapabilities(t *testing.T) {
47+
gceDriver := GetGCEDriver()
48+
err := gceDriver.SetupGCEDriver(nil, nil, driver, node)
49+
if err != nil {
50+
t.Fatalf("Failed to setup GCE Driver: %v", err)
51+
}
52+
53+
resp, err := gceDriver.ids.GetPluginCapabilities(context.TODO(), &csi.GetPluginCapabilitiesRequest{})
54+
if err != nil {
55+
t.Fatalf("GetPluginCapabilities returned unexpected error: %v", err)
56+
}
57+
58+
for _, capability := range resp.GetCapabilities() {
59+
switch capability.GetService().GetType() {
60+
case csi.PluginCapability_Service_CONTROLLER_SERVICE:
61+
default:
62+
t.Fatalf("Unknown capability: %v", capability.GetService().GetType())
63+
}
64+
}
65+
}
66+
67+
func TestProbe(t *testing.T) {
68+
gceDriver := GetGCEDriver()
69+
err := gceDriver.SetupGCEDriver(nil, nil, driver, node)
70+
if err != nil {
71+
t.Fatalf("Failed to setup GCE Driver: %v", err)
72+
}
73+
74+
_, err = gceDriver.ids.Probe(context.TODO(), &csi.ProbeRequest{})
75+
if err != nil {
76+
t.Fatalf("Probe returned unexpected error: %v", err)
77+
}
78+
}

test/e2e/gce_pd_e2e_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,15 @@ func TestE2E(t *testing.T) {
7474
}
7575

7676
var _ = BeforeSuite(func() {
77+
var err error
7778
// TODO(dyzz): better defaults
7879
driverName := "testdriver"
7980
nodeID = "gce-pd-csi-e2e"
81+
vendorVersion := "testVendor"
8082

8183
// TODO(dyzz): Start a driver
8284
gceDriver := driver.GetGCEDriver()
83-
cloudProvider, err := gce.CreateCloudProvider()
85+
gceCloud, err = gce.CreateCloudProvider(vendorVersion)
8486

8587
Expect(err).To(BeNil(), "Failed to get cloud provider: %v", err)
8688

@@ -90,7 +92,7 @@ var _ = BeforeSuite(func() {
9092
Expect(err).To(BeNil(), "Failed to get mounter %v", err)
9193

9294
//Initialize GCE Driver
93-
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, driverName, nodeID)
95+
err = gceDriver.SetupGCEDriver(gceCloud, mounter, driverName, nodeID, vendorVersion)
9496
Expect(err).To(BeNil(), "Failed to initialize GCE CSI Driver: %v", err)
9597

9698
go func() {
@@ -99,7 +101,6 @@ var _ = BeforeSuite(func() {
99101

100102
client = createCSIClient()
101103

102-
gceCloud, err = gce.CreateCloudProvider()
103104
Expect(err).To(BeNil(), "Failed to create cloud service")
104105
// TODO: This is a hack to make sure the driver is fully up before running the tests, theres probably a better way to do this.
105106
time.Sleep(20 * time.Second)

test/run-e2e-local.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ set -x
55

66
readonly PKGDIR=sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
77

8-
go run "$GOPATH/src/${PKGDIR}/test/remote/run_remote/run_remote.go" --logtostderr --v 2 --project "${PROJECT}" --zone "${ZONE}" --ssh-env gce --delete-instances=true --cleanup=true --results-dir=my_test --service-account="${IAM_NAME}"
8+
go run "$GOPATH/src/${PKGDIR}/test/remote/run_remote/run_remote.go" --logtostderr --v 2 --project "${PROJECT}" --zone "${ZONE}" --ssh-env gce --delete-instances=false --cleanup=true --results-dir=my_test --service-account="${IAM_NAME}"

test/sanity/sanity_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func TestSanity(t *testing.T) {
3131
nodeID := "io.kubernetes.storage.mock"
3232
project := "test-project"
3333
zone := "test-zone"
34+
vendorVersion := "test-version"
3435
// TODO(dyzz): Only one of these can be correct, the way endpoint is defined in GCE driver is INCORRECT
3536
endpoint := "unix://tmp/csi.sock"
3637
csiSanityEndpoint := "unix:/tmp/csi.sock"
@@ -50,7 +51,7 @@ func TestSanity(t *testing.T) {
5051
}
5152

5253
//Initialize GCE Driver
53-
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, driverName, nodeID)
54+
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, driverName, nodeID, vendorVersion)
5455
if err != nil {
5556
t.Fatalf("Failed to initialize GCE CSI Driver: %v", err)
5657
}

0 commit comments

Comments
 (0)