Skip to content

Added unit tests for identity server, fixed small spec inconsistency #50

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.



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

# Start from Google Debian base
FROM gcr.io/google-containers/debian-base-amd64:0.3
Expand Down
12 changes: 7 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,23 @@ STAGINGVERSION=latest

PRODIMAGE=gcr.io/google-containers/volume-csi/compute-persistent-disk-csi-driver
PRODVERSION=v0.2.0.alpha

all: gce-pd-driver

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

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

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

prod-build-container: gce-pd-driver
docker build -t $(PRODIMAGE):$(PRODVERSION)
prod-build-container:
docker build --build-arg TAG=$(PRODVERSION) -t $(PRODIMAGE):$(PRODVERSION)

prod-push-container: prod-build-container
gcloud docker -- push $(PRODIMAGE):$(PRODVERSION)
Expand Down
17 changes: 11 additions & 6 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,28 @@ func init() {
}

var (
endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint")
driverName = flag.String("drivername", "com.google.csi.gcepd", "name of the driver")
nodeID = flag.String("nodeid", "", "node id")
endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint")
driverName = flag.String("drivername", "com.google.csi.gcepd", "name of the driver")
nodeID = flag.String("nodeid", "", "node id")
vendorVersion string
)

func main() {
flag.Parse()

handle()
os.Exit(0)
}

