| Index: components/policy/core/common/cloud/cloud_policy_client_unittest.cc
|
| diff --git a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
|
| index dc9faf0b5d09063131891c5c606e383495d5e8ed..502e15cc87ae07dcaa9f7cb4593036fb978a8983 100644
|
| --- a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
|
| +++ b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "components/policy/core/common/cloud/cloud_policy_client.h"
|
|
|
| +#include <stdint.h>
|
| +
|
| #include <map>
|
| #include <set>
|
|
|
| @@ -21,6 +23,7 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using testing::ElementsAre;
|
| using testing::Mock;
|
| using testing::Return;
|
| using testing::SaveArg;
|
| @@ -41,6 +44,11 @@ const char kDMToken[] = "fake-dm-token";
|
| const char kDeviceCertificate[] = "fake-device-certificate";
|
| const char kRequisition[] = "fake-requisition";
|
| const char kStateKey[] = "fake-state-key";
|
| +const char kPayload[] = "input_payload";
|
| +const char kResultPayload[] = "output_payload";
|
| +
|
| +const int64_t kLastCommandId = 123456789;
|
| +const int64_t kTimestamp = 987654321;
|
|
|
| MATCHER_P(MatchProto, expected, "matches protobuf") {
|
| return arg.SerializePartialAsString() == expected.SerializePartialAsString();
|
| @@ -50,11 +58,21 @@ MATCHER_P(MatchProto, expected, "matches protobuf") {
|
| class MockUploadObserver {
|
| public:
|
| MockUploadObserver() {}
|
| - virtual ~MockUploadObserver() {}
|
|
|
| MOCK_METHOD1(OnUploadComplete, void(bool));
|
| };
|
|
|
| +// A mock class to allow us to set expectations on remote command fetch
|
| +// callbacks.
|
| +class MockRemoteCommandsObserver {
|
| + public:
|
| + MockRemoteCommandsObserver() {}
|
| +
|
| + MOCK_METHOD2(OnRemoteCommandsFetched,
|
| + void(DeviceManagementStatus,
|
| + const std::vector<em::RemoteCommand>&));
|
| +};
|
| +
|
| } // namespace
|
|
|
| class CloudPolicyClientTest : public testing::Test {
|
| @@ -88,13 +106,32 @@ class CloudPolicyClientTest : public testing::Test {
|
|
|
| upload_status_request_.mutable_device_status_report_request();
|
| upload_status_request_.mutable_session_status_report_request();
|
| +
|
| + remote_command_request_.mutable_remote_command_request()
|
| + ->set_last_command_unique_id(kLastCommandId);
|
| + em::RemoteCommandResult* command_result =
|
| + remote_command_request_.mutable_remote_command_request()
|
| + ->add_command_results();
|
| + command_result->set_unique_id(kLastCommandId);
|
| + command_result->set_result(
|
| + em::RemoteCommandResult_ResultType_RESULT_SUCCESS);
|
| + command_result->set_payload(kResultPayload);
|
| + command_result->set_timestamp(kTimestamp);
|
| +
|
| + em::RemoteCommand* command =
|
| + remote_command_response_.mutable_remote_command_response()
|
| + ->add_commands();
|
| + command->set_timestamp(kTimestamp + 1);
|
| + command->set_payload(kPayload);
|
| + command->set_unique_id(kLastCommandId + 1);
|
| + command->set_type(em::RemoteCommand_Type_COMMAND_ECHO_TEST);
|
| }
|
|
|
| - virtual void SetUp() override {
|
| + void SetUp() override {
|
| CreateClient(USER_AFFILIATION_NONE);
|
| }
|
|
|
| - virtual void TearDown() override {
|
| + void TearDown() override {
|
| client_->RemoveObserver(&observer_);
|
| }
|
|
|
| @@ -175,6 +212,17 @@ class CloudPolicyClientTest : public testing::Test {
|
| client_id_, MatchProto(upload_status_request_)));
|
| }
|
|
|
| + void ExpectFetchRemoteCommands() {
|
| + EXPECT_CALL(service_,
|
| + CreateJob(DeviceManagementRequestJob::TYPE_REMOTE_COMMANDS,
|
| + request_context_))
|
| + .WillOnce(service_.SucceedJob(remote_command_response_));
|
| + EXPECT_CALL(service_,
|
| + StartJob(dm_protocol::kValueRequestRemoteCommands,
|
| + std::string(), std::string(), kDMToken, std::string(),
|
| + client_id_, MatchProto(remote_command_request_)));
|
| + }
|
| +
|
| void CheckPolicyResponse() {
|
| ASSERT_TRUE(client_->GetPolicyFor(policy_type_, std::string()));
|
| EXPECT_THAT(*client_->GetPolicyFor(policy_type_, std::string()),
|
| @@ -194,6 +242,7 @@ class CloudPolicyClientTest : public testing::Test {
|
| em::DeviceManagementRequest unregistration_request_;
|
| em::DeviceManagementRequest upload_certificate_request_;
|
| em::DeviceManagementRequest upload_status_request_;
|
| + em::DeviceManagementRequest remote_command_request_;
|
|
|
| // Protobufs used in successful responses.
|
| em::DeviceManagementResponse registration_response_;
|
| @@ -201,6 +250,7 @@ class CloudPolicyClientTest : public testing::Test {
|
| em::DeviceManagementResponse unregistration_response_;
|
| em::DeviceManagementResponse upload_certificate_response_;
|
| em::DeviceManagementResponse upload_status_response_;
|
| + em::DeviceManagementResponse remote_command_response_;
|
|
|
| base::MessageLoop loop_;
|
| std::string client_id_;
|
| @@ -717,4 +767,30 @@ TEST_F(CloudPolicyClientTest, RequestCancelOnUnregister) {
|
| EXPECT_EQ(0, client_->GetActiveRequestCountForTest());
|
| }
|
|
|
| +TEST_F(CloudPolicyClientTest, FetchRemoteCommands) {
|
| + StrictMock<MockRemoteCommandsObserver> remote_commands_observer;
|
| +
|
| + Register();
|
| +
|
| + ExpectFetchRemoteCommands();
|
| + EXPECT_CALL(
|
| + remote_commands_observer,
|
| + OnRemoteCommandsFetched(
|
| + DM_STATUS_SUCCESS,
|
| + ElementsAre(MatchProto(
|
| + remote_command_response_.remote_command_response().commands(0)))))
|
| + .Times(1);
|
| + const CloudPolicyClient::RemoteCommandCallback callback =
|
| + base::Bind(&MockRemoteCommandsObserver::OnRemoteCommandsFetched,
|
| + base::Unretained(&remote_commands_observer));
|
| +
|
| + const std::vector<em::RemoteCommandResult> command_results(
|
| + 1, remote_command_request_.remote_command_request().command_results(0));
|
| + client_->FetchRemoteCommands(
|
| + make_scoped_ptr(new RemoteCommandJob::UniqueIDType(kLastCommandId)),
|
| + command_results, callback);
|
| +
|
| + EXPECT_EQ(DM_STATUS_SUCCESS, client_->status());
|
| +}
|
| +
|
| } // namespace policy
|
|
|