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/11/29 18:31:30 UTC
[mesos] 06/14: Added validation for
`Offer.Operation.CreateDisk.target_profile`.
This is an automated email from the ASF dual-hosted git repository.
chhsiao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 20b5dda99dda43b47e001dd3826b71597debee02
Author: Chun-Hung Hsiao <ch...@mesosphere.io>
AuthorDate: Wed Nov 14 20:34:51 2018 -0800
Added validation for `Offer.Operation.CreateDisk.target_profile`.
Review: https://reviews.apache.org/r/69356
---
src/master/validation.cpp | 6 +++++
src/tests/master_validation_tests.cpp | 44 +++++++++++++++++++++++++++++++----
2 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/src/master/validation.cpp b/src/master/validation.cpp
index 5768ac8..5fccc9f 100644
--- a/src/master/validation.cpp
+++ b/src/master/validation.cpp
@@ -2528,6 +2528,12 @@ Option<Error> validate(const Offer::Operation::CreateDisk& createDisk)
return Error("'target_type' is neither MOUNT or BLOCK");
}
+ if (source.disk().source().has_profile() == createDisk.has_target_profile()) {
+ return createDisk.has_target_profile()
+ ? Error("'target_profile' must not be set when 'source' has a profile")
+ : Error("'target_profile' must be set when 'source' has no profile");
+ }
+
return None();
}
diff --git a/src/tests/master_validation_tests.cpp b/src/tests/master_validation_tests.cpp
index aa7c8f7..3aa7b2a 100644
--- a/src/tests/master_validation_tests.cpp
+++ b/src/tests/master_validation_tests.cpp
@@ -2025,32 +2025,46 @@ TEST_F(ShrinkVolumeOperationValidationTest, MissingCapability)
TEST(OperationValidationTest, CreateDisk)
{
Resource disk1 = createDiskResource(
- "10", "*", None(), None(), createDiskSourceRaw());
+ "10", "*", None(), None(), createDiskSourceRaw(None(), "profile"));
Resource disk2 = createDiskResource(
- "20", "*", None(), None(), createDiskSourceMount());
+ "20", "*", None(), None(), createDiskSourceRaw());
Resource disk3 = createDiskResource(
- "30", "*", None(), None(), createDiskSourceRaw());
+ "30", "*", None(), None(), createDiskSourceMount());
+
+ Resource disk4 = createDiskResource(
+ "40", "*", None(), None(), createDiskSourceRaw(None(), "profile"));
disk1.mutable_provider_id()->set_value("provider1");
disk2.mutable_provider_id()->set_value("provider2");
+ disk3.mutable_provider_id()->set_value("provider3");
Offer::Operation::CreateDisk createDisk;
createDisk.mutable_source()->CopyFrom(disk1);
createDisk.set_target_type(Resource::DiskInfo::Source::MOUNT);
+ createDisk.clear_target_profile();
Option<Error> error = operation::validate(createDisk);
EXPECT_NONE(error);
createDisk.mutable_source()->CopyFrom(disk1);
createDisk.set_target_type(Resource::DiskInfo::Source::BLOCK);
+ createDisk.clear_target_profile();
+
+ error = operation::validate(createDisk);
+ EXPECT_NONE(error);
+
+ createDisk.mutable_source()->CopyFrom(disk2);
+ createDisk.set_target_type(Resource::DiskInfo::Source::MOUNT);
+ createDisk.set_target_profile("profile");
error = operation::validate(createDisk);
EXPECT_NONE(error);
createDisk.mutable_source()->CopyFrom(disk1);
createDisk.set_target_type(Resource::DiskInfo::Source::PATH);
+ createDisk.clear_target_profile();
error = operation::validate(createDisk);
ASSERT_SOME(error);
@@ -2058,17 +2072,39 @@ TEST(OperationValidationTest, CreateDisk)
error->message,
"'target_type' is neither MOUNT or BLOCK"));
+ createDisk.mutable_source()->CopyFrom(disk1);
+ createDisk.set_target_type(Resource::DiskInfo::Source::MOUNT);
+ createDisk.set_target_profile("profile");
+
+ error = operation::validate(createDisk);
+ ASSERT_SOME(error);
+ EXPECT_TRUE(strings::contains(
+ error->message,
+ "'target_profile' must not be set when 'source' has a profile"));
+
createDisk.mutable_source()->CopyFrom(disk2);
createDisk.set_target_type(Resource::DiskInfo::Source::MOUNT);
+ createDisk.clear_target_profile();
error = operation::validate(createDisk);
ASSERT_SOME(error);
EXPECT_TRUE(strings::contains(
error->message,
- "'source' is not a RAW disk resource"));
+ "'target_profile' must be set when 'source' has no profile"));
createDisk.mutable_source()->CopyFrom(disk3);
createDisk.set_target_type(Resource::DiskInfo::Source::MOUNT);
+ createDisk.clear_target_profile();
+
+ error = operation::validate(createDisk);
+ ASSERT_SOME(error);
+ EXPECT_TRUE(strings::contains(
+ error->message,
+ "'source' is not a RAW disk resource"));
+
+ createDisk.mutable_source()->CopyFrom(disk4);
+ createDisk.set_target_type(Resource::DiskInfo::Source::MOUNT);
+ createDisk.clear_target_profile();
error = operation::validate(createDisk);
ASSERT_SOME(error);