Commit Graph

84 Commits

Author SHA1 Message Date
Kubernetes Prow Robot
23d7e489dd Merge pull request #75797 from atoato88/fix-golint-e2e-framework-v
Fix golint failures of e2e/framework/v*.go
2019-04-05 11:51:33 -07:00
Kubernetes Prow Robot
73c1e35491 Merge pull request #76174 from msau42/slow-e2es
Mark slow storage e2es
2019-04-04 19:37:19 -07:00
Michelle Au
ce7ac63916 Mark slow storage e2es 2019-04-04 18:01:22 -07:00
Akihito INOH
fad1ebc45f Fix golint failures of e2e/framework/v*.go
This fixes golint failures of the following file:
- test/e2e/framework/volume_util.go

This changes following file because of change function name
in above file.
- test/e2e/storage/testsuites/volumes.go
2019-04-05 06:16:13 +09:00
Masaki Kimura
b474b28f7b Use framework.ExpectNoError() for rest of under test/e2e/storage 2019-04-04 18:51:51 +00:00
Michelle Au
634be030a8 Fix provisioning tests to allow delayed binding 2019-03-29 15:00:26 -07:00
Michelle Au
bbf6683e22 Switch PD tests to use delayed binding 2019-03-27 18:30:13 -07:00
Kubernetes Prow Robot
e05be44808 Merge pull request #74693 from mkimuram/issue/74545
Add e2e tests for multiAttach
2019-03-26 20:44:48 -07:00
Kubernetes Prow Robot
11b9ebf113 Merge pull request #75225 from jingxu97/pd_windows_test
Add bracket to the sig-window tag and other fixes
2019-03-12 13:19:19 -07:00
Jing Xu
3718f4e0ed Add bracket to the sig-window tag
Need to add bracket in the tag for sig-windows. Also fix an issue: for
current testing structure, it first init driver and then set up the
framework. So when initialize the driver, it does not know what OS is
and we can not set up the capabilities correctly. Instead we have to add
all the capabilities and supported fs types including both linux and
windows. Later in the code, we will check the Node OS and decide how to
run the test.
2019-03-11 18:40:45 -07:00
Masaki Kimura
b4c88acec6 Add e2e tests for multiAttach 2019-03-09 00:26:00 +00:00
Kubernetes Prow Robot
788f24583e Merge pull request #74990 from jingxu97/pd_windows_test
Add GCE PD tests for windows cluster
2019-03-07 21:20:23 -08:00
Jing Xu
18be0a49e6 Add GCE PD tests for windows cluster
This PR is the first one to add a few GCE PD tests for windows cluster. Will
add more tests in later PRs
2019-03-07 09:13:56 -08:00
Patrick Ohly
6644db9914 e2e/storage: testing of external storage drivers
It is useful to apply the storage testsuite also to "external" (=
out-of-tree) storage drivers. One way of doing that is setting up a
custom E2E test suite, but that's still quite a bit of work.

An easier alternative is to parameterize the Kubernetes e2e.test
binary at runtime so that it instantiates the testsuite for one or
more drivers. Some parameters have to be provided before starting the
test because they define configuration and capabilities of the driver
and its storage backend that cannot be discovered at runtime. This is
done by populating the DriverDefinition with the content of the file
that the new -storage.testdriver parameters points to.

