blob: 2c32106857af412c0f7781d5920195c7de18f11c [file] [log] [blame]
// Copyright 2009 Google Inc.
//
// Licensed 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 OMAHA_WORKER_PING_MOCK_H__
#define OMAHA_WORKER_PING_MOCK_H__
#include <windows.h>
#include <vector>
#include "omaha/goopdate/request.h"
#include "omaha/worker/ping.h"
#include "omaha/testing/unit_test.h"
namespace omaha {
class PingMock : public Ping {
public:
PingMock() {}
virtual ~PingMock() {
for (size_t i = 0; i < ping_requests_.size(); ++i) {
delete ping_requests_[i];
}
}
// Creates a copy of req and stores it in the ping_requests_ vector.
// The implementation must be kept in sync with Request's members.
virtual HRESULT SendPing(Request* req) {
ASSERT1(req);
Request* request = new Request(req->is_machine());
request->machine_id_ = req->machine_id();
request->user_id_ = req->user_id();
request->version_ = req->version();
request->os_version_ = req->os_version();
request->os_service_pack_ = req->os_service_pack();
request->test_source_ = req->test_source();
request->request_id_ = req->request_id();
request->app_requests_ = req->app_requests_;
ping_requests_.push_back(request);
return S_OK;
}
const std::vector<Request*>& ping_requests() const { return ping_requests_; }
private:
std::vector<Request*> ping_requests_;
private:
DISALLOW_EVIL_CONSTRUCTORS(PingMock);
};
// Returns the event from an AppRequest that contains a single event.
inline const PingEvent& GetSingleEventFromAppRequest(
const AppRequest& app_request,
const GUID& expected_app_guid,
bool expected_is_machine) {
const AppRequestData& app_request_data = app_request.request_data();
const AppData& app_data = app_request_data.app_data();
EXPECT_TRUE(::IsEqualGUID(expected_app_guid, app_data.app_guid()));
EXPECT_TRUE(::IsEqualGUID(GUID_NULL, app_data.parent_app_guid()));
EXPECT_EQ(expected_is_machine, app_data.is_machine_app());
EXPECT_TRUE(!app_data.version().IsEmpty());
EXPECT_TRUE(!app_data.previous_version().IsEmpty());
EXPECT_EQ(1, app_request_data.num_ping_events());
return *app_request_data.ping_events_begin();
}
inline const PingEvent& GetSingleEventFromRequest(const Request& request,
const GUID& expected_app_guid,
bool expected_is_machine) {
EXPECT_EQ(expected_is_machine, request.is_machine());
EXPECT_TRUE(!request.machine_id().IsEmpty() || !expected_is_machine);
EXPECT_TRUE(!request.user_id().IsEmpty());
EXPECT_TRUE(!request.version().IsEmpty());
EXPECT_TRUE(!request.os_version().IsEmpty());
// Skip checking request.os_service_pack() as it can be empty for RTM.
#if defined(DEBUG) || !OFFICIAL_BUILD
EXPECT_TRUE(!request.test_source().IsEmpty());
#else
EXPECT_TRUE(request.test_source().IsEmpty());
#endif
EXPECT_TRUE(!request.request_id().IsEmpty());
EXPECT_EQ(1, request.get_request_count());
return GetSingleEventFromAppRequest(*request.app_requests_begin(),
expected_app_guid,
expected_is_machine);
}
} // namespace omaha
#endif // OMAHA_WORKER_PING_MOCK_H__