Fix panic caused by no cloudprovider in test

We should not panic when no cloudprovider is present
This commit is contained in:
Hemant Kumar 2018-06-04 14:16:58 -04:00
parent 16c5804482
commit 32b69193c6
4 changed files with 70 additions and 24 deletions

View File

@ -1648,6 +1648,12 @@ func TestSetVolumeLimits(t *testing.T) {
expectedVolumeKey: util.AzureVolumeLimitKey, expectedVolumeKey: util.AzureVolumeLimitKey,
expectedLimit: 16, expectedLimit: 16,
}, },
{
name: "when no cloudprovider is present",
cloudProviderName: "",
expectedVolumeKey: util.AzureVolumeLimitKey,
expectedLimit: -1,
},
} }
for _, test := range testcases { for _, test := range testcases {
node := &v1.Node{ node := &v1.Node{
@ -1655,28 +1661,42 @@ func TestSetVolumeLimits(t *testing.T) {
Spec: v1.NodeSpec{}, Spec: v1.NodeSpec{},
} }
fakeCloud := &fakecloud.FakeCloud{ if test.cloudProviderName != "" {
Provider: test.cloudProviderName, fakeCloud := &fakecloud.FakeCloud{
Err: nil, Provider: test.cloudProviderName,
Err: nil,
}
kubelet.cloud = fakeCloud
kubelet.cloudproviderRequestParallelism = make(chan int, 1)
kubelet.cloudproviderRequestSync = make(chan int)
kubelet.cloudproviderRequestTimeout = 10 * time.Second
} else {
kubelet.cloud = nil
} }
kubelet.cloud = fakeCloud
kubelet.cloudproviderRequestParallelism = make(chan int, 1)
kubelet.cloudproviderRequestSync = make(chan int)
kubelet.cloudproviderRequestTimeout = 10 * time.Second
kubelet.setVolumeLimits(node) kubelet.setVolumeLimits(node)
nodeLimits := []v1.ResourceList{} nodeLimits := []v1.ResourceList{}
nodeLimits = append(nodeLimits, node.Status.Allocatable) nodeLimits = append(nodeLimits, node.Status.Allocatable)
nodeLimits = append(nodeLimits, node.Status.Capacity) nodeLimits = append(nodeLimits, node.Status.Capacity)
for _, volumeLimits := range nodeLimits { for _, volumeLimits := range nodeLimits {
fl, ok := volumeLimits[v1.ResourceName(test.expectedVolumeKey)] if test.expectedLimit == -1 {
if !ok { _, ok := volumeLimits[v1.ResourceName(test.expectedVolumeKey)]
t.Errorf("Expected to found volume limit for %s found none", test.expectedVolumeKey) if ok {
} t.Errorf("Expected no volume limit found for %s", test.expectedVolumeKey)
foundLimit, _ := fl.AsInt64() }
expectedValue := resource.NewQuantity(test.expectedLimit, resource.DecimalSI) } else {
if expectedValue.Cmp(fl) != 0 { fl, ok := volumeLimits[v1.ResourceName(test.expectedVolumeKey)]
t.Errorf("Expected volume limit for %s to be %v found %v", test.expectedVolumeKey, test.expectedLimit, foundLimit)
if !ok {
t.Errorf("Expected to found volume limit for %s found none", test.expectedVolumeKey)
}
foundLimit, _ := fl.AsInt64()
expectedValue := resource.NewQuantity(test.expectedLimit, resource.DecimalSI)
if expectedValue.Cmp(fl) != 0 {
t.Errorf("Expected volume limit for %s to be %v found %v", test.expectedVolumeKey, test.expectedLimit, foundLimit)
}
} }
} }
} }

View File

@ -98,15 +98,23 @@ func (plugin *awsElasticBlockStorePlugin) SupportsBulkVolumeVerification() bool
} }
func (plugin *awsElasticBlockStorePlugin) GetVolumeLimits() (map[string]int64, error) { func (plugin *awsElasticBlockStorePlugin) GetVolumeLimits() (map[string]int64, error) {
volumeLimits := map[string]int64{
util.EBSVolumeLimitKey: 39,
}
cloud := plugin.host.GetCloudProvider() cloud := plugin.host.GetCloudProvider()
// if we can't fetch cloudprovider we return an error
// hoping external CCM or admin can set it. Returning
// default values from here will mean, no one can
// override them.
if cloud == nil {
return nil, fmt.Errorf("No cloudprovider present")
}
if cloud.ProviderName() != aws.ProviderName { if cloud.ProviderName() != aws.ProviderName {
return nil, fmt.Errorf("Expected aws cloud, found %s", cloud.ProviderName()) return nil, fmt.Errorf("Expected aws cloud, found %s", cloud.ProviderName())
} }
volumeLimits := map[string]int64{
util.EBSVolumeLimitKey: 39,
}
instances, ok := cloud.Instances() instances, ok := cloud.Instances()
if !ok { if !ok {
glog.V(3).Infof("Failed to get instances from cloud provider") glog.V(3).Infof("Failed to get instances from cloud provider")

View File

@ -112,14 +112,24 @@ func (plugin *azureDataDiskPlugin) SupportsBulkVolumeVerification() bool {
} }
func (plugin *azureDataDiskPlugin) GetVolumeLimits() (map[string]int64, error) { func (plugin *azureDataDiskPlugin) GetVolumeLimits() (map[string]int64, error) {
volumeLimits := map[string]int64{
util.AzureVolumeLimitKey: 16,
}
cloud := plugin.host.GetCloudProvider() cloud := plugin.host.GetCloudProvider()
// if we can't fetch cloudprovider we return an error
// hoping external CCM or admin can set it. Returning
// default values from here will mean, no one can
// override them.
if cloud == nil {
return nil, fmt.Errorf("No cloudprovider present")
}
if cloud.ProviderName() != azure.CloudProviderName { if cloud.ProviderName() != azure.CloudProviderName {
return nil, fmt.Errorf("Expected Azure cloudprovider, got %s", cloud.ProviderName()) return nil, fmt.Errorf("Expected Azure cloudprovider, got %s", cloud.ProviderName())
} }
volumeLimits := map[string]int64{
util.AzureVolumeLimitKey: 16,
}
return volumeLimits, nil return volumeLimits, nil
} }

View File

@ -103,15 +103,23 @@ func (plugin *gcePersistentDiskPlugin) GetAccessModes() []v1.PersistentVolumeAcc
} }
func (plugin *gcePersistentDiskPlugin) GetVolumeLimits() (map[string]int64, error) { func (plugin *gcePersistentDiskPlugin) GetVolumeLimits() (map[string]int64, error) {
volumeLimits := map[string]int64{
util.GCEVolumeLimitKey: 16,
}
cloud := plugin.host.GetCloudProvider() cloud := plugin.host.GetCloudProvider()
// if we can't fetch cloudprovider we return an error
// hoping external CCM or admin can set it. Returning
// default values from here will mean, no one can
// override them.
if cloud == nil {
return nil, fmt.Errorf("No cloudprovider present")
}
if cloud.ProviderName() != gcecloud.ProviderName { if cloud.ProviderName() != gcecloud.ProviderName {
return nil, fmt.Errorf("Expected gce cloud got %s", cloud.ProviderName()) return nil, fmt.Errorf("Expected gce cloud got %s", cloud.ProviderName())
} }
volumeLimits := map[string]int64{
util.GCEVolumeLimitKey: 16,
}
return volumeLimits, nil return volumeLimits, nil
} }