func handle() {
if vendorVersion == "" {
glog.Fatalf("vendorVersion must be set at compile time")
}
glog.Infof("Driver vendor version %v", vendorVersion)

gceDriver := driver.GetGCEDriver()

//Initialize GCE Driver (Move setup to main?)
cloudProvider, err := gce.CreateCloudProvider()
cloudProvider, err := gce.CreateCloudProvider(vendorVersion)
if err != nil {
glog.Fatalf("Failed to get cloud provider: %v", err)
}
Expand All @@ -56,7 +61,7 @@ func handle() {
glog.Fatalf("Failed to get mounter: %v", err)
}

err = gceDriver.SetupGCEDriver(cloudProvider, mounter, *driverName, *nodeID)
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, *driverName, *nodeID, vendorVersion)
if err != nil {
glog.Fatalf("Failed to initialize GCE CSI Driver: %v", err)
}
Expand Down
13 changes: 6 additions & 7 deletions pkg/gce-cloud-provider/gce.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ type CloudProvider struct {

var _ GCECompute = &CloudProvider{}

func CreateCloudProvider() (*CloudProvider, error) {
svc, err := createCloudService()
func CreateCloudProvider(vendorVersion string) (*CloudProvider, error) {
svc, err := createCloudService(vendorVersion)
if err != nil {
return nil, err
}
Expand All @@ -66,13 +66,13 @@ func CreateCloudProvider() (*CloudProvider, error) {

}

func createCloudService() (*compute.Service, error) {
func createCloudService(vendorVersion string) (*compute.Service, error) {
// TODO: support alternate methods of authentication
svc, err := createCloudServiceWithDefaultServiceAccount()
svc, err := createCloudServiceWithDefaultServiceAccount(vendorVersion)
return svc, err
}

func createCloudServiceWithDefaultServiceAccount() (*compute.Service, error) {
func createCloudServiceWithDefaultServiceAccount(vendorVersion string) (*compute.Service, error) {
client, err := newDefaultOauthClient()
if err != nil {
return nil, err
Expand All @@ -81,8 +81,7 @@ func createCloudServiceWithDefaultServiceAccount() (*compute.Service, error) {
if err != nil {
return nil, err
}
// TODO(dyzz) parameterize version number
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", "0.2.0", runtime.GOOS, runtime.GOARCH)
service.UserAgent = fmt.Sprintf("GCE CSI Driver/%s (%s %s)", vendorVersion, runtime.GOOS, runtime.GOARCH)
return service, nil
}

Expand Down
8 changes: 5 additions & 3 deletions pkg/gce-pd-csi-driver/gce-pd-driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ import (
)

type GCEDriver struct {
name string
nodeID string
name string
nodeID string
vendorVersion string

ids *GCEIdentityServer
ns *GCENodeServer
Expand All @@ -42,7 +43,7 @@ func GetGCEDriver() *GCEDriver {
return &GCEDriver{}
}

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

gceDriver.name = name
gceDriver.nodeID = nodeID
gceDriver.vendorVersion = vendorVersion
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a place down in the cloud provider file where you're putting the driver name/version in the string. You may want to plumb this down to there too


// Adding Capabilities
vcam := []csi.VolumeCapability_AccessMode_Mode{
Expand Down
3 changes: 2 additions & 1 deletion pkg/gce-pd-csi-driver/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ func (gceIdentity *GCEIdentityServer) GetPluginInfo(ctx context.Context, req *cs
}

return &csi.GetPluginInfoResponse{
Name: gceIdentity.Driver.name,
Name: gceIdentity.Driver.name,
VendorVersion: gceIdentity.Driver.vendorVersion,
}, nil
}

Expand Down
63 changes: 63 additions & 0 deletions pkg/gce-pd-csi-driver/identity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,66 @@ limitations under the License.
*/

package gceGCEDriver

import (
"testing"

csi "github.com/container-storage-interface/spec/lib/go/csi/v0"
"golang.org/x/net/context"
)

func TestGetPluginInfo(t *testing.T) {
gceDriver := GetGCEDriver()
err := gceDriver.SetupGCEDriver(nil, nil, driver, node)
if err != nil {
t.Fatalf("Failed to setup GCE Driver: %v", err)
}

resp, err := gceDriver.ids.GetPluginInfo(context.TODO(), &csi.GetPluginInfoRequest{})
if err != nil {
t.Fatalf("GetPluginInfo returned unexpected error: %v", err)
}

if resp.GetName() != driver {
t.Fatalf("Response name expected: %v, got: %v", driver, resp.GetName())
}

respVer := resp.GetVendorVersion()
if respVer != vendorVersion {
t.Fatalf("Vendor version expected: %v, got: %v", vendorVersion, respVer)
}
}

func TestGetPluginCapabilities(t *testing.T) {
gceDriver := GetGCEDriver()
err := gceDriver.SetupGCEDriver(nil, nil, driver, node)
if err != nil {
t.Fatalf("Failed to setup GCE Driver: %v", err)
}

resp, err := gceDriver.ids.GetPluginCapabilities(context.TODO(), &csi.GetPluginCapabilitiesRequest{})
if err != nil {
t.Fatalf("GetPluginCapabilities returned unexpected error: %v", err)
}

for _, capability := range resp.GetCapabilities() {
switch capability.GetService().GetType() {
case csi.PluginCapability_Service_CONTROLLER_SERVICE:
default:
t.Fatalf("Unknown capability: %v", capability.GetService().GetType())
}
}
}

func TestProbe(t *testing.T) {
gceDriver := GetGCEDriver()
err := gceDriver.SetupGCEDriver(nil, nil, driver, node)
if err != nil {
t.Fatalf("Failed to setup GCE Driver: %v", err)
}

_, err = gceDriver.ids.Probe(context.TODO(), &csi.ProbeRequest{})
if err != nil {
t.Fatalf("Probe returned unexpected error: %v", err)
}
}
7 changes: 4 additions & 3 deletions test/e2e/gce_pd_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,15 @@ func TestE2E(t *testing.T) {
}

var _ = BeforeSuite(func() {
var err error
// TODO(dyzz): better defaults
driverName := "testdriver"
nodeID = "gce-pd-csi-e2e"
vendorVersion := "testVendor"

// TODO(dyzz): Start a driver
gceDriver := driver.GetGCEDriver()
cloudProvider, err := gce.CreateCloudProvider()
gceCloud, err = gce.CreateCloudProvider(vendorVersion)

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

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

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

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

client = createCSIClient()

gceCloud, err = gce.CreateCloudProvider()
Expect(err).To(BeNil(), "Failed to create cloud service")
// 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.
time.Sleep(20 * time.Second)
Expand Down
2 changes: 1 addition & 1 deletion test/run-e2e-local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ set -x

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

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}"
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}"
3 changes: 2 additions & 1 deletion test/sanity/sanity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func TestSanity(t *testing.T) {
nodeID := "io.kubernetes.storage.mock"
project := "test-project"
zone := "test-zone"
vendorVersion := "test-version"
// TODO(dyzz): Only one of these can be correct, the way endpoint is defined in GCE driver is INCORRECT
endpoint := "unix://tmp/csi.sock"
csiSanityEndpoint := "unix:/tmp/csi.sock"
Expand All @@ -50,7 +51,7 @@ func TestSanity(t *testing.T) {
}

//Initialize GCE Driver
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, driverName, nodeID)
err = gceDriver.SetupGCEDriver(cloudProvider, mounter, driverName, nodeID, vendorVersion)
if err != nil {
t.Fatalf("Failed to initialize GCE CSI Driver: %v", err)
}
Expand Down