You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ch...@apache.org on 2018/05/04 01:18:29 UTC
[06/13] mesos git commit: Added tests for validation of `GrowVolume`
and `ShrinkVolume`.
Added tests for validation of `GrowVolume` and `ShrinkVolume`.
Review: https://reviews.apache.org/r/66858/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/fa1ca073
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/fa1ca073
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/fa1ca073
Branch: refs/heads/master
Commit: fa1ca073ceec0fe24073a1c873ebbb328f806885
Parents: 71057f2
Author: Zhitao Li <zh...@gmail.com>
Authored: Thu May 3 17:04:44 2018 -0700
Committer: Chun-Hung Hsiao <ch...@mesosphere.io>
Committed: Thu May 3 17:04:44 2018 -0700
----------------------------------------------------------------------
src/tests/master_validation_tests.cpp | 298 +++++++++++++++++++++++++++++
1 file changed, 298 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/fa1ca073/src/tests/master_validation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_validation_tests.cpp b/src/tests/master_validation_tests.cpp
index a522961..fb1d8bd 100644
--- a/src/tests/master_validation_tests.cpp
+++ b/src/tests/master_validation_tests.cpp
@@ -1460,6 +1460,304 @@ TEST_F(DestroyOperationValidationTest, MultipleResourceProviders)
}
+class GrowVolumeOperationValidationTest : public MesosTest {
+protected:
+ Offer::Operation::GrowVolume createGrowVolume()
+ {
+ Resource volume = createPersistentVolume(
+ Megabytes(128),
+ "role1",
+ "id1",
+ "path1");
+
+ Resource addition = Resources::parse("disk", "128", "role1").get();
+
+ Offer::Operation::GrowVolume growVolume;
+ growVolume.mutable_volume()->CopyFrom(volume);
+ growVolume.mutable_addition()->CopyFrom(addition);
+
+ return growVolume;
+ }
+};
+
+
+// This test verifies that validation succeeds on a valid operation.
+TEST_F(GrowVolumeOperationValidationTest, Valid)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_NONE(error);
+}
+
+
+// This test verifies that validation fails if `GrowVolume.volume` is not a
+// persistent volume.
+TEST_F(GrowVolumeOperationValidationTest, NonPersistentVolume)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+ growVolume.mutable_volume()->mutable_disk()->clear_persistence();
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `GrowVolume.addition` has a zero
+// value.
+TEST_F(GrowVolumeOperationValidationTest, ZeroAddition)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+ growVolume.mutable_addition()->mutable_scalar()->set_value(0);
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `GrowVolume.volume` and
+// `GrowVolume.addition' are incompatible.
+TEST_F(GrowVolumeOperationValidationTest, IncompatibleDisk)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ // Make the volume on a PATH disk so it cannot be grown with a ROOT disk.
+ Resource pathVolume = createPersistentVolume(
+ Megabytes(128),
+ "role1",
+ "id1",
+ "path1",
+ None(),
+ createDiskSourcePath("root"));
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+ growVolume.mutable_volume()->CopyFrom(pathVolume);
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `GrowVolume.volume` is a shared
+// persistent volume.
+TEST_F(GrowVolumeOperationValidationTest, Shared)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+ growVolume.mutable_volume()->mutable_shared();
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `GrowVolume.volume` has resource
+// provider id.
+TEST_F(GrowVolumeOperationValidationTest, ResourceProvider)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+ growVolume.mutable_volume()->mutable_provider_id()->set_value("provider");
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `GrowVolume.volume` and
+// `GrowVolume.addition` are on MOUNT disks, which are not addable.
+TEST_F(GrowVolumeOperationValidationTest, Mount)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Resource mountVolume = createPersistentVolume(
+ Megabytes(128),
+ "role1",
+ "id1",
+ "path1",
+ None(),
+ createDiskSourceMount());
+
+ Resource mountDisk = createDiskResource(
+ "128", "role1", None(), None(), createDiskSourceMount());
+
+ Offer::Operation::GrowVolume growVolume = createGrowVolume();
+ growVolume.mutable_volume()->CopyFrom(mountVolume);
+ growVolume.mutable_addition()->CopyFrom(mountDisk);
+
+ Option<Error> error = operation::validate(growVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if agent has no RESIZE_VOLUME
+// capability.
+TEST_F(GrowVolumeOperationValidationTest, MissingCapability)
+{
+ protobuf::slave::Capabilities capabilities;
+
+ Option<Error> error = operation::validate(createGrowVolume(), capabilities);
+ EXPECT_SOME(error);
+}
+
+
+class ShrinkVolumeOperationValidationTest : public MesosTest {
+protected:
+ Offer::Operation::ShrinkVolume createShrinkVolume()
+ {
+ Resource volume = createPersistentVolume(
+ Megabytes(128),
+ "role1",
+ "id1",
+ "path1");
+
+ Offer::Operation::ShrinkVolume shrinkVolume;
+ shrinkVolume.mutable_volume()->CopyFrom(volume);
+ shrinkVolume.mutable_subtract()->set_value(64);
+
+ return shrinkVolume;
+ }
+};
+
+
+// This test verifies that validation succeeds on a valid `ShrinkVolume`
+// operation.
+TEST_F(ShrinkVolumeOperationValidationTest, Valid)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_NONE(error);
+}
+
+
+// This test verifies that validation fails if `ShrinkVolume.volume` is not a
+// persistent volume.
+TEST_F(ShrinkVolumeOperationValidationTest, NonPersistentVolume)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+ shrinkVolume.mutable_volume()->mutable_disk()->clear_persistence();
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `ShrinkVolume.subtract` has a
+// zero value.
+TEST_F(ShrinkVolumeOperationValidationTest, ZeroSubtract)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+ shrinkVolume.mutable_subtract()->set_value(0);
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `ShrinkVolume.subtract` has a
+// value equal to the size of `ShrinkVolume.volume`
+TEST_F(ShrinkVolumeOperationValidationTest, EmptyAfterShrink)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+ shrinkVolume.mutable_subtract()->CopyFrom(shrinkVolume.volume().scalar());
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `ShrinkVolume.volume` is a
+// MOUNT disk.
+TEST_F(ShrinkVolumeOperationValidationTest, Mount)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Resource mountVolume = createPersistentVolume(
+ Megabytes(128),
+ "role1",
+ "id1",
+ "path1",
+ None(),
+ createDiskSourceMount());
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+ shrinkVolume.mutable_volume()->CopyFrom(mountVolume);
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `ShrinkVolume.volume` is a
+// shared volume.
+TEST_F(ShrinkVolumeOperationValidationTest, Shared)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+ shrinkVolume.mutable_volume()->mutable_shared();
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if `ShrinkVolume.volume` has
+// resource provider id.
+TEST_F(ShrinkVolumeOperationValidationTest, ResourceProvider)
+{
+ protobuf::slave::Capabilities capabilities;
+ capabilities.resizeVolume = true;
+
+ Offer::Operation::ShrinkVolume shrinkVolume = createShrinkVolume();
+ shrinkVolume.mutable_volume()->mutable_provider_id()->set_value("provider");
+
+ Option<Error> error = operation::validate(shrinkVolume, capabilities);
+ EXPECT_SOME(error);
+}
+
+
+// This test verifies that validation fails if agent has no RESIZE_VOLUME
+// capability.
+TEST_F(ShrinkVolumeOperationValidationTest, MissingCapability)
+{
+ protobuf::slave::Capabilities capabilities;
+
+ Option<Error> error = operation::validate(createShrinkVolume(), capabilities);
+ EXPECT_SOME(error);
+}
+
+
TEST(OperationValidationTest, CreateVolume)
{
Resource disk1 = createDiskResource(