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
c822e3e1
Commit
c822e3e1
authored
Dec 22, 2016
by
Michelle Au
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add [Volume] tag to all the volume-related E2E tests.
parent
04326905
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
70 additions
and
70 deletions
+70
-70
configmap.go
test/e2e/common/configmap.go
+11
-11
downwardapi_volume.go
test/e2e/common/downwardapi_volume.go
+13
-13
empty_dir.go
test/e2e/common/empty_dir.go
+19
-19
host_path.go
test/e2e/common/host_path.go
+3
-3
secrets.go
test/e2e/common/secrets.go
+7
-7
volumes.go
test/e2e/common/volumes.go
+2
-2
empty_dir_wrapper.go
test/e2e/empty_dir_wrapper.go
+3
-3
resource_quota.go
test/e2e/resource_quota.go
+2
-2
volume_provisioning.go
test/e2e/volume_provisioning.go
+2
-2
volumes.go
test/e2e/volumes.go
+8
-8
No files found.
test/e2e/common/configmap.go
View file @
c822e3e1
...
@@ -32,46 +32,46 @@ import (
...
@@ -32,46 +32,46 @@ import (
var
_
=
framework
.
KubeDescribe
(
"ConfigMap"
,
func
()
{
var
_
=
framework
.
KubeDescribe
(
"ConfigMap"
,
func
()
{
f
:=
framework
.
NewDefaultFramework
(
"configmap"
)
f
:=
framework
.
NewDefaultFramework
(
"configmap"
)
It
(
"should be consumable from pods in volume [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume [Conformance]
[Volume]
"
,
func
()
{
doConfigMapE2EWithoutMappings
(
f
,
0
,
0
,
nil
)
doConfigMapE2EWithoutMappings
(
f
,
0
,
0
,
nil
)
})
})
It
(
"should be consumable from pods in volume with defaultMode set [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with defaultMode set [Conformance]
[Volume]
"
,
func
()
{
defaultMode
:=
int32
(
0400
)
defaultMode
:=
int32
(
0400
)
doConfigMapE2EWithoutMappings
(
f
,
0
,
0
,
&
defaultMode
)
doConfigMapE2EWithoutMappings
(
f
,
0
,
0
,
&
defaultMode
)
})
})
It
(
"should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Feature:FSGroup]"
,
func
()
{
It
(
"should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Feature:FSGroup]
[Volume]
"
,
func
()
{
defaultMode
:=
int32
(
0440
)
/* setting fsGroup sets mode to at least 440 */
defaultMode
:=
int32
(
0440
)
/* setting fsGroup sets mode to at least 440 */
doConfigMapE2EWithoutMappings
(
f
,
1000
,
1001
,
&
defaultMode
)
doConfigMapE2EWithoutMappings
(
f
,
1000
,
1001
,
&
defaultMode
)
})
})
It
(
"should be consumable from pods in volume as non-root [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume as non-root [Conformance]
[Volume]
"
,
func
()
{
doConfigMapE2EWithoutMappings
(
f
,
1000
,
0
,
nil
)
doConfigMapE2EWithoutMappings
(
f
,
1000
,
0
,
nil
)
})
})
It
(
"should be consumable from pods in volume as non-root with FSGroup [Feature:FSGroup]"
,
func
()
{
It
(
"should be consumable from pods in volume as non-root with FSGroup [Feature:FSGroup]
[Volume]
"
,
func
()
{
doConfigMapE2EWithoutMappings
(
f
,
1000
,
1001
,
nil
)
doConfigMapE2EWithoutMappings
(
f
,
1000
,
1001
,
nil
)
})
})
It
(
"should be consumable from pods in volume with mappings [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with mappings [Conformance]
[Volume]
"
,
func
()
{
doConfigMapE2EWithMappings
(
f
,
0
,
0
,
nil
)
doConfigMapE2EWithMappings
(
f
,
0
,
0
,
nil
)
})
})
It
(
"should be consumable from pods in volume with mappings and Item mode set[Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with mappings and Item mode set[Conformance]
[Volume]
"
,
func
()
{
mode
:=
int32
(
0400
)
mode
:=
int32
(
0400
)
doConfigMapE2EWithMappings
(
f
,
0
,
0
,
&
mode
)
doConfigMapE2EWithMappings
(
f
,
0
,
0
,
&
mode
)
})
})
It
(
"should be consumable from pods in volume with mappings as non-root [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with mappings as non-root [Conformance]
[Volume]
"
,
func
()
{
doConfigMapE2EWithMappings
(
f
,
1000
,
0
,
nil
)
doConfigMapE2EWithMappings
(
f
,
1000
,
0
,
nil
)
})
})
It
(
"should be consumable from pods in volume with mappings as non-root with FSGroup [Feature:FSGroup]"
,
func
()
{
It
(
"should be consumable from pods in volume with mappings as non-root with FSGroup [Feature:FSGroup]
[Volume]
"
,
func
()
{
doConfigMapE2EWithMappings
(
f
,
1000
,
1001
,
nil
)
doConfigMapE2EWithMappings
(
f
,
1000
,
1001
,
nil
)
})
})
It
(
"updates should be reflected in volume [Conformance]"
,
func
()
{
It
(
"updates should be reflected in volume [Conformance]
[Volume]
"
,
func
()
{
// We may have to wait or a full sync period to elapse before the
// We may have to wait or a full sync period to elapse before the
// Kubelet projects the update into the volume and the container picks
// Kubelet projects the update into the volume and the container picks
...
@@ -236,7 +236,7 @@ var _ = framework.KubeDescribe("ConfigMap", func() {
...
@@ -236,7 +236,7 @@ var _ = framework.KubeDescribe("ConfigMap", func() {
})
})
})
})
It
(
"should be consumable in multiple volumes in the same pod [Conformance]"
,
func
()
{
It
(
"should be consumable in multiple volumes in the same pod [Conformance]
[Volume]
"
,
func
()
{
var
(
var
(
name
=
"configmap-test-volume-"
+
string
(
uuid
.
NewUUID
())
name
=
"configmap-test-volume-"
+
string
(
uuid
.
NewUUID
())
volumeName
=
"configmap-volume"
volumeName
=
"configmap-volume"
...
...
test/e2e/common/downwardapi_volume.go
View file @
c822e3e1
...
@@ -39,7 +39,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -39,7 +39,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
podClient
=
f
.
PodClient
()
podClient
=
f
.
PodClient
()
})
})
It
(
"should provide podname only [Conformance]"
,
func
()
{
It
(
"should provide podname only [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumePodForSimpleTest
(
podName
,
"/etc/podname"
)
pod
:=
downwardAPIVolumePodForSimpleTest
(
podName
,
"/etc/podname"
)
...
@@ -48,7 +48,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -48,7 +48,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should set DefaultMode on files [Conformance]"
,
func
()
{
It
(
"should set DefaultMode on files [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
defaultMode
:=
int32
(
0400
)
defaultMode
:=
int32
(
0400
)
pod
:=
downwardAPIVolumePodForModeTest
(
podName
,
"/etc/podname"
,
nil
,
&
defaultMode
)
pod
:=
downwardAPIVolumePodForModeTest
(
podName
,
"/etc/podname"
,
nil
,
&
defaultMode
)
...
@@ -58,7 +58,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -58,7 +58,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should set mode on item file [Conformance]"
,
func
()
{
It
(
"should set mode on item file [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
mode
:=
int32
(
0400
)
mode
:=
int32
(
0400
)
pod
:=
downwardAPIVolumePodForModeTest
(
podName
,
"/etc/podname"
,
&
mode
,
nil
)
pod
:=
downwardAPIVolumePodForModeTest
(
podName
,
"/etc/podname"
,
&
mode
,
nil
)
...
@@ -68,7 +68,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -68,7 +68,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should provide podname as non-root with fsgroup [Feature:FSGroup]"
,
func
()
{
It
(
"should provide podname as non-root with fsgroup [Feature:FSGroup]
[Volume]
"
,
func
()
{
podName
:=
"metadata-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"metadata-volume-"
+
string
(
uuid
.
NewUUID
())
uid
:=
int64
(
1001
)
uid
:=
int64
(
1001
)
gid
:=
int64
(
1234
)
gid
:=
int64
(
1234
)
...
@@ -82,7 +82,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -82,7 +82,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should provide podname as non-root with fsgroup and defaultMode [Feature:FSGroup]"
,
func
()
{
It
(
"should provide podname as non-root with fsgroup and defaultMode [Feature:FSGroup]
[Volume]
"
,
func
()
{
podName
:=
"metadata-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"metadata-volume-"
+
string
(
uuid
.
NewUUID
())
uid
:=
int64
(
1001
)
uid
:=
int64
(
1001
)
gid
:=
int64
(
1234
)
gid
:=
int64
(
1234
)
...
@@ -97,7 +97,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -97,7 +97,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should update labels on modification [Conformance]"
,
func
()
{
It
(
"should update labels on modification [Conformance]
[Volume]
"
,
func
()
{
labels
:=
map
[
string
]
string
{}
labels
:=
map
[
string
]
string
{}
labels
[
"key1"
]
=
"value1"
labels
[
"key1"
]
=
"value1"
labels
[
"key2"
]
=
"value2"
labels
[
"key2"
]
=
"value2"
...
@@ -124,7 +124,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -124,7 +124,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
podLogTimeout
,
framework
.
Poll
)
.
Should
(
ContainSubstring
(
"key3=
\"
value3
\"\n
"
))
podLogTimeout
,
framework
.
Poll
)
.
Should
(
ContainSubstring
(
"key3=
\"
value3
\"\n
"
))
})
})
It
(
"should update annotations on modification [Conformance]"
,
func
()
{
It
(
"should update annotations on modification [Conformance]
[Volume]
"
,
func
()
{
annotations
:=
map
[
string
]
string
{}
annotations
:=
map
[
string
]
string
{}
annotations
[
"builder"
]
=
"bar"
annotations
[
"builder"
]
=
"bar"
podName
:=
"annotationupdate"
+
string
(
uuid
.
NewUUID
())
podName
:=
"annotationupdate"
+
string
(
uuid
.
NewUUID
())
...
@@ -153,7 +153,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -153,7 +153,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
podLogTimeout
,
framework
.
Poll
)
.
Should
(
ContainSubstring
(
"builder=
\"
foo
\"\n
"
))
podLogTimeout
,
framework
.
Poll
)
.
Should
(
ContainSubstring
(
"builder=
\"
foo
\"\n
"
))
})
})
It
(
"should provide container's cpu limit [Conformance]"
,
func
()
{
It
(
"should provide container's cpu limit [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/cpu_limit"
)
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/cpu_limit"
)
...
@@ -162,7 +162,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -162,7 +162,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should provide container's memory limit [Conformance]"
,
func
()
{
It
(
"should provide container's memory limit [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/memory_limit"
)
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/memory_limit"
)
...
@@ -171,7 +171,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -171,7 +171,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should provide container's cpu request [Conformance]"
,
func
()
{
It
(
"should provide container's cpu request [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/cpu_request"
)
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/cpu_request"
)
...
@@ -180,7 +180,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -180,7 +180,7 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should provide container's memory request [Conformance]"
,
func
()
{
It
(
"should provide container's memory request [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/memory_request"
)
pod
:=
downwardAPIVolumeForContainerResources
(
podName
,
"/etc/memory_request"
)
...
@@ -189,14 +189,14 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
...
@@ -189,14 +189,14 @@ var _ = framework.KubeDescribe("Downward API volume", func() {
})
})
})
})
It
(
"should provide node allocatable (cpu) as default cpu limit if the limit is not set [Conformance]"
,
func
()
{
It
(
"should provide node allocatable (cpu) as default cpu limit if the limit is not set [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumeForDefaultContainerResources
(
podName
,
"/etc/cpu_limit"
)
pod
:=
downwardAPIVolumeForDefaultContainerResources
(
podName
,
"/etc/cpu_limit"
)
f
.
TestContainerOutputRegexp
(
"downward API volume plugin"
,
pod
,
0
,
[]
string
{
"[1-9]"
})
f
.
TestContainerOutputRegexp
(
"downward API volume plugin"
,
pod
,
0
,
[]
string
{
"[1-9]"
})
})
})
It
(
"should provide node allocatable (memory) as default memory limit if the limit is not set [Conformance]"
,
func
()
{
It
(
"should provide node allocatable (memory) as default memory limit if the limit is not set [Conformance]
[Volume]
"
,
func
()
{
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
podName
:=
"downwardapi-volume-"
+
string
(
uuid
.
NewUUID
())
pod
:=
downwardAPIVolumeForDefaultContainerResources
(
podName
,
"/etc/memory_limit"
)
pod
:=
downwardAPIVolumeForDefaultContainerResources
(
podName
,
"/etc/memory_limit"
)
...
...
test/e2e/common/empty_dir.go
View file @
c822e3e1
...
@@ -39,80 +39,80 @@ var _ = framework.KubeDescribe("EmptyDir volumes", func() {
...
@@ -39,80 +39,80 @@ var _ = framework.KubeDescribe("EmptyDir volumes", func() {
f
:=
framework
.
NewDefaultFramework
(
"emptydir"
)
f
:=
framework
.
NewDefaultFramework
(
"emptydir"
)
Context
(
"when FSGroup is specified [Feature:FSGroup]"
,
func
()
{
Context
(
"when FSGroup is specified [Feature:FSGroup]"
,
func
()
{
It
(
"new files should be created with FSGroup ownership when container is root"
,
func
()
{
It
(
"new files should be created with FSGroup ownership when container is root
[Volume]
"
,
func
()
{
doTestSetgidFSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTestSetgidFSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"new files should be created with FSGroup ownership when container is non-root"
,
func
()
{
It
(
"new files should be created with FSGroup ownership when container is non-root
[Volume]
"
,
func
()
{
doTestSetgidFSGroup
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
doTestSetgidFSGroup
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"files with FSGroup ownership should support (root,0644,tmpfs)"
,
func
()
{
It
(
"files with FSGroup ownership should support (root,0644,tmpfs)
[Volume]
"
,
func
()
{
doTest0644FSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTest0644FSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"volume on default medium should have the correct mode using FSGroup"
,
func
()
{
It
(
"volume on default medium should have the correct mode using FSGroup
[Volume]
"
,
func
()
{
doTestVolumeModeFSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
doTestVolumeModeFSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"volume on tmpfs should have the correct mode using FSGroup"
,
func
()
{
It
(
"volume on tmpfs should have the correct mode using FSGroup
[Volume]
"
,
func
()
{
doTestVolumeModeFSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTestVolumeModeFSGroup
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
})
})
It
(
"volume on tmpfs should have the correct mode [Conformance]"
,
func
()
{
It
(
"volume on tmpfs should have the correct mode [Conformance]
[Volume]
"
,
func
()
{
doTestVolumeMode
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTestVolumeMode
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"should support (root,0644,tmpfs) [Conformance]"
,
func
()
{
It
(
"should support (root,0644,tmpfs) [Conformance]
[Volume]
"
,
func
()
{
doTest0644
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTest0644
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"should support (root,0666,tmpfs) [Conformance]"
,
func
()
{
It
(
"should support (root,0666,tmpfs) [Conformance]
[Volume]
"
,
func
()
{
doTest0666
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTest0666
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"should support (root,0777,tmpfs) [Conformance]"
,
func
()
{
It
(
"should support (root,0777,tmpfs) [Conformance]
[Volume]
"
,
func
()
{
doTest0777
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
doTest0777
(
f
,
testImageRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"should support (non-root,0644,tmpfs) [Conformance]"
,
func
()
{
It
(
"should support (non-root,0644,tmpfs) [Conformance]
[Volume]
"
,
func
()
{
doTest0644
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
doTest0644
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"should support (non-root,0666,tmpfs) [Conformance]"
,
func
()
{
It
(
"should support (non-root,0666,tmpfs) [Conformance]
[Volume]
"
,
func
()
{
doTest0666
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
doTest0666
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"should support (non-root,0777,tmpfs) [Conformance]"
,
func
()
{
It
(
"should support (non-root,0777,tmpfs) [Conformance]
[Volume]
"
,
func
()
{
doTest0777
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
doTest0777
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumMemory
)
})
})
It
(
"volume on default medium should have the correct mode [Conformance]"
,
func
()
{
It
(
"volume on default medium should have the correct mode [Conformance]
[Volume]
"
,
func
()
{
doTestVolumeMode
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
doTestVolumeMode
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"should support (root,0644,default) [Conformance]"
,
func
()
{
It
(
"should support (root,0644,default) [Conformance]
[Volume]
"
,
func
()
{
doTest0644
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
doTest0644
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"should support (root,0666,default) [Conformance]"
,
func
()
{
It
(
"should support (root,0666,default) [Conformance]
[Volume]
"
,
func
()
{
doTest0666
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
doTest0666
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"should support (root,0777,default) [Conformance]"
,
func
()
{
It
(
"should support (root,0777,default) [Conformance]
[Volume]
"
,
func
()
{
doTest0777
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
doTest0777
(
f
,
testImageRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"should support (non-root,0644,default) [Conformance]"
,
func
()
{
It
(
"should support (non-root,0644,default) [Conformance]
[Volume]
"
,
func
()
{
doTest0644
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumDefault
)
doTest0644
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"should support (non-root,0666,default) [Conformance]"
,
func
()
{
It
(
"should support (non-root,0666,default) [Conformance]
[Volume]
"
,
func
()
{
doTest0666
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumDefault
)
doTest0666
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumDefault
)
})
})
It
(
"should support (non-root,0777,default) [Conformance]"
,
func
()
{
It
(
"should support (non-root,0777,default) [Conformance]
[Volume]
"
,
func
()
{
doTest0777
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumDefault
)
doTest0777
(
f
,
testImageNonRootUid
,
v1
.
StorageMediumDefault
)
})
})
})
})
...
...
test/e2e/common/host_path.go
View file @
c822e3e1
...
@@ -39,7 +39,7 @@ var _ = framework.KubeDescribe("HostPath", func() {
...
@@ -39,7 +39,7 @@ var _ = framework.KubeDescribe("HostPath", func() {
_
=
os
.
Remove
(
"/tmp/test-file"
)
_
=
os
.
Remove
(
"/tmp/test-file"
)
})
})
It
(
"should give a volume the correct mode [Conformance]"
,
func
()
{
It
(
"should give a volume the correct mode [Conformance]
[Volume]
"
,
func
()
{
volumePath
:=
"/test-volume"
volumePath
:=
"/test-volume"
source
:=
&
v1
.
HostPathVolumeSource
{
source
:=
&
v1
.
HostPathVolumeSource
{
Path
:
"/tmp"
,
Path
:
"/tmp"
,
...
@@ -56,7 +56,7 @@ var _ = framework.KubeDescribe("HostPath", func() {
...
@@ -56,7 +56,7 @@ var _ = framework.KubeDescribe("HostPath", func() {
})
})
// This test requires mounting a folder into a container with write privileges.
// This test requires mounting a folder into a container with write privileges.
It
(
"should support r/w"
,
func
()
{
It
(
"should support r/w
[Volume]
"
,
func
()
{
volumePath
:=
"/test-volume"
volumePath
:=
"/test-volume"
filePath
:=
path
.
Join
(
volumePath
,
"test-file"
)
filePath
:=
path
.
Join
(
volumePath
,
"test-file"
)
retryDuration
:=
180
retryDuration
:=
180
...
@@ -81,7 +81,7 @@ var _ = framework.KubeDescribe("HostPath", func() {
...
@@ -81,7 +81,7 @@ var _ = framework.KubeDescribe("HostPath", func() {
})
})
})
})
It
(
"should support subPath"
,
func
()
{
It
(
"should support subPath
[Volume]
"
,
func
()
{
volumePath
:=
"/test-volume"
volumePath
:=
"/test-volume"
subPath
:=
"sub-path"
subPath
:=
"sub-path"
fileName
:=
"test-file"
fileName
:=
"test-file"
...
...
test/e2e/common/secrets.go
View file @
c822e3e1
...
@@ -30,32 +30,32 @@ import (
...
@@ -30,32 +30,32 @@ import (
var
_
=
framework
.
KubeDescribe
(
"Secrets"
,
func
()
{
var
_
=
framework
.
KubeDescribe
(
"Secrets"
,
func
()
{
f
:=
framework
.
NewDefaultFramework
(
"secrets"
)
f
:=
framework
.
NewDefaultFramework
(
"secrets"
)
It
(
"should be consumable from pods in volume [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume [Conformance]
[Volume]
"
,
func
()
{
doSecretE2EWithoutMapping
(
f
,
nil
/* default mode */
,
"secret-test-"
+
string
(
uuid
.
NewUUID
()),
nil
,
nil
)
doSecretE2EWithoutMapping
(
f
,
nil
/* default mode */
,
"secret-test-"
+
string
(
uuid
.
NewUUID
()),
nil
,
nil
)
})
})
It
(
"should be consumable from pods in volume with defaultMode set [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with defaultMode set [Conformance]
[Volume]
"
,
func
()
{
defaultMode
:=
int32
(
0400
)
defaultMode
:=
int32
(
0400
)
doSecretE2EWithoutMapping
(
f
,
&
defaultMode
,
"secret-test-"
+
string
(
uuid
.
NewUUID
()),
nil
,
nil
)
doSecretE2EWithoutMapping
(
f
,
&
defaultMode
,
"secret-test-"
+
string
(
uuid
.
NewUUID
()),
nil
,
nil
)
})
})
It
(
"should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Conformance]
[Volume]
"
,
func
()
{
defaultMode
:=
int32
(
0440
)
/* setting fsGroup sets mode to at least 440 */
defaultMode
:=
int32
(
0440
)
/* setting fsGroup sets mode to at least 440 */
fsGroup
:=
int64
(
1001
)
fsGroup
:=
int64
(
1001
)
uid
:=
int64
(
1000
)
uid
:=
int64
(
1000
)
doSecretE2EWithoutMapping
(
f
,
&
defaultMode
,
"secret-test-"
+
string
(
uuid
.
NewUUID
()),
&
fsGroup
,
&
uid
)
doSecretE2EWithoutMapping
(
f
,
&
defaultMode
,
"secret-test-"
+
string
(
uuid
.
NewUUID
()),
&
fsGroup
,
&
uid
)
})
})
It
(
"should be consumable from pods in volume with mappings [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with mappings [Conformance]
[Volume]
"
,
func
()
{
doSecretE2EWithMapping
(
f
,
nil
)
doSecretE2EWithMapping
(
f
,
nil
)
})
})
It
(
"should be consumable from pods in volume with mappings and Item Mode set [Conformance]"
,
func
()
{
It
(
"should be consumable from pods in volume with mappings and Item Mode set [Conformance]
[Volume]
"
,
func
()
{
mode
:=
int32
(
0400
)
mode
:=
int32
(
0400
)
doSecretE2EWithMapping
(
f
,
&
mode
)
doSecretE2EWithMapping
(
f
,
&
mode
)
})
})
It
(
"should be able to mount in a volume regardless of a different secret existing with same name in different namespace"
,
func
()
{
It
(
"should be able to mount in a volume regardless of a different secret existing with same name in different namespace
[Volume]
"
,
func
()
{
var
(
var
(
namespace2
*
v1
.
Namespace
namespace2
*
v1
.
Namespace
err
error
err
error
...
@@ -76,7 +76,7 @@ var _ = framework.KubeDescribe("Secrets", func() {
...
@@ -76,7 +76,7 @@ var _ = framework.KubeDescribe("Secrets", func() {
doSecretE2EWithoutMapping
(
f
,
nil
/* default mode */
,
secret2
.
Name
,
nil
,
nil
)
doSecretE2EWithoutMapping
(
f
,
nil
/* default mode */
,
secret2
.
Name
,
nil
,
nil
)
})
})
It
(
"should be consumable in multiple volumes in a pod [Conformance]"
,
func
()
{
It
(
"should be consumable in multiple volumes in a pod [Conformance]
[Volume]
"
,
func
()
{
// This test ensures that the same secret can be mounted in multiple
// This test ensures that the same secret can be mounted in multiple
// volumes in the same pod. This test case exists to prevent
// volumes in the same pod. This test case exists to prevent
// regressions that break this use-case.
// regressions that break this use-case.
...
...
test/e2e/common/volumes.go
View file @
c822e3e1
...
@@ -364,7 +364,7 @@ var _ = framework.KubeDescribe("GCP Volumes", func() {
...
@@ -364,7 +364,7 @@ var _ = framework.KubeDescribe("GCP Volumes", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"NFSv4"
,
func
()
{
framework
.
KubeDescribe
(
"NFSv4"
,
func
()
{
It
(
"should be mountable for NFSv4"
,
func
()
{
It
(
"should be mountable for NFSv4
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"nfs"
,
prefix
:
"nfs"
,
...
@@ -398,7 +398,7 @@ var _ = framework.KubeDescribe("GCP Volumes", func() {
...
@@ -398,7 +398,7 @@ var _ = framework.KubeDescribe("GCP Volumes", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"GlusterFS"
,
func
()
{
framework
.
KubeDescribe
(
"GlusterFS"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"gluster"
,
prefix
:
"gluster"
,
...
...
test/e2e/empty_dir_wrapper.go
View file @
c822e3e1
...
@@ -52,7 +52,7 @@ const (
...
@@ -52,7 +52,7 @@ const (
var
_
=
framework
.
KubeDescribe
(
"EmptyDir wrapper volumes"
,
func
()
{
var
_
=
framework
.
KubeDescribe
(
"EmptyDir wrapper volumes"
,
func
()
{
f
:=
framework
.
NewDefaultFramework
(
"emptydir-wrapper"
)
f
:=
framework
.
NewDefaultFramework
(
"emptydir-wrapper"
)
It
(
"should not conflict"
,
func
()
{
It
(
"should not conflict
[Volume]
"
,
func
()
{
name
:=
"emptydir-wrapper-test-"
+
string
(
uuid
.
NewUUID
())
name
:=
"emptydir-wrapper-test-"
+
string
(
uuid
.
NewUUID
())
volumeName
:=
"secret-volume"
volumeName
:=
"secret-volume"
volumeMountPath
:=
"/etc/secret-volume"
volumeMountPath
:=
"/etc/secret-volume"
...
@@ -151,7 +151,7 @@ var _ = framework.KubeDescribe("EmptyDir wrapper volumes", func() {
...
@@ -151,7 +151,7 @@ var _ = framework.KubeDescribe("EmptyDir wrapper volumes", func() {
// but these cases are harder because tmpfs-based emptyDir
// but these cases are harder because tmpfs-based emptyDir
// appears to be less prone to the race problem.
// appears to be less prone to the race problem.
It
(
"should not cause race condition when used for configmaps [Serial] [Slow]"
,
func
()
{
It
(
"should not cause race condition when used for configmaps [Serial] [Slow]
[Volume]
"
,
func
()
{
configMapNames
:=
createConfigmapsForRace
(
f
)
configMapNames
:=
createConfigmapsForRace
(
f
)
defer
deleteConfigMaps
(
f
,
configMapNames
)
defer
deleteConfigMaps
(
f
,
configMapNames
)
volumes
,
volumeMounts
:=
makeConfigMapVolumes
(
configMapNames
)
volumes
,
volumeMounts
:=
makeConfigMapVolumes
(
configMapNames
)
...
@@ -160,7 +160,7 @@ var _ = framework.KubeDescribe("EmptyDir wrapper volumes", func() {
...
@@ -160,7 +160,7 @@ var _ = framework.KubeDescribe("EmptyDir wrapper volumes", func() {
}
}
})
})
It
(
"should not cause race condition when used for git_repo [Serial] [Slow]"
,
func
()
{
It
(
"should not cause race condition when used for git_repo [Serial] [Slow]
[Volume]
"
,
func
()
{
gitURL
,
gitRepo
,
cleanup
:=
createGitServer
(
f
)
gitURL
,
gitRepo
,
cleanup
:=
createGitServer
(
f
)
defer
cleanup
()
defer
cleanup
()
volumes
,
volumeMounts
:=
makeGitRepoVolumes
(
gitURL
,
gitRepo
)
volumes
,
volumeMounts
:=
makeGitRepoVolumes
(
gitURL
,
gitRepo
)
...
...
test/e2e/resource_quota.go
View file @
c822e3e1
...
@@ -270,7 +270,7 @@ var _ = framework.KubeDescribe("ResourceQuota", func() {
...
@@ -270,7 +270,7 @@ var _ = framework.KubeDescribe("ResourceQuota", func() {
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
})
})
It
(
"should create a ResourceQuota and capture the life of a persistent volume claim."
,
func
()
{
It
(
"should create a ResourceQuota and capture the life of a persistent volume claim.
[Volume]
"
,
func
()
{
By
(
"Creating a ResourceQuota"
)
By
(
"Creating a ResourceQuota"
)
quotaName
:=
"test-quota"
quotaName
:=
"test-quota"
resourceQuota
:=
newTestResourceQuota
(
quotaName
)
resourceQuota
:=
newTestResourceQuota
(
quotaName
)
...
@@ -308,7 +308,7 @@ var _ = framework.KubeDescribe("ResourceQuota", func() {
...
@@ -308,7 +308,7 @@ var _ = framework.KubeDescribe("ResourceQuota", func() {
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
})
})
It
(
"should create a ResourceQuota and capture the life of a persistent volume claim with a storage class."
,
func
()
{
It
(
"should create a ResourceQuota and capture the life of a persistent volume claim with a storage class.
[Volume]
"
,
func
()
{
By
(
"Creating a ResourceQuota"
)
By
(
"Creating a ResourceQuota"
)
quotaName
:=
"test-quota"
quotaName
:=
"test-quota"
resourceQuota
:=
newTestResourceQuota
(
quotaName
)
resourceQuota
:=
newTestResourceQuota
(
quotaName
)
...
...
test/e2e/volume_provisioning.go
View file @
c822e3e1
...
@@ -115,7 +115,7 @@ var _ = framework.KubeDescribe("Dynamic provisioning", func() {
...
@@ -115,7 +115,7 @@ var _ = framework.KubeDescribe("Dynamic provisioning", func() {
})
})
framework
.
KubeDescribe
(
"DynamicProvisioner"
,
func
()
{
framework
.
KubeDescribe
(
"DynamicProvisioner"
,
func
()
{
It
(
"should create and delete persistent volumes [Slow]"
,
func
()
{
It
(
"should create and delete persistent volumes [Slow]
[Volume]
"
,
func
()
{
framework
.
SkipUnlessProviderIs
(
"openstack"
,
"gce"
,
"aws"
,
"gke"
)
framework
.
SkipUnlessProviderIs
(
"openstack"
,
"gce"
,
"aws"
,
"gke"
)
By
(
"creating a StorageClass"
)
By
(
"creating a StorageClass"
)
...
@@ -137,7 +137,7 @@ var _ = framework.KubeDescribe("Dynamic provisioning", func() {
...
@@ -137,7 +137,7 @@ var _ = framework.KubeDescribe("Dynamic provisioning", func() {
})
})
framework
.
KubeDescribe
(
"DynamicProvisioner Alpha"
,
func
()
{
framework
.
KubeDescribe
(
"DynamicProvisioner Alpha"
,
func
()
{
It
(
"should create and delete alpha persistent volumes [Slow]"
,
func
()
{
It
(
"should create and delete alpha persistent volumes [Slow]
[Volume]
"
,
func
()
{
framework
.
SkipUnlessProviderIs
(
"openstack"
,
"gce"
,
"aws"
,
"gke"
)
framework
.
SkipUnlessProviderIs
(
"openstack"
,
"gce"
,
"aws"
,
"gke"
)
By
(
"creating a claim with an alpha dynamic provisioning annotation"
)
By
(
"creating a claim with an alpha dynamic provisioning annotation"
)
...
...
test/e2e/volumes.go
View file @
c822e3e1
...
@@ -389,7 +389,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -389,7 +389,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"NFS"
,
func
()
{
framework
.
KubeDescribe
(
"NFS"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"nfs"
,
prefix
:
"nfs"
,
...
@@ -429,7 +429,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -429,7 +429,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"GlusterFS"
,
func
()
{
framework
.
KubeDescribe
(
"GlusterFS"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"gluster"
,
prefix
:
"gluster"
,
...
@@ -514,7 +514,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -514,7 +514,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
// Run the test with "go run hack/e2e.go ... --ginkgo.focus=iSCSI"
// Run the test with "go run hack/e2e.go ... --ginkgo.focus=iSCSI"
framework
.
KubeDescribe
(
"iSCSI"
,
func
()
{
framework
.
KubeDescribe
(
"iSCSI"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"iscsi"
,
prefix
:
"iscsi"
,
...
@@ -561,7 +561,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -561,7 +561,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"Ceph RBD"
,
func
()
{
framework
.
KubeDescribe
(
"Ceph RBD"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"rbd"
,
prefix
:
"rbd"
,
...
@@ -639,7 +639,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -639,7 +639,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"CephFS"
,
func
()
{
framework
.
KubeDescribe
(
"CephFS"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"cephfs"
,
prefix
:
"cephfs"
,
...
@@ -717,7 +717,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -717,7 +717,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
// (OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME at least).
// (OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME at least).
framework
.
KubeDescribe
(
"Cinder"
,
func
()
{
framework
.
KubeDescribe
(
"Cinder"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
framework
.
SkipUnlessProviderIs
(
"openstack"
)
framework
.
SkipUnlessProviderIs
(
"openstack"
)
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
...
@@ -793,7 +793,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -793,7 +793,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"PD"
,
func
()
{
framework
.
KubeDescribe
(
"PD"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
framework
.
SkipUnlessProviderIs
(
"gce"
,
"gke"
)
framework
.
SkipUnlessProviderIs
(
"gce"
,
"gke"
)
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
...
@@ -843,7 +843,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
...
@@ -843,7 +843,7 @@ var _ = framework.KubeDescribe("Volumes [Feature:Volumes]", func() {
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
framework
.
KubeDescribe
(
"ConfigMap"
,
func
()
{
framework
.
KubeDescribe
(
"ConfigMap"
,
func
()
{
It
(
"should be mountable"
,
func
()
{
It
(
"should be mountable
[Volume]
"
,
func
()
{
config
:=
VolumeTestConfig
{
config
:=
VolumeTestConfig
{
namespace
:
namespace
.
Name
,
namespace
:
namespace
.
Name
,
prefix
:
"configmap"
,
prefix
:
"configmap"
,
...
...
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