#ifndef COMPONENTS_DOMAIN_RELIABILITY_TEST_UTIL_H_
#define COMPONENTS_DOMAIN_RELIABILITY_TEST_UTIL_H_
#include "base/callback.h"
#include "components/domain_reliability/monitor.h"
#include "components/domain_reliability/uploader.h"
#include "components/domain_reliability/util.h"
#include "net/base/host_port_pair.h"
namespace net {
class URLRequestStatus;
}
namespace domain_reliability {
class TestCallback {
public:
TestCallback();
~TestCallback();
const base::Closure& callback() const { return callback_; }
bool called() const { return called_; }
private:
void OnCalled();
base::Closure callback_;
bool called_;
};
class MockUploader : public DomainReliabilityUploader {
public:
typedef base::Callback<void(const std::string& report_json,
const GURL& upload_url,
const UploadCallback& upload_callback)>
UploadRequestCallback;
MockUploader(const UploadRequestCallback& callback);
virtual ~MockUploader();
virtual void UploadReport(const std::string& report_json,
const GURL& upload_url,
const UploadCallback& callback) OVERRIDE;
private:
UploadRequestCallback callback_;
};
class MockTime : public MockableTime {
public:
MockTime();
virtual ~MockTime();
virtual base::TimeTicks Now() OVERRIDE;
virtual scoped_ptr<MockableTime::Timer> CreateTimer() OVERRIDE;
void Advance(base::TimeDelta delta);
void AddTask(base::TimeDelta delay, const base::Closure& task);
private:
struct TaskKey {
TaskKey(base::TimeTicks time, int sequence_number)
: time(time),
sequence_number(sequence_number) {}
base::TimeTicks time;
int sequence_number;
};
struct TaskKeyCompare {
bool operator() (const TaskKey& lhs, const TaskKey& rhs) const {
return lhs.time < rhs.time ||
(lhs.time == rhs.time &&
lhs.sequence_number < rhs.sequence_number);
}
};
typedef std::map<TaskKey, base::Closure, TaskKeyCompare> TaskMap;
int elapsed_sec() { return (now_ - epoch_).InSeconds(); }
base::TimeTicks now_;
base::TimeTicks epoch_;
int task_sequence_number_;
TaskMap tasks_;
};
}
#endif