Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
fd64c082
Commit
fd64c082
authored
Nov 15, 2018
by
Michelle Au
Committed by
Jordan Liggitt
Nov 16, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix storage feature gate test setting
parent
7c4d097f
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
251 additions
and
338 deletions
+251
-338
BUILD
pkg/api/persistentvolumeclaim/BUILD
+1
-0
util_test.go
pkg/api/persistentvolumeclaim/util_test.go
+7
-18
BUILD
pkg/api/pod/BUILD
+1
-0
util_test.go
pkg/api/pod/util_test.go
+13
-22
validation_test.go
pkg/apis/core/validation/validation_test.go
+29
-40
BUILD
pkg/apis/storage/v1/BUILD
+2
-0
defaults_test.go
pkg/apis/storage/v1/defaults_test.go
+10
-20
BUILD
pkg/apis/storage/v1beta1/BUILD
+2
-0
defaults_test.go
pkg/apis/storage/v1beta1/defaults_test.go
+11
-20
BUILD
pkg/apis/storage/validation/BUILD
+2
-0
validation_test.go
pkg/apis/storage/validation/validation_test.go
+6
-12
BUILD
pkg/controller/volume/expand/BUILD
+1
-4
BUILD
pkg/controller/volume/persistentvolume/BUILD
+2
-0
binder_test.go
pkg/controller/volume/persistentvolume/binder_test.go
+0
-3
index_test.go
pkg/controller/volume/persistentvolume/index_test.go
+34
-30
provision_test.go
pkg/controller/volume/persistentvolume/provision_test.go
+22
-16
pv_controller_test.go
pkg/controller/volume/persistentvolume/pv_controller_test.go
+32
-27
scheduler_binder_test.go
...ntroller/volume/persistentvolume/scheduler_binder_test.go
+0
-13
BUILD
pkg/kubelet/volumemanager/populator/BUILD
+1
-0
desired_state_of_world_populator_test.go
...anager/populator/desired_state_of_world_populator_test.go
+8
-26
BUILD
pkg/kubelet/volumemanager/reconciler/BUILD
+1
-0
reconciler_test.go
pkg/kubelet/volumemanager/reconciler/reconciler_test.go
+17
-26
BUILD
pkg/volume/util/BUILD
+2
-0
util_test.go
pkg/volume/util/util_test.go
+39
-41
BUILD
plugin/pkg/admission/resourcequota/BUILD
+2
-0
admission_test.go
plugin/pkg/admission/resourcequota/admission_test.go
+6
-20
No files found.
pkg/api/persistentvolumeclaim/BUILD
View file @
fd64c082
...
@@ -38,5 +38,6 @@ go_test(
...
@@ -38,5 +38,6 @@ go_test(
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/features:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
],
)
)
pkg/api/persistentvolumeclaim/util_test.go
View file @
fd64c082
...
@@ -20,6 +20,7 @@ import (
...
@@ -20,6 +20,7 @@ import (
"testing"
"testing"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/features"
)
)
...
@@ -36,36 +37,24 @@ func TestDropAlphaPVCVolumeMode(t *testing.T) {
...
@@ -36,36 +37,24 @@ func TestDropAlphaPVCVolumeMode(t *testing.T) {
}
}
// Enable alpha feature BlockVolume
// Enable alpha feature BlockVolume
err1
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
if
err1
!=
nil
{
t
.
Fatalf
(
"Failed to enable feature gate for BlockVolume: %v"
,
err1
)
}
// now test dropping the fields - should not be dropped
// now test dropping the fields - should not be dropped
DropDisabledAlphaFields
(
&
pvc
.
Spec
)
DropDisabledAlphaFields
(
&
pvc
.
Spec
)
// check to make sure VolumeDevices is still present
// check to make sure VolumeDevices is still present
// if featureset is set to true
// if featureset is set to true
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
BlockVolume
)
{
if
pvc
.
Spec
.
VolumeMode
==
nil
{
if
pvc
.
Spec
.
VolumeMode
==
nil
{
t
.
Error
(
"VolumeMode in pvc.Spec should not have been dropped based on feature-gate"
)
t
.
Error
(
"VolumeMode in pvc.Spec should not have been dropped based on feature-gate"
)
}
}
}
// Disable alpha feature BlockVolume
// Disable alpha feature BlockVolume
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
false
)()
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to disable feature gate for BlockVolume: %v"
,
err
)
}
// now test dropping the fields
// now test dropping the fields
DropDisabledAlphaFields
(
&
pvc
.
Spec
)
DropDisabledAlphaFields
(
&
pvc
.
Spec
)
// check to make sure VolumeDevices is nil
// check to make sure VolumeDevices is nil
// if featureset is set to false
// if featureset is set to false
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
BlockVolume
)
{
if
pvc
.
Spec
.
VolumeMode
!=
nil
{
if
pvc
.
Spec
.
VolumeMode
!=
nil
{
t
.
Error
(
"DropDisabledAlphaFields VolumeMode for pvc.Spec failed"
)
t
.
Error
(
"DropDisabledAlphaFields VolumeMode for pvc.Spec failed"
)
}
}
}
}
}
pkg/api/pod/BUILD
View file @
fd64c082
...
@@ -41,5 +41,6 @@ go_test(
...
@@ -41,5 +41,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
],
)
)
pkg/api/pod/util_test.go
View file @
fd64c082
...
@@ -24,6 +24,7 @@ import (
...
@@ -24,6 +24,7 @@ import (
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/apimachinery/pkg/util/validation/field"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/features"
)
)
...
@@ -303,42 +304,32 @@ func TestDropAlphaVolumeDevices(t *testing.T) {
...
@@ -303,42 +304,32 @@ func TestDropAlphaVolumeDevices(t *testing.T) {
}
}
// Enable alpha feature BlockVolume
// Enable alpha feature BlockVolume
err1
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
if
err1
!=
nil
{
t
.
Fatalf
(
"Failed to enable feature gate for BlockVolume: %v"
,
err1
)
}
// now test dropping the fields - should not be dropped
// now test dropping the fields - should not be dropped
DropDisabledAlphaFields
(
&
testPod
.
Spec
)
DropDisabledAlphaFields
(
&
testPod
.
Spec
)
// check to make sure VolumeDevices is still present
// check to make sure VolumeDevices is still present
// if featureset is set to true
// if featureset is set to true
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
BlockVolume
)
{
if
testPod
.
Spec
.
Containers
[
0
]
.
VolumeDevices
==
nil
{
if
testPod
.
Spec
.
Containers
[
0
]
.
VolumeDevices
==
nil
{
t
.
Error
(
"VolumeDevices in Container should not have been dropped based on feature-gate"
)
t
.
Error
(
"VolumeDevices in Container should not have been dropped based on feature-gate"
)
}
}
if
testPod
.
Spec
.
InitContainers
[
0
]
.
VolumeDevices
==
nil
{
if
testPod
.
Spec
.
InitContainers
[
0
]
.
VolumeDevices
==
nil
{
t
.
Error
(
"VolumeDevices in InitContainers should not have been dropped based on feature-gate"
)
t
.
Error
(
"VolumeDevices in InitContainers should not have been dropped based on feature-gate"
)
}
}
}
// Disable alpha feature BlockVolume
// Disable alpha feature BlockVolume
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
false
)()
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to disable feature gate for BlockVolume: %v"
,
err
)
}
// now test dropping the fields
// now test dropping the fields
DropDisabledAlphaFields
(
&
testPod
.
Spec
)
DropDisabledAlphaFields
(
&
testPod
.
Spec
)
// check to make sure VolumeDevices is nil
// check to make sure VolumeDevices is nil
// if featureset is set to false
// if featureset is set to false
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
BlockVolume
)
{
if
testPod
.
Spec
.
Containers
[
0
]
.
VolumeDevices
!=
nil
{
if
testPod
.
Spec
.
Containers
[
0
]
.
VolumeDevices
!=
nil
{
t
.
Error
(
"DropDisabledAlphaFields for Containers failed"
)
t
.
Error
(
"DropDisabledAlphaFields for Containers failed"
)
}
}
if
testPod
.
Spec
.
InitContainers
[
0
]
.
VolumeDevices
!=
nil
{
if
testPod
.
Spec
.
InitContainers
[
0
]
.
VolumeDevices
!=
nil
{
t
.
Error
(
"DropDisabledAlphaFields for InitContainers failed"
)
t
.
Error
(
"DropDisabledAlphaFields for InitContainers failed"
)
}
}
}
}
}
pkg/apis/core/validation/validation_test.go
View file @
fd64c082
...
@@ -1553,18 +1553,21 @@ func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
...
@@ -1553,18 +1553,21 @@ func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
}
}
for
name
,
scenario
:=
range
scenarios
{
for
name
,
scenario
:=
range
scenarios
{
// ensure we have a resource version specified for updates
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
togglePVExpandFeature
(
scenario
.
enableResize
,
t
)
// ensure we have a resource version specified for updates
toggleBlockVolumeFeature
(
scenario
.
enableBlock
,
t
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandPersistentVolumes
,
scenario
.
enableResize
)()
scenario
.
oldClaim
.
ResourceVersion
=
"1"
scenario
.
newClaim
.
ResourceVersion
=
"1"
toggleBlockVolumeFeature
(
scenario
.
enableBlock
,
t
)
errs
:=
ValidatePersistentVolumeClaimUpdate
(
scenario
.
newClaim
,
scenario
.
oldClaim
)
scenario
.
oldClaim
.
ResourceVersion
=
"1"
if
len
(
errs
)
==
0
&&
scenario
.
isExpectedFailure
{
scenario
.
newClaim
.
ResourceVersion
=
"1"
t
.
Errorf
(
"Unexpected success for scenario: %s"
,
name
)
errs
:=
ValidatePersistentVolumeClaimUpdate
(
scenario
.
newClaim
,
scenario
.
oldClaim
)
}
if
len
(
errs
)
==
0
&&
scenario
.
isExpectedFailure
{
if
len
(
errs
)
>
0
&&
!
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected success for scenario: %s"
,
name
)
t
.
Errorf
(
"Unexpected failure for scenario: %s - %+v"
,
name
,
errs
)
}
}
if
len
(
errs
)
>
0
&&
!
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected failure for scenario: %s - %+v"
,
name
,
errs
)
}
})
}
}
}
}
...
@@ -1585,23 +1588,6 @@ func toggleBlockVolumeFeature(toggleFlag bool, t *testing.T) {
...
@@ -1585,23 +1588,6 @@ func toggleBlockVolumeFeature(toggleFlag bool, t *testing.T) {
}
}
}
}
func
togglePVExpandFeature
(
toggleFlag
bool
,
t
*
testing
.
T
)
{
if
toggleFlag
{
// Enable alpha feature LocalStorageCapacityIsolation
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=true"
)
if
err
!=
nil
{
t
.
Errorf
(
"Failed to enable feature gate for ExpandPersistentVolumes: %v"
,
err
)
return
}
}
else
{
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=false"
)
if
err
!=
nil
{
t
.
Errorf
(
"Failed to disable feature gate for ExpandPersistentVolumes: %v"
,
err
)
return
}
}
}
func
TestValidateKeyToPath
(
t
*
testing
.
T
)
{
func
TestValidateKeyToPath
(
t
*
testing
.
T
)
{
testCases
:=
[]
struct
{
testCases
:=
[]
struct
{
kp
core
.
KeyToPath
kp
core
.
KeyToPath
...
@@ -11577,17 +11563,20 @@ func TestValidatePersistentVolumeClaimStatusUpdate(t *testing.T) {
...
@@ -11577,17 +11563,20 @@ func TestValidatePersistentVolumeClaimStatusUpdate(t *testing.T) {
},
},
}
}
for
name
,
scenario
:=
range
scenarios
{
for
name
,
scenario
:=
range
scenarios
{
// ensure we have a resource version specified for updates
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
togglePVExpandFeature
(
scenario
.
enableResize
,
t
)
// ensure we have a resource version specified for updates
scenario
.
oldClaim
.
ResourceVersion
=
"1"
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandPersistentVolumes
,
scenario
.
enableResize
)()
scenario
.
newClaim
.
ResourceVersion
=
"1"
errs
:=
ValidatePersistentVolumeClaimStatusUpdate
(
scenario
.
newClaim
,
scenario
.
oldClaim
)
scenario
.
oldClaim
.
ResourceVersion
=
"1"
if
len
(
errs
)
==
0
&&
scenario
.
isExpectedFailure
{
scenario
.
newClaim
.
ResourceVersion
=
"1"
t
.
Errorf
(
"Unexpected success for scenario: %s"
,
name
)
errs
:=
ValidatePersistentVolumeClaimStatusUpdate
(
scenario
.
newClaim
,
scenario
.
oldClaim
)
}
if
len
(
errs
)
==
0
&&
scenario
.
isExpectedFailure
{
if
len
(
errs
)
>
0
&&
!
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected success for scenario: %s"
,
name
)
t
.
Errorf
(
"Unexpected failure for scenario: %s - %+v"
,
name
,
errs
)
}
}
if
len
(
errs
)
>
0
&&
!
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected failure for scenario: %s - %+v"
,
name
,
errs
)
}
})
}
}
}
}
...
...
pkg/apis/storage/v1/BUILD
View file @
fd64c082
...
@@ -52,8 +52,10 @@ go_test(
...
@@ -52,8 +52,10 @@ go_test(
deps = [
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/storage/install:go_default_library",
"//pkg/apis/storage/install:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/api/storage/v1:go_default_library",
"//staging/src/k8s.io/api/storage/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
],
)
)
pkg/apis/storage/v1/defaults_test.go
View file @
fd64c082
...
@@ -23,8 +23,10 @@ import (
...
@@ -23,8 +23,10 @@ import (
storagev1
"k8s.io/api/storage/v1"
storagev1
"k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
_
"k8s.io/kubernetes/pkg/apis/storage/install"
_
"k8s.io/kubernetes/pkg/apis/storage/install"
"k8s.io/kubernetes/pkg/features"
)
)
func
roundTrip
(
t
*
testing
.
T
,
obj
runtime
.
Object
)
runtime
.
Object
{
func
roundTrip
(
t
*
testing
.
T
,
obj
runtime
.
Object
)
runtime
.
Object
{
...
@@ -51,25 +53,9 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
...
@@ -51,25 +53,9 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
func
TestSetDefaultVolumeBindingMode
(
t
*
testing
.
T
)
{
func
TestSetDefaultVolumeBindingMode
(
t
*
testing
.
T
)
{
class
:=
&
storagev1
.
StorageClass
{}
class
:=
&
storagev1
.
StorageClass
{}
// When feature gate is disabled, field should not be defaulted
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to enable feature gate for VolumeScheduling: %v"
,
err
)
}
output
:=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1
.
StorageClass
)
if
output
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to not be defaulted, got: %+v"
,
output
.
VolumeBindingMode
)
}
class
=
&
storagev1
.
StorageClass
{}
// When feature gate is enabled, field should be defaulted
// When feature gate is enabled, field should be defaulted
err
=
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to enable feature gate for VolumeScheduling: %v"
,
err
)
}
defaultMode
:=
storagev1
.
VolumeBindingImmediate
defaultMode
:=
storagev1
.
VolumeBindingImmediate
output
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1
.
StorageClass
)
output
:
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1
.
StorageClass
)
outMode
:=
output
.
VolumeBindingMode
outMode
:=
output
.
VolumeBindingMode
if
outMode
==
nil
{
if
outMode
==
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: nil"
,
defaultMode
)
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: nil"
,
defaultMode
)
...
@@ -77,8 +63,12 @@ func TestSetDefaultVolumeBindingMode(t *testing.T) {
...
@@ -77,8 +63,12 @@ func TestSetDefaultVolumeBindingMode(t *testing.T) {
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: %+v"
,
defaultMode
,
outMode
)
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: %+v"
,
defaultMode
,
outMode
)
}
}
err
=
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
class
=
&
storagev1
.
StorageClass
{}
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to disable feature gate for VolumeScheduling: %v"
,
err
)
// When feature gate is disabled, field should not be defaulted
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
output
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1
.
StorageClass
)
if
output
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to not be defaulted, got: %+v"
,
output
.
VolumeBindingMode
)
}
}
}
}
pkg/apis/storage/v1beta1/BUILD
View file @
fd64c082
...
@@ -52,8 +52,10 @@ go_test(
...
@@ -52,8 +52,10 @@ go_test(
deps = [
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/storage/install:go_default_library",
"//pkg/apis/storage/install:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/api/storage/v1beta1:go_default_library",
"//staging/src/k8s.io/api/storage/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
],
)
)
pkg/apis/storage/v1beta1/defaults_test.go
View file @
fd64c082
...
@@ -23,8 +23,10 @@ import (
...
@@ -23,8 +23,10 @@ import (
storagev1beta1
"k8s.io/api/storage/v1beta1"
storagev1beta1
"k8s.io/api/storage/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
_
"k8s.io/kubernetes/pkg/apis/storage/install"
_
"k8s.io/kubernetes/pkg/apis/storage/install"
"k8s.io/kubernetes/pkg/features"
)
)
func
roundTrip
(
t
*
testing
.
T
,
obj
runtime
.
Object
)
runtime
.
Object
{
func
roundTrip
(
t
*
testing
.
T
,
obj
runtime
.
Object
)
runtime
.
Object
{
...
@@ -51,25 +53,9 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
...
@@ -51,25 +53,9 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
func
TestSetDefaultVolumeBindingMode
(
t
*
testing
.
T
)
{
func
TestSetDefaultVolumeBindingMode
(
t
*
testing
.
T
)
{
class
:=
&
storagev1beta1
.
StorageClass
{}
class
:=
&
storagev1beta1
.
StorageClass
{}
// When feature gate is disabled, field should not be defaulted
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to enable feature gate for VolumeScheduling: %v"
,
err
)
}
output
:=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1beta1
.
StorageClass
)
if
output
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to not be defaulted, got: %+v"
,
output
.
VolumeBindingMode
)
}
class
=
&
storagev1beta1
.
StorageClass
{}
// When feature gate is enabled, field should be defaulted
// When feature gate is enabled, field should be defaulted
err
=
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to enable feature gate for VolumeScheduling: %v"
,
err
)
}
defaultMode
:=
storagev1beta1
.
VolumeBindingImmediate
defaultMode
:=
storagev1beta1
.
VolumeBindingImmediate
output
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1beta1
.
StorageClass
)
output
:
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1beta1
.
StorageClass
)
outMode
:=
output
.
VolumeBindingMode
outMode
:=
output
.
VolumeBindingMode
if
outMode
==
nil
{
if
outMode
==
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: nil"
,
defaultMode
)
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: nil"
,
defaultMode
)
...
@@ -77,8 +63,13 @@ func TestSetDefaultVolumeBindingMode(t *testing.T) {
...
@@ -77,8 +63,13 @@ func TestSetDefaultVolumeBindingMode(t *testing.T) {
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: %+v"
,
defaultMode
,
outMode
)
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: %+v"
,
defaultMode
,
outMode
)
}
}
err
=
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
class
=
&
storagev1beta1
.
StorageClass
{}
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to disable feature gate for VolumeScheduling: %v"
,
err
)
// When feature gate is disabled, field should not be defaulted
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
output
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1beta1
.
StorageClass
)
if
output
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to not be defaulted, got: %+v"
,
output
.
VolumeBindingMode
)
}
}
}
}
pkg/apis/storage/validation/BUILD
View file @
fd64c082
...
@@ -31,8 +31,10 @@ go_test(
...
@@ -31,8 +31,10 @@ go_test(
deps = [
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
],
)
)
...
...
pkg/apis/storage/validation/validation_test.go
View file @
fd64c082
...
@@ -23,8 +23,10 @@ import (
...
@@ -23,8 +23,10 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/features"
)
)
var
(
var
(
...
@@ -151,21 +153,13 @@ func TestAlphaExpandPersistentVolumesFeatureValidation(t *testing.T) {
...
@@ -151,21 +153,13 @@ func TestAlphaExpandPersistentVolumesFeatureValidation(t *testing.T) {
VolumeBindingMode
:
&
immediateMode1
,
VolumeBindingMode
:
&
immediateMode1
,
}
}
// Enable alpha feature ExpandPersistentVolumes
// Enable feature ExpandPersistentVolumes
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandPersistentVolumes
,
true
)()
if
err
!=
nil
{
t
.
Errorf
(
"Failed to enable feature gate for ExpandPersistentVolumes: %v"
,
err
)
return
}
if
errs
:=
ValidateStorageClass
(
testSC
);
len
(
errs
)
!=
0
{
if
errs
:=
ValidateStorageClass
(
testSC
);
len
(
errs
)
!=
0
{
t
.
Errorf
(
"expected success: %v"
,
errs
)
t
.
Errorf
(
"expected success: %v"
,
errs
)
}
}
// Disable alpha feature ExpandPersistentVolumes
// Disable feature ExpandPersistentVolumes
err
=
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=false"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandPersistentVolumes
,
false
)()
if
err
!=
nil
{
t
.
Errorf
(
"Failed to disable feature gate for ExpandPersistentVolumes: %v"
,
err
)
return
}
if
errs
:=
ValidateStorageClass
(
testSC
);
len
(
errs
)
==
0
{
if
errs
:=
ValidateStorageClass
(
testSC
);
len
(
errs
)
==
0
{
t
.
Errorf
(
"expected failure, but got no error"
)
t
.
Errorf
(
"expected failure, but got no error"
)
}
}
...
...
pkg/controller/volume/expand/BUILD
View file @
fd64c082
package(default_visibility = ["//visibility:public"])
package(default_visibility = ["//visibility:public"])
load(
load("@io_bazel_rules_go//go:def.bzl", "go_library")
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
go_library(
name = "go_default_library",
name = "go_default_library",
...
...
pkg/controller/volume/persistentvolume/BUILD
View file @
fd64c082
...
@@ -82,6 +82,7 @@ go_test(
...
@@ -82,6 +82,7 @@ go_test(
"//pkg/api/testapi:go_default_library",
"//pkg/api/testapi:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/features:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume/util:go_default_library",
"//pkg/volume/util:go_default_library",
"//pkg/volume/util/recyclerclient:go_default_library",
"//pkg/volume/util/recyclerclient:go_default_library",
...
@@ -96,6 +97,7 @@ go_test(
...
@@ -96,6 +97,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
...
...
pkg/controller/volume/persistentvolume/binder_test.go
View file @
fd64c082
...
@@ -639,9 +639,6 @@ func TestSync(t *testing.T) {
...
@@ -639,9 +639,6 @@ func TestSync(t *testing.T) {
},
},
}
}
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
runSyncTests
(
t
,
tests
,
[]
*
storage
.
StorageClass
{
runSyncTests
(
t
,
tests
,
[]
*
storage
.
StorageClass
{
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
classWait
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
classWait
},
...
...
pkg/controller/volume/persistentvolume/index_test.go
View file @
fd64c082
...
@@ -24,9 +24,11 @@ import (
...
@@ -24,9 +24,11 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/api/resource"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/kubernetes/scheme"
ref
"k8s.io/client-go/tools/reference"
ref
"k8s.io/client-go/tools/reference"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/volume/util"
"k8s.io/kubernetes/pkg/volume/util"
)
)
...
@@ -1207,7 +1209,7 @@ func TestAlphaFilteringVolumeModes(t *testing.T) {
...
@@ -1207,7 +1209,7 @@ func TestAlphaFilteringVolumeModes(t *testing.T) {
toggleFeature
(
false
,
"BlockVolume"
,
t
)
toggleFeature
(
false
,
"BlockVolume"
,
t
)
}
}
func
Test
Alpha
StorageObjectInUseProtectionFiltering
(
t
*
testing
.
T
)
{
func
TestStorageObjectInUseProtectionFiltering
(
t
*
testing
.
T
)
{
pv
:=
&
v1
.
PersistentVolume
{
pv
:=
&
v1
.
PersistentVolume
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"pv1"
,
Name
:
"pv1"
,
...
@@ -1271,17 +1273,19 @@ func TestAlphaStorageObjectInUseProtectionFiltering(t *testing.T) {
...
@@ -1271,17 +1273,19 @@ func TestAlphaStorageObjectInUseProtectionFiltering(t *testing.T) {
}
}
for
name
,
testCase
:=
range
satisfyingTestCases
{
for
name
,
testCase
:=
range
satisfyingTestCases
{
toggleFeature
(
testCase
.
enableStorageObjectInUseProtection
,
"StorageObjectInUseProtection"
,
t
)
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
err
:=
checkVolumeSatisfyClaim
(
testCase
.
vol
,
testCase
.
pvc
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
StorageObjectInUseProtection
,
testCase
.
enableStorageObjectInUseProtection
)()
// expected to match but got an error
if
err
!=
nil
&&
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"%s: expected to match but got an error: %v"
,
name
,
err
)
}
// not expected to match but did
if
err
==
nil
&&
!
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"%s: not expected to match but did"
,
name
)
}
err
:=
checkVolumeSatisfyClaim
(
testCase
.
vol
,
testCase
.
pvc
)
// expected to match but got an error
if
err
!=
nil
&&
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"%s: expected to match but got an error: %v"
,
name
,
err
)
}
// not expected to match but did
if
err
==
nil
&&
!
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"%s: not expected to match but did"
,
name
)
}
})
}
}
filteringTestCases
:=
map
[
string
]
struct
{
filteringTestCases
:=
map
[
string
]
struct
{
...
@@ -1316,26 +1320,26 @@ func TestAlphaStorageObjectInUseProtectionFiltering(t *testing.T) {
...
@@ -1316,26 +1320,26 @@ func TestAlphaStorageObjectInUseProtectionFiltering(t *testing.T) {
},
},
}
}
for
name
,
testCase
:=
range
filteringTestCases
{
for
name
,
testCase
:=
range
filteringTestCases
{
toggleFeature
(
testCase
.
enableStorageObjectInUseProtection
,
"StorageObjectInUseProtection"
,
t
)
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
pvmatch
,
err
:=
testCase
.
vol
.
findBestMatchForClaim
(
testCase
.
pvc
,
false
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
StorageObjectInUseProtection
,
testCase
.
enableStorageObjectInUseProtection
)()
// expected to match but either got an error or no returned pvmatch
if
pvmatch
==
nil
&&
testCase
.
isExpectedMatch
{
pvmatch
,
err
:=
testCase
.
vol
.
findBestMatchForClaim
(
testCase
.
pvc
,
false
)
t
.
Errorf
(
"Unexpected failure for testcase, no matching volume: %s"
,
name
)
// expected to match but either got an error or no returned pvmatch
}
if
pvmatch
==
nil
&&
testCase
.
isExpectedMatch
{
if
err
!=
nil
&&
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"Unexpected failure for testcase, no matching volume: %s"
,
name
)
t
.
Errorf
(
"Unexpected failure for testcase: %s - %+v"
,
name
,
err
)
}
}
if
err
!=
nil
&&
testCase
.
isExpectedMatch
{
// expected to not match but either got an error or a returned pvmatch
t
.
Errorf
(
"Unexpected failure for testcase: %s - %+v"
,
name
,
err
)
if
pvmatch
!=
nil
&&
!
testCase
.
isExpectedMatch
{
}
t
.
Errorf
(
"Unexpected failure for testcase, expected no matching volume: %s"
,
name
)
// expected to not match but either got an error or a returned pvmatch
}
if
pvmatch
!=
nil
&&
!
testCase
.
isExpectedMatch
{
if
err
!=
nil
&&
!
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"Unexpected failure for testcase, expected no matching volume: %s"
,
name
)
t
.
Errorf
(
"Unexpected failure for testcase: %s - %+v"
,
name
,
err
)
}
}
if
err
!=
nil
&&
!
testCase
.
isExpectedMatch
{
t
.
Errorf
(
"Unexpected failure for testcase: %s - %+v"
,
name
,
err
)
}
})
}
}
// make sure feature gate is turned off
toggleFeature
(
false
,
"StorageObjectInUseProtection"
,
t
)
}
}
func
TestFindingPreboundVolumes
(
t
*
testing
.
T
)
{
func
TestFindingPreboundVolumes
(
t
*
testing
.
T
)
{
...
...
pkg/controller/volume/persistentvolume/provision_test.go
View file @
fd64c082
...
@@ -34,6 +34,7 @@ var class2Parameters = map[string]string{
...
@@ -34,6 +34,7 @@ var class2Parameters = map[string]string{
"param2"
:
"value2"
,
"param2"
:
"value2"
,
}
}
var
deleteReclaimPolicy
=
v1
.
PersistentVolumeReclaimDelete
var
deleteReclaimPolicy
=
v1
.
PersistentVolumeReclaimDelete
var
modeImmediate
=
storage
.
VolumeBindingImmediate
var
storageClasses
=
[]
*
storage
.
StorageClass
{
var
storageClasses
=
[]
*
storage
.
StorageClass
{
{
{
TypeMeta
:
metav1
.
TypeMeta
{
TypeMeta
:
metav1
.
TypeMeta
{
...
@@ -44,9 +45,10 @@ var storageClasses = []*storage.StorageClass{
...
@@ -44,9 +45,10 @@ var storageClasses = []*storage.StorageClass{
Name
:
"gold"
,
Name
:
"gold"
,
},
},
Provisioner
:
mockPluginName
,
Provisioner
:
mockPluginName
,
Parameters
:
class1Parameters
,
Parameters
:
class1Parameters
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
VolumeBindingMode
:
&
modeImmediate
,
},
},
{
{
TypeMeta
:
metav1
.
TypeMeta
{
TypeMeta
:
metav1
.
TypeMeta
{
...
@@ -55,9 +57,10 @@ var storageClasses = []*storage.StorageClass{
...
@@ -55,9 +57,10 @@ var storageClasses = []*storage.StorageClass{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"silver"
,
Name
:
"silver"
,
},
},
Provisioner
:
mockPluginName
,
Provisioner
:
mockPluginName
,
Parameters
:
class2Parameters
,
Parameters
:
class2Parameters
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
VolumeBindingMode
:
&
modeImmediate
,
},
},
{
{
TypeMeta
:
metav1
.
TypeMeta
{
TypeMeta
:
metav1
.
TypeMeta
{
...
@@ -66,9 +69,10 @@ var storageClasses = []*storage.StorageClass{
...
@@ -66,9 +69,10 @@ var storageClasses = []*storage.StorageClass{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"external"
,
Name
:
"external"
,
},
},
Provisioner
:
"vendor.com/my-volume"
,
Provisioner
:
"vendor.com/my-volume"
,
Parameters
:
class1Parameters
,
Parameters
:
class1Parameters
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
VolumeBindingMode
:
&
modeImmediate
,
},
},
{
{
TypeMeta
:
metav1
.
TypeMeta
{
TypeMeta
:
metav1
.
TypeMeta
{
...
@@ -77,9 +81,10 @@ var storageClasses = []*storage.StorageClass{
...
@@ -77,9 +81,10 @@ var storageClasses = []*storage.StorageClass{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"unknown-internal"
,
Name
:
"unknown-internal"
,
},
},
Provisioner
:
"kubernetes.io/unknown"
,
Provisioner
:
"kubernetes.io/unknown"
,
Parameters
:
class1Parameters
,
Parameters
:
class1Parameters
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
VolumeBindingMode
:
&
modeImmediate
,
},
},
{
{
TypeMeta
:
metav1
.
TypeMeta
{
TypeMeta
:
metav1
.
TypeMeta
{
...
@@ -88,10 +93,11 @@ var storageClasses = []*storage.StorageClass{
...
@@ -88,10 +93,11 @@ var storageClasses = []*storage.StorageClass{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"unsupported-mountoptions"
,
Name
:
"unsupported-mountoptions"
,
},
},
Provisioner
:
mockPluginName
,
Provisioner
:
mockPluginName
,
Parameters
:
class1Parameters
,
Parameters
:
class1Parameters
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
ReclaimPolicy
:
&
deleteReclaimPolicy
,
MountOptions
:
[]
string
{
"foo"
},
MountOptions
:
[]
string
{
"foo"
},
VolumeBindingMode
:
&
modeImmediate
,
},
},
}
}
...
...
pkg/controller/volume/persistentvolume/pv_controller_test.go
View file @
fd64c082
...
@@ -20,18 +20,26 @@ import (
...
@@ -20,18 +20,26 @@ import (
"testing"
"testing"
"time"
"time"
"k8s.io/klog"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
storagev1
"k8s.io/api/storage/v1"
storagev1
"k8s.io/api/storage/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/informers"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
core
"k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/cache"
"k8s.io/klog"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/features"
)
var
(
classNotHere
=
"not-here"
classNoMode
=
"no-mode"
classImmediateMode
=
"immediate-mode"
classWaitMode
=
"wait-mode"
)
)
// Test the real controller methods (add/update/delete claim/volume) with
// Test the real controller methods (add/update/delete claim/volume) with
...
@@ -264,16 +272,6 @@ func makeStorageClass(scName string, mode *storagev1.VolumeBindingMode) *storage
...
@@ -264,16 +272,6 @@ func makeStorageClass(scName string, mode *storagev1.VolumeBindingMode) *storage
}
}
func
TestDelayBinding
(
t
*
testing
.
T
)
{
func
TestDelayBinding
(
t
*
testing
.
T
)
{
var
(
classNotHere
=
"not-here"
classNoMode
=
"no-mode"
classImmediateMode
=
"immediate-mode"
classWaitMode
=
"wait-mode"
modeImmediate
=
storagev1
.
VolumeBindingImmediate
modeWait
=
storagev1
.
VolumeBindingWaitForFirstConsumer
)
tests
:=
map
[
string
]
struct
{
tests
:=
map
[
string
]
struct
{
pvc
*
v1
.
PersistentVolumeClaim
pvc
*
v1
.
PersistentVolumeClaim
shouldDelay
bool
shouldDelay
bool
...
@@ -325,22 +323,8 @@ func TestDelayBinding(t *testing.T) {
...
@@ -325,22 +323,8 @@ func TestDelayBinding(t *testing.T) {
}
}
}
}
// When volumeScheduling feature gate is disabled, should always be delayed
name
:=
"volumeScheduling-feature-disabled"
shouldDelay
,
err
:=
ctrl
.
shouldDelayBinding
(
makePVCClass
(
&
classWaitMode
,
false
))
if
err
!=
nil
{
t
.
Errorf
(
"Test %q returned error: %v"
,
name
,
err
)
}
if
shouldDelay
{
t
.
Errorf
(
"Test %q returned true, expected false"
,
name
)
}
// Enable volumeScheduling feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
for
name
,
test
:=
range
tests
{
for
name
,
test
:=
range
tests
{
shouldDelay
,
err
=
ctrl
.
shouldDelayBinding
(
test
.
pvc
)
shouldDelay
,
err
:
=
ctrl
.
shouldDelayBinding
(
test
.
pvc
)
if
err
!=
nil
&&
!
test
.
shouldFail
{
if
err
!=
nil
&&
!
test
.
shouldFail
{
t
.
Errorf
(
"Test %q returned error: %v"
,
name
,
err
)
t
.
Errorf
(
"Test %q returned error: %v"
,
name
,
err
)
}
}
...
@@ -352,3 +336,24 @@ func TestDelayBinding(t *testing.T) {
...
@@ -352,3 +336,24 @@ func TestDelayBinding(t *testing.T) {
}
}
}
}
}
}
func
TestDelayBindingDisabled
(
t
*
testing
.
T
)
{
// When volumeScheduling feature gate is disabled, should always be immediate
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
client
:=
&
fake
.
Clientset
{}
informerFactory
:=
informers
.
NewSharedInformerFactory
(
client
,
controller
.
NoResyncPeriodFunc
())
classInformer
:=
informerFactory
.
Storage
()
.
V1
()
.
StorageClasses
()
ctrl
:=
&
PersistentVolumeController
{
classLister
:
classInformer
.
Lister
(),
}
name
:=
"volumeScheduling-feature-disabled"
shouldDelay
,
err
:=
ctrl
.
shouldDelayBinding
(
makePVCClass
(
&
classWaitMode
,
false
))
if
err
!=
nil
{
t
.
Errorf
(
"Test %q returned error: %v"
,
name
,
err
)
}
if
shouldDelay
{
t
.
Errorf
(
"Test %q returned true, expected false"
,
name
)
}
}
pkg/controller/volume/persistentvolume/scheduler_binder_test.go
View file @
fd64c082
...
@@ -30,7 +30,6 @@ import (
...
@@ -30,7 +30,6 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/diff"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers"
"k8s.io/client-go/informers"
clientset
"k8s.io/client-go/kubernetes"
clientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/fake"
...
@@ -728,10 +727,6 @@ func TestFindPodVolumesWithoutProvisioning(t *testing.T) {
...
@@ -728,10 +727,6 @@ func TestFindPodVolumesWithoutProvisioning(t *testing.T) {
},
},
}
}
// Set feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
testNode
:=
&
v1
.
Node
{
testNode
:=
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node1"
,
Name
:
"node1"
,
...
@@ -844,10 +839,6 @@ func TestFindPodVolumesWithProvisioning(t *testing.T) {
...
@@ -844,10 +839,6 @@ func TestFindPodVolumesWithProvisioning(t *testing.T) {
},
},
}
}
// Set VolumeScheduling feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
testNode
:=
&
v1
.
Node
{
testNode
:=
&
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node1"
,
Name
:
"node1"
,
...
@@ -1426,10 +1417,6 @@ func TestBindPodVolumes(t *testing.T) {
...
@@ -1426,10 +1417,6 @@ func TestBindPodVolumes(t *testing.T) {
}
}
func
TestFindAssumeVolumes
(
t
*
testing
.
T
)
{
func
TestFindAssumeVolumes
(
t
*
testing
.
T
)
{
// Set feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
defer
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
// Test case
// Test case
podPVCs
:=
[]
*
v1
.
PersistentVolumeClaim
{
unboundPVC
}
podPVCs
:=
[]
*
v1
.
PersistentVolumeClaim
{
unboundPVC
}
pvs
:=
[]
*
v1
.
PersistentVolume
{
pvNode2
,
pvNode1a
,
pvNode1c
}
pvs
:=
[]
*
v1
.
PersistentVolume
{
pvNode2
,
pvNode1a
,
pvNode1c
}
...
...
pkg/kubelet/volumemanager/populator/BUILD
View file @
fd64c082
...
@@ -67,6 +67,7 @@ go_test(
...
@@ -67,6 +67,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
],
],
...
...
pkg/kubelet/volumemanager/populator/desired_state_of_world_populator_test.go
View file @
fd64c082
...
@@ -27,6 +27,7 @@ import (
...
@@ -27,6 +27,7 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
core
"k8s.io/client-go/testing"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/features"
...
@@ -151,7 +152,7 @@ func TestFindAndAddNewPods_FindAndRemoveDeletedPods(t *testing.T) {
...
@@ -151,7 +152,7 @@ func TestFindAndAddNewPods_FindAndRemoveDeletedPods(t *testing.T) {
func
TestFindAndAddNewPods_FindAndRemoveDeletedPods_Valid_Block_VolumeDevices
(
t
*
testing
.
T
)
{
func
TestFindAndAddNewPods_FindAndRemoveDeletedPods_Valid_Block_VolumeDevices
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)(
)
// create dswp
// create dswp
mode
:=
v1
.
PersistentVolumeBlock
mode
:=
v1
.
PersistentVolumeBlock
...
@@ -256,9 +257,6 @@ func TestFindAndAddNewPods_FindAndRemoveDeletedPods_Valid_Block_VolumeDevices(t
...
@@ -256,9 +257,6 @@ func TestFindAndAddNewPods_FindAndRemoveDeletedPods_Valid_Block_VolumeDevices(t
expectedVolumeName
)
expectedVolumeName
)
}
}
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
TestCreateVolumeSpec_Valid_File_VolumeMounts
(
t
*
testing
.
T
)
{
func
TestCreateVolumeSpec_Valid_File_VolumeMounts
(
t
*
testing
.
T
)
{
...
@@ -309,7 +307,7 @@ func TestCreateVolumeSpec_Valid_File_VolumeMounts(t *testing.T) {
...
@@ -309,7 +307,7 @@ func TestCreateVolumeSpec_Valid_File_VolumeMounts(t *testing.T) {
func
TestCreateVolumeSpec_Valid_Block_VolumeDevices
(
t
*
testing
.
T
)
{
func
TestCreateVolumeSpec_Valid_Block_VolumeDevices
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)(
)
// create dswp
// create dswp
mode
:=
v1
.
PersistentVolumeBlock
mode
:=
v1
.
PersistentVolumeBlock
...
@@ -354,14 +352,11 @@ func TestCreateVolumeSpec_Valid_Block_VolumeDevices(t *testing.T) {
...
@@ -354,14 +352,11 @@ func TestCreateVolumeSpec_Valid_Block_VolumeDevices(t *testing.T) {
if
volumeSpec
==
nil
||
err
!=
nil
{
if
volumeSpec
==
nil
||
err
!=
nil
{
t
.
Fatalf
(
"Failed to create volumeSpec with combination of block mode and volumeDevices. err: %v"
,
err
)
t
.
Fatalf
(
"Failed to create volumeSpec with combination of block mode and volumeDevices. err: %v"
,
err
)
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
TestCreateVolumeSpec_Invalid_File_VolumeDevices
(
t
*
testing
.
T
)
{
func
TestCreateVolumeSpec_Invalid_File_VolumeDevices
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)(
)
// create dswp
// create dswp
mode
:=
v1
.
PersistentVolumeFilesystem
mode
:=
v1
.
PersistentVolumeFilesystem
...
@@ -406,14 +401,11 @@ func TestCreateVolumeSpec_Invalid_File_VolumeDevices(t *testing.T) {
...
@@ -406,14 +401,11 @@ func TestCreateVolumeSpec_Invalid_File_VolumeDevices(t *testing.T) {
if
volumeSpec
!=
nil
||
err
==
nil
{
if
volumeSpec
!=
nil
||
err
==
nil
{
t
.
Fatalf
(
"Unexpected volumeMode and volumeMounts/volumeDevices combination is accepted"
)
t
.
Fatalf
(
"Unexpected volumeMode and volumeMounts/volumeDevices combination is accepted"
)
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
TestCreateVolumeSpec_Invalid_Block_VolumeMounts
(
t
*
testing
.
T
)
{
func
TestCreateVolumeSpec_Invalid_Block_VolumeMounts
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)(
)
// create dswp
// create dswp
mode
:=
v1
.
PersistentVolumeBlock
mode
:=
v1
.
PersistentVolumeBlock
...
@@ -458,9 +450,6 @@ func TestCreateVolumeSpec_Invalid_Block_VolumeMounts(t *testing.T) {
...
@@ -458,9 +450,6 @@ func TestCreateVolumeSpec_Invalid_Block_VolumeMounts(t *testing.T) {
if
volumeSpec
!=
nil
||
err
==
nil
{
if
volumeSpec
!=
nil
||
err
==
nil
{
t
.
Fatalf
(
"Unexpected volumeMode and volumeMounts/volumeDevices combination is accepted"
)
t
.
Fatalf
(
"Unexpected volumeMode and volumeMounts/volumeDevices combination is accepted"
)
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
TestCheckVolumeFSResize
(
t
*
testing
.
T
)
{
func
TestCheckVolumeFSResize
(
t
*
testing
.
T
)
{
...
@@ -510,7 +499,7 @@ func TestCheckVolumeFSResize(t *testing.T) {
...
@@ -510,7 +499,7 @@ func TestCheckVolumeFSResize(t *testing.T) {
reconcileASW
(
fakeASW
,
fakeDSW
,
t
)
reconcileASW
(
fakeASW
,
fakeDSW
,
t
)
// No resize request for volume, volumes in ASW shouldn't be marked as fsResizeRequired.
// No resize request for volume, volumes in ASW shouldn't be marked as fsResizeRequired.
setExpandOnlinePersistentVolumesFeatureGate
(
"true"
,
t
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandInUsePersistentVolumes
,
true
)(
)
resizeRequiredVolumes
:=
reprocess
(
dswp
,
uniquePodName
,
fakeDSW
,
fakeASW
)
resizeRequiredVolumes
:=
reprocess
(
dswp
,
uniquePodName
,
fakeDSW
,
fakeASW
)
if
len
(
resizeRequiredVolumes
)
>
0
{
if
len
(
resizeRequiredVolumes
)
>
0
{
t
.
Fatalf
(
"No resize request for any volumes, but found resize required volumes in ASW: %v"
,
resizeRequiredVolumes
)
t
.
Fatalf
(
"No resize request for any volumes, but found resize required volumes in ASW: %v"
,
resizeRequiredVolumes
)
...
@@ -521,14 +510,14 @@ func TestCheckVolumeFSResize(t *testing.T) {
...
@@ -521,14 +510,14 @@ func TestCheckVolumeFSResize(t *testing.T) {
pvc
.
Spec
.
Resources
.
Requests
=
volumeCapacity
(
2
)
pvc
.
Spec
.
Resources
.
Requests
=
volumeCapacity
(
2
)
// Disable the feature gate, so volume shouldn't be marked as fsResizeRequired.
// Disable the feature gate, so volume shouldn't be marked as fsResizeRequired.
setExpandOnlinePersistentVolumesFeatureGate
(
"false"
,
t
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandInUsePersistentVolumes
,
false
)(
)
resizeRequiredVolumes
=
reprocess
(
dswp
,
uniquePodName
,
fakeDSW
,
fakeASW
)
resizeRequiredVolumes
=
reprocess
(
dswp
,
uniquePodName
,
fakeDSW
,
fakeASW
)
if
len
(
resizeRequiredVolumes
)
>
0
{
if
len
(
resizeRequiredVolumes
)
>
0
{
t
.
Fatalf
(
"Feature gate disabled, but found resize required volumes in ASW: %v"
,
resizeRequiredVolumes
)
t
.
Fatalf
(
"Feature gate disabled, but found resize required volumes in ASW: %v"
,
resizeRequiredVolumes
)
}
}
// Make volume used as ReadOnly, so volume shouldn't be marked as fsResizeRequired.
// Make volume used as ReadOnly, so volume shouldn't be marked as fsResizeRequired.
setExpandOnlinePersistentVolumesFeatureGate
(
"true"
,
t
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandInUsePersistentVolumes
,
true
)(
)
pod
.
Spec
.
Containers
[
0
]
.
VolumeMounts
[
0
]
.
ReadOnly
=
true
pod
.
Spec
.
Containers
[
0
]
.
VolumeMounts
[
0
]
.
ReadOnly
=
true
resizeRequiredVolumes
=
reprocess
(
dswp
,
uniquePodName
,
fakeDSW
,
fakeASW
)
resizeRequiredVolumes
=
reprocess
(
dswp
,
uniquePodName
,
fakeDSW
,
fakeASW
)
if
len
(
resizeRequiredVolumes
)
>
0
{
if
len
(
resizeRequiredVolumes
)
>
0
{
...
@@ -561,13 +550,6 @@ func volumeCapacity(size int) v1.ResourceList {
...
@@ -561,13 +550,6 @@ func volumeCapacity(size int) v1.ResourceList {
return
v1
.
ResourceList
{
v1
.
ResourceStorage
:
resource
.
MustParse
(
fmt
.
Sprintf
(
"%dGi"
,
size
))}
return
v1
.
ResourceList
{
v1
.
ResourceStorage
:
resource
.
MustParse
(
fmt
.
Sprintf
(
"%dGi"
,
size
))}
}
}
func
setExpandOnlinePersistentVolumesFeatureGate
(
value
string
,
t
*
testing
.
T
)
{
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
fmt
.
Sprintf
(
"%s=%s"
,
features
.
ExpandInUsePersistentVolumes
,
value
))
if
err
!=
nil
{
t
.
Fatalf
(
"Set ExpandInUsePersistentVolumes feature gate to %s failed: %v"
,
value
,
err
)
}
}
func
reconcileASW
(
asw
cache
.
ActualStateOfWorld
,
dsw
cache
.
DesiredStateOfWorld
,
t
*
testing
.
T
)
{
func
reconcileASW
(
asw
cache
.
ActualStateOfWorld
,
dsw
cache
.
DesiredStateOfWorld
,
t
*
testing
.
T
)
{
for
_
,
volumeToMount
:=
range
dsw
.
GetVolumesToMount
()
{
for
_
,
volumeToMount
:=
range
dsw
.
GetVolumesToMount
()
{
err
:=
asw
.
MarkVolumeAsAttached
(
volumeToMount
.
VolumeName
,
volumeToMount
.
VolumeSpec
,
""
,
""
)
err
:=
asw
.
MarkVolumeAsAttached
(
volumeToMount
.
VolumeName
,
volumeToMount
.
VolumeSpec
,
""
,
""
)
...
...
pkg/kubelet/volumemanager/reconciler/BUILD
View file @
fd64c082
...
@@ -52,6 +52,7 @@ go_test(
...
@@ -52,6 +52,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
...
...
pkg/kubelet/volumemanager/reconciler/reconciler_test.go
View file @
fd64c082
...
@@ -29,6 +29,7 @@ import (
...
@@ -29,6 +29,7 @@ import (
k8stypes
"k8s.io/apimachinery/pkg/types"
k8stypes
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
core
"k8s.io/client-go/testing"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/tools/record"
...
@@ -439,7 +440,8 @@ func Test_Run_Positive_VolumeUnmountControllerAttachEnabled(t *testing.T) {
...
@@ -439,7 +440,8 @@ func Test_Run_Positive_VolumeUnmountControllerAttachEnabled(t *testing.T) {
// no detach/teardownDevice calls.
// no detach/teardownDevice calls.
func
Test_Run_Positive_VolumeAttachAndMap
(
t
*
testing
.
T
)
{
func
Test_Run_Positive_VolumeAttachAndMap
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
// Arrange
// Arrange
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
...
@@ -513,9 +515,6 @@ func Test_Run_Positive_VolumeAttachAndMap(t *testing.T) {
...
@@ -513,9 +515,6 @@ func Test_Run_Positive_VolumeAttachAndMap(t *testing.T) {
1
/* expectedGetMapDeviceCallCount */
,
fakePlugin
))
1
/* expectedGetMapDeviceCallCount */
,
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroTearDownDeviceCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroTearDownDeviceCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroDetachCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroDetachCallCount
(
fakePlugin
))
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
// Populates desiredStateOfWorld cache with one volume/pod.
// Populates desiredStateOfWorld cache with one volume/pod.
...
@@ -526,7 +525,8 @@ func Test_Run_Positive_VolumeAttachAndMap(t *testing.T) {
...
@@ -526,7 +525,8 @@ func Test_Run_Positive_VolumeAttachAndMap(t *testing.T) {
// Verifies there are no attach/detach calls.
// Verifies there are no attach/detach calls.
func
Test_Run_Positive_BlockVolumeMapControllerAttachEnabled
(
t
*
testing
.
T
)
{
func
Test_Run_Positive_BlockVolumeMapControllerAttachEnabled
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
// Arrange
// Arrange
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
...
@@ -601,9 +601,6 @@ func Test_Run_Positive_BlockVolumeMapControllerAttachEnabled(t *testing.T) {
...
@@ -601,9 +601,6 @@ func Test_Run_Positive_BlockVolumeMapControllerAttachEnabled(t *testing.T) {
1
/* expectedGetMapDeviceCallCount */
,
fakePlugin
))
1
/* expectedGetMapDeviceCallCount */
,
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroTearDownDeviceCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroTearDownDeviceCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroDetachCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroDetachCallCount
(
fakePlugin
))
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
// Populates desiredStateOfWorld cache with one volume/pod.
// Populates desiredStateOfWorld cache with one volume/pod.
...
@@ -614,7 +611,8 @@ func Test_Run_Positive_BlockVolumeMapControllerAttachEnabled(t *testing.T) {
...
@@ -614,7 +611,8 @@ func Test_Run_Positive_BlockVolumeMapControllerAttachEnabled(t *testing.T) {
// Verifies one detach/teardownDevice calls are issued.
// Verifies one detach/teardownDevice calls are issued.
func
Test_Run_Positive_BlockVolumeAttachMapUnmapDetach
(
t
*
testing
.
T
)
{
func
Test_Run_Positive_BlockVolumeAttachMapUnmapDetach
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
// Arrange
// Arrange
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
...
@@ -698,9 +696,6 @@ func Test_Run_Positive_BlockVolumeAttachMapUnmapDetach(t *testing.T) {
...
@@ -698,9 +696,6 @@ func Test_Run_Positive_BlockVolumeAttachMapUnmapDetach(t *testing.T) {
1
/* expectedTearDownDeviceCallCount */
,
fakePlugin
))
1
/* expectedTearDownDeviceCallCount */
,
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyDetachCallCount
(
assert
.
NoError
(
t
,
volumetesting
.
VerifyDetachCallCount
(
1
/* expectedDetachCallCount */
,
fakePlugin
))
1
/* expectedDetachCallCount */
,
fakePlugin
))
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
// Populates desiredStateOfWorld cache with one volume/pod.
// Populates desiredStateOfWorld cache with one volume/pod.
...
@@ -712,7 +707,8 @@ func Test_Run_Positive_BlockVolumeAttachMapUnmapDetach(t *testing.T) {
...
@@ -712,7 +707,8 @@ func Test_Run_Positive_BlockVolumeAttachMapUnmapDetach(t *testing.T) {
// Verifies there are no attach/detach calls made.
// Verifies there are no attach/detach calls made.
func
Test_Run_Positive_VolumeUnmapControllerAttachEnabled
(
t
*
testing
.
T
)
{
func
Test_Run_Positive_VolumeUnmapControllerAttachEnabled
(
t
*
testing
.
T
)
{
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
// Arrange
// Arrange
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
volumePluginMgr
,
fakePlugin
:=
volumetesting
.
GetTestVolumePluginMgr
(
t
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
dsw
:=
cache
.
NewDesiredStateOfWorld
(
volumePluginMgr
)
...
@@ -797,9 +793,6 @@ func Test_Run_Positive_VolumeUnmapControllerAttachEnabled(t *testing.T) {
...
@@ -797,9 +793,6 @@ func Test_Run_Positive_VolumeUnmapControllerAttachEnabled(t *testing.T) {
assert
.
NoError
(
t
,
volumetesting
.
VerifyTearDownDeviceCallCount
(
assert
.
NoError
(
t
,
volumetesting
.
VerifyTearDownDeviceCallCount
(
1
/* expectedTearDownDeviceCallCount */
,
fakePlugin
))
1
/* expectedTearDownDeviceCallCount */
,
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroDetachCallCount
(
fakePlugin
))
assert
.
NoError
(
t
,
volumetesting
.
VerifyZeroDetachCallCount
(
fakePlugin
))
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
Test_GenerateMapVolumeFunc_Plugin_Not_Found
(
t
*
testing
.
T
)
{
func
Test_GenerateMapVolumeFunc_Plugin_Not_Found
(
t
*
testing
.
T
)
{
...
@@ -821,7 +814,8 @@ func Test_GenerateMapVolumeFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -821,7 +814,8 @@ func Test_GenerateMapVolumeFunc_Plugin_Not_Found(t *testing.T) {
}
}
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
for
name
,
tc
:=
range
testCases
{
for
name
,
tc
:=
range
testCases
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
volumePluginMgr
:=
&
volume
.
VolumePluginMgr
{}
volumePluginMgr
:=
&
volume
.
VolumePluginMgr
{}
...
@@ -853,8 +847,6 @@ func Test_GenerateMapVolumeFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -853,8 +847,6 @@ func Test_GenerateMapVolumeFunc_Plugin_Not_Found(t *testing.T) {
}
}
})
})
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
Test_GenerateUnmapVolumeFunc_Plugin_Not_Found
(
t
*
testing
.
T
)
{
func
Test_GenerateUnmapVolumeFunc_Plugin_Not_Found
(
t
*
testing
.
T
)
{
...
@@ -876,7 +868,8 @@ func Test_GenerateUnmapVolumeFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -876,7 +868,8 @@ func Test_GenerateUnmapVolumeFunc_Plugin_Not_Found(t *testing.T) {
}
}
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
for
name
,
tc
:=
range
testCases
{
for
name
,
tc
:=
range
testCases
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
volumePluginMgr
:=
&
volume
.
VolumePluginMgr
{}
volumePluginMgr
:=
&
volume
.
VolumePluginMgr
{}
...
@@ -900,8 +893,6 @@ func Test_GenerateUnmapVolumeFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -900,8 +893,6 @@ func Test_GenerateUnmapVolumeFunc_Plugin_Not_Found(t *testing.T) {
}
}
})
})
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
func
Test_GenerateUnmapDeviceFunc_Plugin_Not_Found
(
t
*
testing
.
T
)
{
func
Test_GenerateUnmapDeviceFunc_Plugin_Not_Found
(
t
*
testing
.
T
)
{
...
@@ -923,7 +914,8 @@ func Test_GenerateUnmapDeviceFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -923,7 +914,8 @@ func Test_GenerateUnmapDeviceFunc_Plugin_Not_Found(t *testing.T) {
}
}
// Enable BlockVolume feature gate
// Enable BlockVolume feature gate
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
BlockVolume
,
true
)()
for
name
,
tc
:=
range
testCases
{
for
name
,
tc
:=
range
testCases
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
volumePluginMgr
:=
&
volume
.
VolumePluginMgr
{}
volumePluginMgr
:=
&
volume
.
VolumePluginMgr
{}
...
@@ -946,8 +938,6 @@ func Test_GenerateUnmapDeviceFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -946,8 +938,6 @@ func Test_GenerateUnmapDeviceFunc_Plugin_Not_Found(t *testing.T) {
}
}
})
})
}
}
// Rollback feature gate to false.
utilfeature
.
DefaultFeatureGate
.
Set
(
"BlockVolume=false"
)
}
}
// Populates desiredStateOfWorld cache with one volume/pod.
// Populates desiredStateOfWorld cache with one volume/pod.
...
@@ -957,7 +947,8 @@ func Test_GenerateUnmapDeviceFunc_Plugin_Not_Found(t *testing.T) {
...
@@ -957,7 +947,8 @@ func Test_GenerateUnmapDeviceFunc_Plugin_Not_Found(t *testing.T) {
// Mark volume as fsResizeRequired in ASW.
// Mark volume as fsResizeRequired in ASW.
// Verifies volume's fsResizeRequired flag is cleared later.
// Verifies volume's fsResizeRequired flag is cleared later.
func
Test_Run_Positive_VolumeFSResizeControllerAttachEnabled
(
t
*
testing
.
T
)
{
func
Test_Run_Positive_VolumeFSResizeControllerAttachEnabled
(
t
*
testing
.
T
)
{
utilfeature
.
DefaultFeatureGate
.
Set
(
fmt
.
Sprintf
(
"%s=true"
,
features
.
ExpandInUsePersistentVolumes
))
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandInUsePersistentVolumes
,
true
)()
pv
:=
&
v1
.
PersistentVolume
{
pv
:=
&
v1
.
PersistentVolume
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"pv"
,
Name
:
"pv"
,
...
...
pkg/volume/util/BUILD
View file @
fd64c082
...
@@ -60,6 +60,7 @@ go_test(
...
@@ -60,6 +60,7 @@ go_test(
deps = [
deps = [
"//pkg/apis/core/install:go_default_library",
"//pkg/apis/core/install:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/util/mount:go_default_library",
"//pkg/util/mount:go_default_library",
"//pkg/util/slice:go_default_library",
"//pkg/util/slice:go_default_library",
...
@@ -70,6 +71,7 @@ go_test(
...
@@ -70,6 +71,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
],
],
)
)
...
...
pkg/volume/util/util_test.go
View file @
fd64c082
...
@@ -24,12 +24,15 @@ import (
...
@@ -24,12 +24,15 @@ import (
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
utiltesting
"k8s.io/client-go/util/testing"
utiltesting
"k8s.io/client-go/util/testing"
// util.go uses api.Codecs.LegacyCodec so import this package to do some
// util.go uses api.Codecs.LegacyCodec so import this package to do some
// resource initialization.
// resource initialization.
"hash/fnv"
"hash/fnv"
_
"k8s.io/kubernetes/pkg/apis/core/install"
_
"k8s.io/kubernetes/pkg/apis/core/install"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/util/mount"
"reflect"
"reflect"
...
@@ -1426,59 +1429,54 @@ func TestSelectZoneForVolume(t *testing.T) {
...
@@ -1426,59 +1429,54 @@ func TestSelectZoneForVolume(t *testing.T) {
}
}
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=false"
)
t
.
Run
(
test
.
Name
,
func
(
t
*
testing
.
T
)
{
if
test
.
VolumeScheduling
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
test
.
VolumeScheduling
)()
utilfeature
.
DefaultFeatureGate
.
Set
(
"VolumeScheduling=true"
)
}
var
zonesParameter
,
zonesWithNodes
sets
.
String
var
zonesParameter
,
zonesWithNodes
sets
.
String
var
err
error
var
err
error
if
test
.
Zones
!=
""
{
if
test
.
Zones
!=
""
{
zonesParameter
,
err
=
ZonesToSet
(
test
.
Zones
)
zonesParameter
,
err
=
ZonesToSet
(
test
.
Zones
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Error
f
(
"Could not convert Zones to a set: %s. This is a test error %s"
,
test
.
Zones
,
test
.
Name
)
t
.
Fatal
f
(
"Could not convert Zones to a set: %s. This is a test error %s"
,
test
.
Zones
,
test
.
Name
)
continue
}
}
}
}
if
test
.
ZonesWithNodes
!=
""
{
if
test
.
ZonesWithNodes
!=
""
{
zonesWithNodes
,
err
=
ZonesToSet
(
test
.
ZonesWithNodes
)
zonesWithNodes
,
err
=
ZonesToSet
(
test
.
ZonesWithNodes
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Error
f
(
"Could not convert specified ZonesWithNodes to a set: %s. This is a test error %s"
,
test
.
ZonesWithNodes
,
test
.
Name
)
t
.
Fatal
f
(
"Could not convert specified ZonesWithNodes to a set: %s. This is a test error %s"
,
test
.
ZonesWithNodes
,
test
.
Name
)
continue
}
}
}
}
zone
,
err
:=
SelectZoneForVolume
(
test
.
ZonePresent
,
test
.
ZonesPresent
,
test
.
Zone
,
zonesParameter
,
zonesWithNodes
,
test
.
Node
,
test
.
AllowedTopologies
,
test
.
Name
)
zone
,
err
:=
SelectZoneForVolume
(
test
.
ZonePresent
,
test
.
ZonesPresent
,
test
.
Zone
,
zonesParameter
,
zonesWithNodes
,
test
.
Node
,
test
.
AllowedTopologies
,
test
.
Name
)
if
test
.
Reject
&&
err
==
nil
{
if
test
.
Reject
&&
err
==
nil
{
t
.
Errorf
(
"Unexpected zone from SelectZoneForVolume for %s"
,
zone
)
t
.
Errorf
(
"Unexpected zone from SelectZoneForVolume for %s"
,
zone
)
continue
}
if
!
test
.
Reject
{
if
err
!=
nil
{
t
.
Errorf
(
"Unexpected error from SelectZoneForVolume for %s; Error: %v"
,
test
.
Name
,
err
)
continue
}
}
if
test
.
ExpectSpecificZone
==
true
{
if
!
test
.
Reject
{
if
zone
!=
test
.
ExpectedZone
{
if
err
!=
nil
{
t
.
Errorf
(
"
Expected zone %v does not match obtained zone %v for %s"
,
test
.
ExpectedZone
,
zone
,
test
.
Name
)
t
.
Errorf
(
"
Unexpected error from SelectZoneForVolume for %s; Error: %v"
,
test
.
Name
,
err
)
}
}
continue
}
expectedZones
,
err
:=
ZonesToSet
(
test
.
ExpectedZones
)
if
test
.
ExpectSpecificZone
==
true
{
if
err
!=
nil
{
if
zone
!=
test
.
ExpectedZone
{
t
.
Errorf
(
"Could not convert ExpectedZones to a set: %s. This is a test error"
,
test
.
ExpectedZones
)
t
.
Errorf
(
"Expected zone %v does not match obtained zone %v for %s"
,
test
.
ExpectedZone
,
zone
,
test
.
Name
)
continue
}
}
}
if
!
expectedZones
.
Has
(
zone
)
{
t
.
Errorf
(
"Obtained zone %s not member of expectedZones %s"
,
zone
,
expectedZones
)
if
test
.
ExpectedZones
!=
""
{
expectedZones
,
err
:=
ZonesToSet
(
test
.
ExpectedZones
)
if
err
!=
nil
{
t
.
Fatalf
(
"Could not convert ExpectedZones to a set: %s. This is a test error"
,
test
.
ExpectedZones
)
}
if
!
expectedZones
.
Has
(
zone
)
{
t
.
Errorf
(
"Obtained zone %s not member of expectedZones %s"
,
zone
,
expectedZones
)
}
}
}
}
}
}
)
}
}
}
}
...
...
plugin/pkg/admission/resourcequota/BUILD
View file @
fd64c082
...
@@ -56,6 +56,7 @@ go_test(
...
@@ -56,6 +56,7 @@ go_test(
deps = [
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/features:go_default_library",
"//pkg/quota/v1/generic:go_default_library",
"//pkg/quota/v1/generic:go_default_library",
"//pkg/quota/v1/install:go_default_library",
"//pkg/quota/v1/install:go_default_library",
"//plugin/pkg/admission/resourcequota/apis/resourcequota:go_default_library",
"//plugin/pkg/admission/resourcequota/apis/resourcequota:go_default_library",
...
@@ -65,6 +66,7 @@ go_test(
...
@@ -65,6 +66,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
...
...
plugin/pkg/admission/resourcequota/admission_test.go
View file @
fd64c082
...
@@ -31,12 +31,14 @@ import (
...
@@ -31,12 +31,14 @@ import (
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/informers"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/fake"
testcore
"k8s.io/client-go/testing"
testcore
"k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/cache"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/quota/v1/generic"
"k8s.io/kubernetes/pkg/quota/v1/generic"
"k8s.io/kubernetes/pkg/quota/v1/install"
"k8s.io/kubernetes/pkg/quota/v1/install"
resourcequotaapi
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota"
resourcequotaapi
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota"
...
@@ -452,15 +454,7 @@ func TestAdmitHandlesNegativePVCUpdates(t *testing.T) {
...
@@ -452,15 +454,7 @@ func TestAdmitHandlesNegativePVCUpdates(t *testing.T) {
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
defer
close
(
stopCh
)
defer
close
(
stopCh
)
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandPersistentVolumes
,
true
)()
if
err
!=
nil
{
t
.
Errorf
(
"Failed to enable feature gate for LocalPersistentVolumes: %v"
,
err
)
return
}
defer
func
()
{
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=false"
)
}()
kubeClient
:=
fake
.
NewSimpleClientset
(
resourceQuota
)
kubeClient
:=
fake
.
NewSimpleClientset
(
resourceQuota
)
informerFactory
:=
informers
.
NewSharedInformerFactory
(
kubeClient
,
controller
.
NoResyncPeriodFunc
())
informerFactory
:=
informers
.
NewSharedInformerFactory
(
kubeClient
,
controller
.
NoResyncPeriodFunc
())
...
@@ -491,7 +485,7 @@ func TestAdmitHandlesNegativePVCUpdates(t *testing.T) {
...
@@ -491,7 +485,7 @@ func TestAdmitHandlesNegativePVCUpdates(t *testing.T) {
},
},
}
}
err
=
handler
.
Validate
(
admission
.
NewAttributesRecord
(
newPVC
,
oldPVC
,
api
.
Kind
(
"PersistentVolumeClaim"
)
.
WithVersion
(
"version"
),
newPVC
.
Namespace
,
newPVC
.
Name
,
corev1
.
Resource
(
"persistentvolumeclaims"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Update
,
false
,
nil
))
err
:
=
handler
.
Validate
(
admission
.
NewAttributesRecord
(
newPVC
,
oldPVC
,
api
.
Kind
(
"PersistentVolumeClaim"
)
.
WithVersion
(
"version"
),
newPVC
.
Namespace
,
newPVC
.
Name
,
corev1
.
Resource
(
"persistentvolumeclaims"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Update
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Unexpected error: %v"
,
err
)
t
.
Errorf
(
"Unexpected error: %v"
,
err
)
}
}
...
@@ -515,15 +509,7 @@ func TestAdmitHandlesPVCUpdates(t *testing.T) {
...
@@ -515,15 +509,7 @@ func TestAdmitHandlesPVCUpdates(t *testing.T) {
},
},
}
}
err
:=
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=true"
)
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
ExpandPersistentVolumes
,
true
)()
if
err
!=
nil
{
t
.
Errorf
(
"Failed to enable feature gate for LocalPersistentVolumes: %v"
,
err
)
return
}
defer
func
()
{
utilfeature
.
DefaultFeatureGate
.
Set
(
"ExpandPersistentVolumes=false"
)
}()
// start up quota system
// start up quota system
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
...
@@ -558,7 +544,7 @@ func TestAdmitHandlesPVCUpdates(t *testing.T) {
...
@@ -558,7 +544,7 @@ func TestAdmitHandlesPVCUpdates(t *testing.T) {
},
},
}
}
err
=
handler
.
Validate
(
admission
.
NewAttributesRecord
(
newPVC
,
oldPVC
,
api
.
Kind
(
"PersistentVolumeClaim"
)
.
WithVersion
(
"version"
),
newPVC
.
Namespace
,
newPVC
.
Name
,
corev1
.
Resource
(
"persistentvolumeclaims"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Update
,
false
,
nil
))
err
:
=
handler
.
Validate
(
admission
.
NewAttributesRecord
(
newPVC
,
oldPVC
,
api
.
Kind
(
"PersistentVolumeClaim"
)
.
WithVersion
(
"version"
),
newPVC
.
Namespace
,
newPVC
.
Name
,
corev1
.
Resource
(
"persistentvolumeclaims"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Update
,
false
,
nil
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Unexpected error: %v"
,
err
)
t
.
Errorf
(
"Unexpected error: %v"
,
err
)
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment