You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2017/07/27 00:15:31 UTC

[2/3] mesos git commit: Added validation functions for resource provider calls.

Added validation functions for resource provider calls.

Review: https://reviews.apache.org/r/60770/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7528f595
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7528f595
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7528f595

Branch: refs/heads/master
Commit: 7528f595534c9c182ee82468a3e0e8520449283f
Parents: 610ef40
Author: Jan Schlicht <ja...@mesosphere.io>
Authored: Wed Jul 26 17:04:48 2017 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Wed Jul 26 17:04:48 2017 -0700

----------------------------------------------------------------------
 src/CMakeLists.txt                              |  1 +
 src/Makefile.am                                 |  3 +
 src/internal/devolve.cpp                        |  9 ++-
 src/internal/devolve.hpp                        |  5 +-
 src/resource_provider/validation.cpp            | 73 +++++++++++++++++
 src/resource_provider/validation.hpp            | 39 +++++++++
 src/tests/CMakeLists.txt                        |  1 +
 .../resource_provider_validation_tests.cpp      | 83 ++++++++++++++++++++
 8 files changed, 208 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 51b6742..98ccaf4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -403,6 +403,7 @@ set(RESOURCE_PROVIDER_SRC
   resource_provider/driver.cpp
   resource_provider/local.cpp
   resource_provider/manager.cpp
+  resource_provider/validation.cpp
   resource_provider/storage/provider.cpp
   )
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index 8b91716..5712bad 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -956,6 +956,7 @@ libmesos_no_3rdparty_la_SOURCES +=					\
   resource_provider/driver.cpp						\
   resource_provider/local.cpp						\
   resource_provider/manager.cpp						\
+  resource_provider/validation.cpp					\
   resource_provider/storage/provider.cpp				\
   sched/sched.cpp							\
   scheduler/scheduler.cpp						\
@@ -1094,6 +1095,7 @@ libmesos_no_3rdparty_la_SOURCES +=					\
   resource_provider/local.hpp						\
   resource_provider/manager.hpp						\
   resource_provider/message.hpp						\
+  resource_provider/validation.hpp					\
   resource_provider/storage/provider.hpp				\
   sched/constants.hpp							\
   sched/flags.hpp							\
@@ -2357,6 +2359,7 @@ mesos_tests_SOURCES =						\
   tests/reservation_tests.cpp					\
   tests/resource_offers_tests.cpp				\
   tests/resource_provider_http_api_tests.cpp			\
+  tests/resource_provider_validation_tests.cpp			\
   tests/resources_tests.cpp					\
   tests/resources_utils.cpp					\
   tests/role_tests.cpp						\

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/internal/devolve.cpp
----------------------------------------------------------------------
diff --git a/src/internal/devolve.cpp b/src/internal/devolve.cpp
index 79c668f..7eb58e9 100644
--- a/src/internal/devolve.cpp
+++ b/src/internal/devolve.cpp
@@ -166,15 +166,16 @@ executor::Event devolve(const v1::executor::Event& event)
 }
 
 
-resource_provider::Call devolve(const v1::resource_provider::Call& call)
+mesos::resource_provider::Call devolve(const v1::resource_provider::Call& call)
 {
-  return devolve<resource_provider::Call>(call);
+  return devolve<mesos::resource_provider::Call>(call);
 }
 
 
-resource_provider::Event devolve(const v1::resource_provider::Event& event)
+mesos::resource_provider::Event devolve(
+    const v1::resource_provider::Event& event)
 {
-  return devolve<resource_provider::Event>(event);
+  return devolve<mesos::resource_provider::Event>(event);
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/internal/devolve.hpp
----------------------------------------------------------------------
diff --git a/src/internal/devolve.hpp b/src/internal/devolve.hpp
index 214fcef..656173d 100644
--- a/src/internal/devolve.hpp
+++ b/src/internal/devolve.hpp
@@ -67,8 +67,9 @@ SlaveInfo devolve(const v1::AgentInfo& agentInfo);
 TaskID devolve(const v1::TaskID& taskId);
 TaskStatus devolve(const v1::TaskStatus& status);
 
-resource_provider::Call devolve(const v1::resource_provider::Call& call);
-resource_provider::Event devolve(const v1::resource_provider::Event& event);
+mesos::resource_provider::Call devolve(const v1::resource_provider::Call& call);
+mesos::resource_provider::Event devolve(
+    const v1::resource_provider::Event& event);
 
 scheduler::Call devolve(const v1::scheduler::Call& call);
 scheduler::Event devolve(const v1::scheduler::Event& event);

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/resource_provider/validation.cpp
----------------------------------------------------------------------
diff --git a/src/resource_provider/validation.cpp b/src/resource_provider/validation.cpp
new file mode 100644
index 0000000..d292722
--- /dev/null
+++ b/src/resource_provider/validation.cpp
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+#include "resource_provider/validation.hpp"
+
+#include <stout/none.hpp>
+#include <stout/unreachable.hpp>
+
+using mesos::resource_provider::Call;
+
+namespace mesos {
+namespace internal {
+namespace resource_provider {
+namespace validation {
+namespace call {
+
+Option<Error> validate(const Call& call)
+{
+  if (!call.IsInitialized()) {
+    return Error("Not initialized: " + call.InitializationErrorString());
+  }
+
+  if (!call.has_type()) {
+    return Error("Expecting 'type' to be present");
+  }
+
+  switch(call.type()) {
+    case Call::UNKNOWN: {
+      return None();
+    }
+
+    case Call::SUBSCRIBE: {
+      if (!call.has_subscribe()) {
+        return Error("Expecting 'subscribe' to be present");
+      }
+
+      return None();
+    }
+
+    case Call::UPDATE: {
+      if (!call.has_resource_provider_id()) {
+        return Error("Expecting 'resource_provider_id' to be present");
+      }
+
+      if (!call.has_update()) {
+        return Error("Expecting 'update' to be present");
+      }
+
+      return None();
+    }
+  }
+
+  UNREACHABLE();
+}
+
+} // namespace call {
+} // namespace validation {
+} // namespace resource_provider {
+} // namespace internal {
+} // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/resource_provider/validation.hpp
----------------------------------------------------------------------
diff --git a/src/resource_provider/validation.hpp b/src/resource_provider/validation.hpp
new file mode 100644
index 0000000..0068f56
--- /dev/null
+++ b/src/resource_provider/validation.hpp
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+#ifndef __RESOURCE_PROVIDER_VALIDATION_HPP__
+#define __RESOURCE_PROVIDER_VALIDATION_HPP__
+
+#include <mesos/resource_provider/resource_provider.hpp>
+
+#include <stout/error.hpp>
+#include <stout/option.hpp>
+
+namespace mesos {
+namespace internal {
+namespace resource_provider {
+namespace validation {
+namespace call {
+
+Option<Error> validate(const mesos::resource_provider::Call& call);
+
+} // namespace call {
+} // namespace validation {
+} // namespace resource_provider {
+} // namespace internal {
+} // namespace mesos {
+
+#endif // __RESOURCE_PROVIDER_VALIDATION_HPP__

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index f5fe5a6..6dd2716 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -116,6 +116,7 @@ set(MESOS_TESTS_SRC
   rate_limiting_tests.cpp
   resource_offers_tests.cpp
   resource_provider_http_api_tests.cpp
+  resource_provider_validation_tests.cpp
   resources_tests.cpp
   role_tests.cpp
   scheduler_driver_tests.cpp

http://git-wip-us.apache.org/repos/asf/mesos/blob/7528f595/src/tests/resource_provider_validation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/resource_provider_validation_tests.cpp b/src/tests/resource_provider_validation_tests.cpp
new file mode 100644
index 0000000..f182bff
--- /dev/null
+++ b/src/tests/resource_provider_validation_tests.cpp
@@ -0,0 +1,83 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+#include <gtest/gtest.h>
+
+#include <mesos/mesos.hpp>
+
+#include <mesos/resource_provider/resource_provider.hpp>
+
+#include <stout/error.hpp>
+#include <stout/gtest.hpp>
+#include <stout/option.hpp>
+#include <stout/uuid.hpp>
+
+#include "resource_provider/validation.hpp"
+
+namespace call = mesos::internal::resource_provider::validation::call;
+
+using mesos::resource_provider::Call;
+
+namespace mesos {
+namespace internal {
+namespace tests {
+
+TEST(ResourceProviderCallValidationTest, Subscribe)
+{
+  Call call;
+  call.set_type(Call::SUBSCRIBE);
+
+  // Expecting `Call::Subscribe`.
+  Option<Error> error = call::validate(call);
+  EXPECT_SOME(error);
+
+  Call::Subscribe* subscribe = call.mutable_subscribe();
+  ResourceProviderInfo* info = subscribe->mutable_resource_provider_info();
+  info->set_type("org.apache.mesos.rp.test");
+  info->set_name("test");
+
+  error = call::validate(call);
+  EXPECT_NONE(error);
+}
+
+
+TEST(ResourceProviderCallValidationTest, Update)
+{
+  Call call;
+  call.set_type(Call::UPDATE);
+
+  // Expecting a resource provider ID and `Call::Update`.
+  Option<Error> error = call::validate(call);
+  EXPECT_SOME(error);
+
+  ResourceProviderID* id = call.mutable_resource_provider_id();
+  id->set_value(UUID::random().toString());
+
+  // Still expecting `Call::Update`.
+  error = call::validate(call);
+  EXPECT_SOME(error);
+
+  Call::Update* update = call.mutable_update();
+  update->set_state(Call::Update::OK);
+  update->mutable_operation();
+
+  error = call::validate(call);
+  EXPECT_NONE(error);
+}
+
+} // namespace tests {
+} // namespace internal {
+} // namespace mesos {