The universal .yaml and .json decoder from Kubernetes is used. It's
flexible, but has some downsides:
- currently ignores unknown fields (see https://github.com/kubernetes/kubernetes/pull/71589)
- poor error messages when fields have the wrong type

Storage drivers have to be installed in the test cluster before
starting e2e.test. Only tests involving dynamically provisioned
volumes are currently supported.
2019-03-06 22:06:31 +01:00
Michelle Au
b90ef213af don't check for container status ready in subpath test 2019-03-05 18:31:59 -08:00
Masaki Kimura
c5155f81a0 Fix resource leaking PDs for volume mode test
fixes #74380
2019-02-27 18:48:34 +00:00
Yecheng Fu
5c67d55002 Use same fsGroup for both pods until we have a reliable way to detect
volumes are unmounted or not
2019-02-21 15:56:35 +08:00
Patrick Ohly
ec3655a1d4 e2e/storage: re-initialize all local variables
There is a risk that the init function does not reset one of the local
variables that was set by a previous test. To avoid this, all
variables set by init are now in a struct which gets cleaned
completely first.
2019-02-15 11:03:28 +01:00
Patrick Ohly
e79cd9efe1 e2e: update bazel BUILD files
Generated via hack/update-bazel.sh.
2019-02-15 11:01:09 +01:00
Patrick Ohly
4643624084 e2e/storage: remove test pattern filtering
The recommended approach for not running unsuitable tests is to skip
them at runtime with an explanation. Filtering out unsuitable test
patters and thus not even defining unsuitable tests was done earlier
because it was faster than skipping tests at runtime.

But now these tests can be skipped efficiently, so this special case
can be removed.
2019-02-15 11:01:08 +01:00
Patrick Ohly
05cc31697f e2e/storage: speed up skipping, simplify APIs and test definition
CreateDriver (now called SetupTest) is a potentially expensive
operation, depending on the driver. Creating and tearing down a
framework instance also takes time (measured at 6 seconds on a fast
machine) and produces quite a bit of log output.

Both can be avoided for tests that skip based on static
information (like for instance the current OS, vendor, driver and test
pattern) by making the test suite responsible for creating framework
and driver.

The lifecycle of the TestConfig instance was confusing because it was
stored inside the DriverInfo, a struct which conceptually is static,
while the TestConfig is dynamic. It is cleaner to separate the two,
even if that means that an additional pointer must be passed into some
functions. Now CreateDriver is responsible for initializing the
PerTestConfig that is to be used by the test.

To make this approach simpler to implement (= less functions which
need the pointer) and the tests easier to read, the entire setup and
test definition is now contained in a single function. This is how it
is normally done in Ginkgo. This is easier to read because one can see
at a glance where variables are set, instead of having to trace values
though two additional structs (TestResource and TestInput).

Because we are changing the API already, also other changes are made:
- some function prototypes get simplified
- the naming of functions is changed to match their purpose
  (tests aren't executed by the test suite, they only get defined
  for later execution)
- unused methods get removed (TestSuite.skipUnsupportedTest is redundant)
2019-02-15 11:01:05 +01:00
Patrick Ohly
1cb121d2a9 e2e/storage: introduce TestVolume interface
This increases type safety and makes the code easier to read because
it becomes obvious that the "test resource" passed to some functions
must be the result of a previous CreateVolume.

This makes it possible to remove:
- functions that never did anything (the DeleteVolume methods in
  drivers that never create a volume)
- type casts (in the DeleteVolume implementation)
- the unused DeleteVolume parameters
- the stand-alone DeleteVolume function (which would be just a non-nil
  check)

GetPersistentVolumeSource and GetVolumeSource could also become
methods on more specific interfaces - they don't actually use anything
from TestDriver instance which provides them.

The main motivation however is to reduce the number of methods which
might need an explicit test config parameter.
2019-02-15 08:38:54 +01:00
Kubernetes Prow Robot
f9af7e94a9 Merge pull request #73962 from wongma7/glusterfs-sc
Fix glusterfs e2e not using correct storageclass
2019-02-13 14:32:16 -08:00
Hemant Kumar
e3faa003a1 add e2e test when expansion is disabled
Also refactor some of the code that creates resizable SC
2019-02-13 10:48:49 -05:00
Matthew Wong
6d73de1154 Fix glusterfs e2e not using correct storageclass 2019-02-12 11:31:29 -05:00
Patrick Ohly
03d352f7aa e2e/storage: test usage of volume in multiple pods at once
This is a special case that both kubelet and the volume driver should
support, because users might expect it. One Kubernetes mechanism to
deploy pods like this is via pod affinity.

However, strictly speaking the CSI spec does not allow this usage
mode (see https://github.com/container-storage-interface/spec/pull/150) and
there is an on-going debate to enable it (see
https://github.com/container-storage-interface/spec/issues/178). Therefore
this test gets skipped unless explicitly enabled for a driver.

CSI drivers which create a block device for a remote volume in
NodePublishVolume fail this test. They have to make the volume
available in NodeStageVolume and then in NodePublishVolume merely do a
bind mount (as for example in
https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/blob/master/pkg/gce-pd-csi-driver/node.go#L150).
2019-02-12 09:21:50 +01:00
Patrick Ohly
ca42cf4993 e2e/storage: test provisioned volume on multiple nodes
Whether the read test after writing was done on the same node was
random for drivers that weren't locked onto a single node. Now it is
deterministic: it always happens on the same node.

The case with reading on another node is covered separately for test
configurations that support it (not locked onto a single node, more
than one node in the test cluster).

As before, the TestConfig.ClientNodeSelector is ignored by the
provisioning testsuite.
2019-02-12 09:21:50 +01:00
Patrick Ohly
54d8f1648f e2e/storage: improve PV checking
TestDynamicProvisioning had multiple ways of choosing additional
checks:
- the PvCheck callback
- the builtin write/read check controlled by a boolean
- the snapshot testing

Complicating matters further, that builtin write/read test had been
more customizable with new fields `NodeSelector` and
`ExpectUnschedulable` which were only set by one particular test (see
https://github.com/kubernetes/kubernetes/pull/70941).

That is confusing and will only get more confusing when adding more
checks in the future. Therefore the write/read check is now a separate
function that must be enabled explicitly by tests that want to run it.
The snapshot checking is also defined only for the snapshot test.

The test that expects unschedulable pods now also checks for that
particular situation itself. Instead of testing it with two pods (the
behavior from the write/read check) that both fail to start, only a
single unschedulable pod is created.

Because node name, node selector and the `ExpectUnschedulable` were
only used for checking, it is possible to simplify `StorageClassTest`
by removing all of these fields.

Expect(err).NotTo(HaveOccurred()) is an anti-pattern in Ginkgo testing
because a test failure doesn't explain what failed (see
https://github.com/kubernetes/kubernetes/issues/34059). We avoid it
now by making the check function itself responsible for checking
errors and including more information in those checks.
2019-02-09 14:20:17 +01:00
Patrick Ohly
5b8826b610 e2e/storage: use different names for test pods
When the provisioning test gets stuck, the log fills up with messages
about waiting for a certain pod to run. Now the pod names are
pvc-[volume-tester|snapshot]-[writer|reader] plus the random
number appended by Kubernetes. This makes it easier to see where the
test is stuck.
2019-02-09 14:20:17 +01:00
Patrick Ohly
e92bdd14cc e2e/storage: remove unnecessary empty string checks
There is no need to check for empty strings, we can also directly
initialize structs with the value. The end result is the same when the
value is empty (empty string in the struct).
2019-02-09 14:20:17 +01:00
Patrick Ohly
315266b25e e2e: refine snapshot test
This addresses the two remaining change requests from
https://github.com/kubernetes/kubernetes/pull/69036:
- replace "csi-hostpath-v0" name check with capability
  check (cleaner that way)
- add feature tag to "should create snapshot with defaults" because
  that is an alpha feature

Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
2019-02-09 14:20:17 +01:00
Patrick Ohly
f8536e8e42 e2e: fix snapshot skip test
Even if snapshots are supported by the driver interface, the driver or
suite might still want to skip a particular test, so those checks
still need to be executed.
2019-02-09 14:19:37 +01:00
Kubernetes Prow Robot
8f7ccf8d4c Merge pull request #69036 from wackxu/snapshottest
add e2e test for snapshot
2019-02-08 13:14:04 -08:00
Kubernetes Prow Robot
3dedf4b7f6 Merge pull request #73525 from cofyc/fix71237-intree
Implement localDriver with various local volume types
2019-02-06 10:44:37 -08:00
Yecheng Fu
aa87e4b57c Implement localDriver 2019-02-06 12:28:28 +08:00
Kubernetes Prow Robot
9384e93dc1 Merge pull request #73749 from wongma7/subpath-init-write-multiple
Fix multiple subpaths e2e: read/write in same container
2019-02-05 13:57:02 -08:00
Matthew Wong
613d8bb8ea Fix multiple subpaths e2e: read/write in same container 2019-02-05 10:55:27 -05:00
Kubernetes Prow Robot
641b2adcd3 Merge pull request #73318 from wongma7/subpath-init-write
Do writes in init container before trying reads
2019-02-04 18:28:14 -08:00
xushiwei
7280fcef5c address reviewer comments 2019-02-01 16:34:16 +08:00
xushiwei
3410d435ed add snapshot e2e 2019-01-30 19:04:45 +08:00
Matthew Wong
9f5a799213 Do writes in init container before trying reads 2019-01-28 15:42:14 -05:00
Masaki Kimura
30ad1028eb Move xfs test skip logic from driver to testsuites 2019-01-23 05:17:06 +00:00
Masaki Kimura
b767dbdeb5 Fix volumes e2e test to check fsType 2019-01-23 05:12:37 +00:00
Cheng Xing
12ece9dacb CSI topology e2e tests 2019-01-11 18:36:06 -08:00
Michelle Au
6279515914 Add e2e test for removing the subpath directory 2019-01-03 16:35:54 -08:00
Tara Gu
fb324249c2 Add test case for validate container cannot write to readonly volumes 2019-01-03 15:24:31 -05:00
Patrick Ohly
ac8ac8ee6c e2e: update bazel BUILD files
Generated via hack/update-bazel.sh.
2018-12-21 10:30:10 +01:00
Patrick Ohly
3253e9ab6b e2e/storage: refactor test config
Exposing framework.VolumeTestConfig as part of the testsuite package
API was confusing because it was unclear which of the values in it
really have an effect. How it was set also was a bit awkward: a test
driver had a copy that had to be overwritten at test runtime and then
might have been updated and/or overwritten again by the driver.

Now testsuites has its own test config structure. It contains the
values that might have to be set dynamically at runtime. Instead of
overwriting a copy of that struct inside the test driver, the test
driver takes some common defaults (specifically, the framework pointer
and the prefix) when it gets initialized and then manages its own
copy. For example, the hostpath driver has to lock the pods to a
single node.

framework.VolumeTestConfig is still used internally and test drivers
can decide to run tests with a fully populated instance if needed (for
example, after setting up an NFS server).
2018-12-21 10:30:06 +01:00
Patrick Ohly
dfcf2ca345 e2e/storage: separate generic testsuites from specific drivers
This makes it possible to use the testsuites package out-of-tree
without pulling in unnecessary dependencies and code (in
test/e2e/storage/vsphere) that defines tests that are not wanted in a
custom test suite.
2018-12-20 13:41:48 +01:00
Patrick Ohly
41ab9449ed e2e/storage: drivers determine the claim size
Different drivers support different volume sizes. Some have certain
minimum sizes, some maximum sizes. Instead of hard-coding some kind of
default into the testsuites, now each driver that supports dynamic
provisioning has to provide the size.
2018-12-20 13:41:48 +01:00