You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2015/08/07 20:19:12 UTC
[2/2] mesos git commit: Revert "Tests for subscribe/failover
functionality for HTTP based framework."
Revert "Tests for subscribe/failover functionality for HTTP based framework."
This reverts commit 67a85c6e885136da86bbd9bc267910fb0ec23820 that
was incorrectly committed before its dependency was committed.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f59e969a
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f59e969a
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f59e969a
Branch: refs/heads/master
Commit: f59e969a73f05d41f0dc7282b4ea30f193011d70
Parents: d358875
Author: Vinod Kone <vi...@gmail.com>
Authored: Fri Aug 7 10:54:08 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Aug 7 10:54:08 2015 -0700
----------------------------------------------------------------------
src/tests/http_api_tests.cpp | 389 +-------------------------------------
1 file changed, 1 insertion(+), 388 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/f59e969a/src/tests/http_api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/http_api_tests.cpp b/src/tests/http_api_tests.cpp
index 57d7e74..586d112 100644
--- a/src/tests/http_api_tests.cpp
+++ b/src/tests/http_api_tests.cpp
@@ -16,22 +16,11 @@
* limitations under the License.
*/
-#include <string>
-
-#include <mesos/scheduler.hpp>
-
#include <process/future.hpp>
#include <process/gtest.hpp>
#include <process/http.hpp>
#include <process/pid.hpp>
-#include <stout/json.hpp>
-#include <stout/lambda.hpp>
-#include <stout/recordio.hpp>
-
-#include "common/http.hpp"
-#include "common/recordio_response.hpp"
-
#include "master/master.hpp"
#include "tests/mesos.hpp"
@@ -40,76 +29,18 @@
using mesos::internal::master::Master;
-using mesos::internal::RecordIOResponseReader;
-
-using mesos::scheduler::Call;
-using mesos::scheduler::Event;
-
using process::Future;
using process::PID;
using process::http::BadRequest;
-using process::http::OK;
-using process::http::Pipe;
using process::http::Response;
-using std::string;
-
-using testing::WithParamInterface;
-
namespace mesos {
namespace internal {
namespace tests {
-class HttpApiTest
- : public MesosTest,
- public WithParamInterface<string>
-{
-public:
- Try<Event> deserialize(
- const std::string& contentType,
- const std::string& body)
- {
- if (contentType == APPLICATION_PROTOBUF) {
- Event event;
- if (!event.ParseFromString(body)) {
- return Error("Failed to parse body into Event protobuf");
- }
- return event;
- }
-
- Try<JSON::Value> value = JSON::parse(body);
- Try<Event> parse = ::protobuf::parse<Event>(value.get());
- return parse;
- }
-
- std::string serialize(const Call& call, const std::string& contentType)
- {
- if (contentType == APPLICATION_PROTOBUF) {
- return call.SerializeAsString();
- }
-
- return stringify(JSON::Protobuf(call));
- }
-};
-
-
-// The HttpApi tests are parameterized by the content type.
-INSTANTIATE_TEST_CASE_P(
- ContentType,
- HttpApiTest,
- ::testing::Values(APPLICATION_PROTOBUF, APPLICATION_JSON));
-
-
-// TODO(anand): Add tests for:
-// - A subscribed scheduler closes it's reader and then tries to
-// subscribe again before the framework failover timeout and should
-// succeed.
-//
-// - A subscribed PID scheduler disconnects and then tries to
-// subscribe again as a HTTP framework before the framework failover
-// timeout and should succeed.
+class HttpApiTest : public MesosTest {};
// TODO(anand): Add additional tests for validation.
@@ -131,324 +62,6 @@ TEST_F(HttpApiTest, NoContentType)
AWAIT_EXPECT_RESPONSE_STATUS_EQ(BadRequest().status, response);
}
-
-// This test verifies if the scheduler is able to receive a Subscribed
-// event on the stream in response to a Subscribe call request.
-TEST_P(HttpApiTest, Subscribe)
-{
- // TODO(anand): Enable authentication later.
- master::Flags flags = CreateMasterFlags();
- flags.authenticate_frameworks = false;
-
- Try<PID<Master>> master = StartMaster(flags);
- ASSERT_SOME(master);
-
- Call call;
- call.set_type(Call::SUBSCRIBE);
-
- FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
-
- Call::Subscribe* subscribe = call.mutable_subscribe();
- subscribe->mutable_framework_info()->CopyFrom(frameworkInfo);
-
- // Retrieve the parameter passed as content type to this test.
- const std::string contentType = GetParam();
- hashmap<string, string> headers;
- headers["Accept"] = contentType;
-
- Future<Response> response = process::http::streaming::post(
- master.get(),
- "call",
- headers,
- serialize(call, contentType),
- contentType);
-
- AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response);
- EXPECT_SOME_EQ("chunked", response.get().headers.get("Transfer-Encoding"));
- ASSERT_EQ(Response::PIPE, response.get().type);
-
- Option<Pipe::Reader> reader = response.get().reader;
- ASSERT_SOME(reader);
-
- auto deserializer =
- lambda::bind(&HttpApiTest::deserialize, this, contentType, lambda::_1);
-
- recordio::Decoder<Event> decoder(deserializer);
- RecordIOResponseReader<Event>
- responseDecoder(decoder, reader.get());
-
- Future<Option<Event>> event = responseDecoder.read();
- AWAIT_READY(event);
- ASSERT_SOME(event.get());
-
- // Check event type is subscribed and the framework id is set.
- ASSERT_EQ(event.get().get().type(), Event::SUBSCRIBED);
- EXPECT_NE(event.get().get().subscribed().framework_id().value(), "");
-
- Shutdown();
-}
-
-
-// This test verifies if the scheduler can subscribe on retrying,
-// e.g. after a ZK blip.
-TEST_P(HttpApiTest, SubscribedOnRetryWithForce)
-{
- // TODO(anand): Enable authentication later.
- master::Flags flags = CreateMasterFlags();
- flags.authenticate_frameworks = false;
-
- Try<PID<Master>> master = StartMaster(flags);
- ASSERT_SOME(master);
-
- Call call;
- call.set_type(Call::SUBSCRIBE);
-
- FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
-
- Call::Subscribe* subscribe = call.mutable_subscribe();
- subscribe->mutable_framework_info()->CopyFrom(frameworkInfo);
-
- // Retrieve the parameter passed as content type to this test.
- const std::string contentType = GetParam();
- hashmap<string, string> headers;
- headers["Accept"] = contentType;
-
- Future<Response> response = process::http::streaming::post(
- master.get(),
- "call",
- headers,
- serialize(call, contentType),
- contentType);
-
- AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response);
- ASSERT_EQ(Response::PIPE, response.get().type);
-
- Option<Pipe::Reader> reader = response.get().reader;
- ASSERT_SOME(reader);
-
- auto deserializer =
- lambda::bind(&HttpApiTest::deserialize, this, contentType, lambda::_1);
-
- recordio::Decoder<Event> decoder(deserializer);
- RecordIOResponseReader<Event>
- responseDecoder(decoder, reader.get());
-
- Future<Option<Event>> event = responseDecoder.read();
- AWAIT_READY(event);
- ASSERT_SOME(event.get());
-
- // Check event type is subscribed and the framework id is set.
- ASSERT_EQ(event.get().get().type(), Event::SUBSCRIBED);
- EXPECT_NE(event.get().get().subscribed().framework_id().value(), "");
-
- // Now subscribe again with force set.
- subscribe->set_force(true);
-
- call.mutable_framework_id()->
- CopyFrom(event.get().get().subscribed().framework_id());
-
- subscribe->mutable_framework_info()->mutable_id()->
- CopyFrom(event.get().get().subscribed().framework_id());
-
- auto response2 = process::http::streaming::post(
- master.get(),
- "call",
- headers,
- serialize(call, contentType),
- contentType);
-
- Option<Pipe::Reader> reader2 = response2.get().reader;
- ASSERT_SOME(reader2);
-
- recordio::Decoder<Event> decoder2(deserializer);
- RecordIOResponseReader<Event>
- responseDecoder2(decoder2, reader2.get());
-
- // Check if we were successfully able to subscribe after the blip.
- Future<Option<Event>> event2 = responseDecoder2.read();
- AWAIT_READY(event2);
- ASSERT_FALSE(event2.isFailed());
- ASSERT_SOME(event2.get());
-
- // Check event type is subscribed and the same framework id is set.
- ASSERT_EQ(event2.get().get().type(), Event::SUBSCRIBED);
- EXPECT_EQ(event2.get().get().subscribed().framework_id(),
- event.get().get().subscribed().framework_id());
-
- Shutdown();
-}
-
-
-// This test verifies if we are able to upgrade from a pid
-// based framework to http when force is set.
-TEST_P(HttpApiTest, UpdatePidToHttpScheduler)
-{
- // TODO(anand): Enable authentication later.
- master::Flags flags = CreateMasterFlags();
- flags.authenticate_frameworks = false;
-
- FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
- frameworkInfo.set_failover_timeout(Weeks(2).secs());
-
- Try<PID<Master>> master = StartMaster(flags);
- ASSERT_SOME(master);
-
- // Start the scheduler without credentials.
- MockScheduler sched;
- StandaloneMasterDetector detector(master.get());
- TestingMesosSchedulerDriver driver(&sched, &detector, frameworkInfo);
-
- Future<FrameworkID> frameworkId;
- EXPECT_CALL(sched, registered(&driver, _, _))
- .WillOnce(FutureArg<1>(&frameworkId));
-
- // Check that driver is notified with an error when the http
- // framework is connected.
- Future<FrameworkErrorMessage> errorMessage =
- FUTURE_PROTOBUF(FrameworkErrorMessage(), _, _);
-
- EXPECT_CALL(sched, error(_, _));
-
- driver.start();
-
- AWAIT_READY(frameworkId);
- EXPECT_NE("", frameworkId.get().value());
-
- // Now try to subscribe as a HTTP framework.
- Call call;
- call.set_type(Call::SUBSCRIBE);
- call.mutable_framework_id()->CopyFrom(frameworkId.get());
-
- Call::Subscribe* subscribe = call.mutable_subscribe();
-
- subscribe->mutable_framework_info()->CopyFrom(frameworkInfo);
- subscribe->mutable_framework_info()->mutable_id()->
- CopyFrom(frameworkId.get());
-
- subscribe->set_force(true);
-
- // Retrieve the parameter passed as content type to this test.
- const std::string contentType = GetParam();
- hashmap<string, string> headers;
- headers["Accept"] = contentType;
-
- Future<Response> response = process::http::streaming::post(
- master.get(),
- "call",
- headers,
- serialize(call, contentType),
- contentType);
-
- AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response);
- EXPECT_SOME_EQ("chunked", response.get().headers.get("Transfer-Encoding"));
- ASSERT_EQ(Response::PIPE, response.get().type);
-
- Option<Pipe::Reader> reader = response.get().reader;
- ASSERT_SOME(reader);
-
- auto deserializer =
- lambda::bind(&HttpApiTest::deserialize, this, contentType, lambda::_1);
-
- recordio::Decoder<Event> decoder(deserializer);
- RecordIOResponseReader<Event>
- responseDecoder(decoder, reader.get());
-
- Future<Option<Event>> event = responseDecoder.read();
- AWAIT_READY(event);
- ASSERT_SOME(event.get());
-
- // Check event type is subscribed and the framework id is set.
- ASSERT_EQ(event.get().get().type(), Event::SUBSCRIBED);
- EXPECT_EQ(frameworkId.get(),
- event.get().get().subscribed().framework_id());
-
- driver.stop();
- driver.join();
-
- Shutdown();
-}
-
-
-// This test verifies that updating a PID based framework to HTTP
-// framework fails when force is not set and the PID based
-// framework is already connected.
-TEST_P(HttpApiTest, UpdatePidToHttpSchedulerWithoutForce)
-{
- // TODO(anand): Enable authentication later.
- master::Flags flags = CreateMasterFlags();
- flags.authenticate_frameworks = false;
-
- FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
- frameworkInfo.set_failover_timeout(Weeks(2).secs());
-
- Try<PID<Master>> master = StartMaster(flags);
- ASSERT_SOME(master);
-
- // Start the scheduler without credentials.
- MockScheduler sched;
- StandaloneMasterDetector detector(master.get());
- TestingMesosSchedulerDriver driver(&sched, &detector, frameworkInfo);
-
- Future<FrameworkID> frameworkId;
- EXPECT_CALL(sched, registered(&driver, _, _))
- .WillOnce(FutureArg<1>(&frameworkId));
-
- driver.start();
-
- AWAIT_READY(frameworkId);
- EXPECT_NE("", frameworkId.get().value());
-
- // Now try to subscribe using a HTTP framework without setting
- // 'force' field.
- Call call;
- call.set_type(Call::SUBSCRIBE);
- call.mutable_framework_id()->CopyFrom(frameworkId.get());
-
- Call::Subscribe* subscribe = call.mutable_subscribe();
- subscribe->mutable_framework_info()->CopyFrom(frameworkInfo);
- subscribe->mutable_framework_info()->mutable_id()->
- CopyFrom(frameworkId.get());
-
- // Retrieve the parameter passed as content type to this test.
- const std::string contentType = GetParam();
- hashmap<string, string> headers;
- headers["Accept"] = contentType;
-
- Future<Response> response = process::http::streaming::post(
- master.get(),
- "call",
- headers,
- serialize(call, contentType),
- contentType);
-
- AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response);
- EXPECT_SOME_EQ("chunked", response.get().headers.get("Transfer-Encoding"));
- ASSERT_EQ(Response::PIPE, response.get().type);
-
- Option<Pipe::Reader> reader = response.get().reader;
- ASSERT_SOME(reader);
-
- auto deserializer =
- lambda::bind(&HttpApiTest::deserialize, this, contentType, lambda::_1);
-
- recordio::Decoder<Event> decoder(deserializer);
- RecordIOResponseReader<Event>
- responseDecoder(decoder, reader.get());
-
- Future<Option<Event>> event = responseDecoder.read();
- AWAIT_READY(event);
- ASSERT_SOME(event.get());
-
- // We should be receiving an error event since the PID framework
- // was already connected.
- ASSERT_EQ(event.get().get().type(), Event::ERROR);
-
- driver.stop();
- driver.join();
-
- Shutdown();
-}
-
} // namespace tests {
} // namespace internal {
} // namespace mesos {