diff --git a/pkg/controller/persistentvolume/persistentvolume_provisioner_controller_test.go b/pkg/controller/persistentvolume/persistentvolume_provisioner_controller_test.go index d05fa38b860..e86daf7ae77 100644 --- a/pkg/controller/persistentvolume/persistentvolume_provisioner_controller_test.go +++ b/pkg/controller/persistentvolume/persistentvolume_provisioner_controller_test.go @@ -33,7 +33,7 @@ import ( ) func TestProvisionerRunStop(t *testing.T) { - controller, _ := makeTestController() + controller, _, _ := makeTestController() if len(controller.stopChannels) != 0 { t.Errorf("Non-running provisioner should not have any stopChannels. Got %v", len(controller.stopChannels)) @@ -92,15 +92,15 @@ func makeTestClaim() *api.PersistentVolumeClaim { } } -func makeTestController() (*PersistentVolumeProvisionerController, *mockControllerClient) { +func makeTestController() (*PersistentVolumeProvisionerController, *mockControllerClient, *volume.FakeVolumePlugin) { mockClient := &mockControllerClient{} mockVolumePlugin := &volume.FakeVolumePlugin{} controller, _ := NewPersistentVolumeProvisionerController(mockClient, 1*time.Second, nil, mockVolumePlugin, &fake_cloud.FakeCloud{}) - return controller, mockClient + return controller, mockClient, mockVolumePlugin } func TestReconcileClaim(t *testing.T) { - controller, mockClient := makeTestController() + controller, mockClient, _ := makeTestController() pvc := makeTestClaim() // watch would have added the claim to the store @@ -132,9 +132,16 @@ func TestReconcileClaim(t *testing.T) { } } +func checkTagValue(t *testing.T, tags map[string]string, tag string, expectedValue string) { + value, found := tags[tag] + if !found || value != expectedValue { + t.Errorf("Expected tag value %s = %s but value %s found", tag, expectedValue, value) + } +} + func TestReconcileVolume(t *testing.T) { - controller, mockClient := makeTestController() + controller, mockClient, mockVolumePlugin := makeTestController() pv := makeTestVolume() pvc := makeTestClaim() @@ -163,6 +170,13 @@ func TestReconcileVolume(t *testing.T) { if !isAnnotationMatch(pvProvisioningRequiredAnnotationKey, pvProvisioningCompletedAnnotationValue, mockClient.volume.Annotations) { t.Errorf("Expected %s but got %s", pvProvisioningRequiredAnnotationKey, mockClient.volume.Annotations[pvProvisioningRequiredAnnotationKey]) } + + // Check that the volume plugin was called with correct tags + tags := *mockVolumePlugin.LastProvisionerOptions.CloudTags + checkTagValue(t, tags, cloudVolumeCreatedForClaimNamespaceTag, pvc.Namespace) + checkTagValue(t, tags, cloudVolumeCreatedForClaimNameTag, pvc.Name) + checkTagValue(t, tags, cloudVolumeCreatedForVolumeNameTag, pv.Name) + } var _ controllerClient = &mockControllerClient{} diff --git a/pkg/volume/testing.go b/pkg/volume/testing.go index 02f8fba72fc..68b3d4e670e 100644 --- a/pkg/volume/testing.go +++ b/pkg/volume/testing.go @@ -119,9 +119,10 @@ func ProbeVolumePlugins(config VolumeConfig) []VolumePlugin { // Use as: // volume.RegisterPlugin(&FakePlugin{"fake-name"}) type FakeVolumePlugin struct { - PluginName string - Host VolumeHost - Config VolumeConfig + PluginName string + Host VolumeHost + Config VolumeConfig + LastProvisionerOptions VolumeOptions } var _ VolumePlugin = &FakeVolumePlugin{} @@ -160,6 +161,7 @@ func (plugin *FakeVolumePlugin) NewDeleter(spec *Spec) (Deleter, error) { } func (plugin *FakeVolumePlugin) NewProvisioner(options VolumeOptions) (Provisioner, error) { + plugin.LastProvisionerOptions = options return &FakeProvisioner{options, plugin.Host}, nil } diff --git a/test/integration/persistent_volumes_test.go b/test/integration/persistent_volumes_test.go index 8884bf875c4..539041e0bdc 100644 --- a/test/integration/persistent_volumes_test.go +++ b/test/integration/persistent_volumes_test.go @@ -50,7 +50,7 @@ func TestPersistentVolumeRecycler(t *testing.T) { testClient := client.NewOrDie(&client.Config{Host: s.URL, GroupVersion: testapi.Default.GroupVersion()}) host := volume.NewFakeVolumeHost("/tmp/fake", nil, nil) - plugins := []volume.VolumePlugin{&volume.FakeVolumePlugin{"plugin-name", host, volume.VolumeConfig{}}} + plugins := []volume.VolumePlugin{&volume.FakeVolumePlugin{"plugin-name", host, volume.VolumeConfig{}, volume.VolumeOptions{}}} cloud := &fake_cloud.FakeCloud{} binder := persistentvolumecontroller.NewPersistentVolumeClaimBinder(binderClient, 10*time.Second)