123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /*
- Copyright 2016 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- /*
- * This test checks that various VolumeSources are working.
- *
- * There are two ways, how to test the volumes:
- * 1) With containerized server (NFS, Ceph, Gluster, iSCSI, ...)
- * The test creates a server pod, exporting simple 'index.html' file.
- * Then it uses appropriate VolumeSource to import this file into a client pod
- * and checks that the pod can see the file. It does so by importing the file
- * into web server root and loadind the index.html from it.
- *
- * These tests work only when privileged containers are allowed, exporting
- * various filesystems (NFS, GlusterFS, ...) usually needs some mounting or
- * other privileged magic in the server pod.
- *
- * Note that the server containers are for testing purposes only and should not
- * be used in production.
- *
- * 2) With server outside of Kubernetes (Cinder, ...)
- * Appropriate server (e.g. OpenStack Cinder) must exist somewhere outside
- * the tested Kubernetes cluster. The test itself creates a new volume,
- * and checks, that Kubernetes can use it as a volume.
- */
- // GlusterFS test is duplicated from test/e2e/volumes.go. Any changes made there
- // should be duplicated here
- package common
- import (
- "context"
- v1 "k8s.io/api/core/v1"
- clientset "k8s.io/client-go/kubernetes"
- "k8s.io/kubernetes/test/e2e/framework"
- e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
- "k8s.io/kubernetes/test/e2e/framework/volume"
- "github.com/onsi/ginkgo"
- )
- // These tests need privileged containers, which are disabled by default. Run
- // tests with "--ginkgo.focus=[Feature:Volumes]"
- var _ = ginkgo.Describe("[sig-storage] GCP Volumes", func() {
- f := framework.NewDefaultFramework("gcp-volume")
- // note that namespace deletion is handled by delete-namespace flag
- // filled in BeforeEach
- var namespace *v1.Namespace
- var c clientset.Interface
- ginkgo.BeforeEach(func() {
- e2eskipper.SkipUnlessNodeOSDistroIs("gci", "ubuntu", "custom")
- namespace = f.Namespace
- c = f.ClientSet
- })
- ////////////////////////////////////////////////////////////////////////
- // NFS
- ////////////////////////////////////////////////////////////////////////
- ginkgo.Describe("NFSv4", func() {
- ginkgo.It("should be mountable for NFSv4", func() {
- config, _, serverIP := volume.NewNFSServer(c, namespace.Name, []string{})
- defer volume.TestServerCleanup(f, config)
- tests := []volume.Test{
- {
- Volume: v1.VolumeSource{
- NFS: &v1.NFSVolumeSource{
- Server: serverIP,
- Path: "/",
- ReadOnly: true,
- },
- },
- File: "index.html",
- ExpectedContent: "Hello from NFS!",
- },
- }
- // Must match content of test/images/volumes-tester/nfs/index.html
- volume.TestVolumeClient(f, config, nil, "" /* fsType */, tests)
- })
- })
- ginkgo.Describe("NFSv3", func() {
- ginkgo.It("should be mountable for NFSv3", func() {
- config, _, serverIP := volume.NewNFSServer(c, namespace.Name, []string{})
- defer volume.TestServerCleanup(f, config)
- tests := []volume.Test{
- {
- Volume: v1.VolumeSource{
- NFS: &v1.NFSVolumeSource{
- Server: serverIP,
- Path: "/exports",
- ReadOnly: true,
- },
- },
- File: "index.html",
- ExpectedContent: "Hello from NFS!",
- },
- }
- // Must match content of test/images/volume-tester/nfs/index.html
- volume.TestVolumeClient(f, config, nil, "" /* fsType */, tests)
- })
- })
- ////////////////////////////////////////////////////////////////////////
- // Gluster
- ////////////////////////////////////////////////////////////////////////
- ginkgo.Describe("GlusterFS", func() {
- ginkgo.It("should be mountable", func() {
- // create gluster server and endpoints
- config, _, _ := volume.NewGlusterfsServer(c, namespace.Name)
- name := config.Prefix + "-server"
- defer func() {
- volume.TestServerCleanup(f, config)
- err := c.CoreV1().Endpoints(namespace.Name).Delete(context.TODO(), name, nil)
- framework.ExpectNoError(err, "defer: Gluster delete endpoints failed")
- }()
- tests := []volume.Test{
- {
- Volume: v1.VolumeSource{
- Glusterfs: &v1.GlusterfsVolumeSource{
- EndpointsName: name,
- // 'test_vol' comes from test/images/volumes-tester/gluster/run_gluster.sh
- Path: "test_vol",
- ReadOnly: true,
- },
- },
- File: "index.html",
- // Must match content of test/images/volumes-tester/gluster/index.html
- ExpectedContent: "Hello from GlusterFS!",
- },
- }
- volume.TestVolumeClient(f, config, nil, "" /* fsType */, tests)
- })
- })
- })
|