Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11b8eb3c authored by Darin Petkov's avatar Darin Petkov
Browse files

Add metrics library tests. Some metrics daemon API cleanup.

Refactor the metrics daemon API a little so that we don't need
to link in libmetrics into the daemon test binary.

Review URL: http://codereview.chromium.org/2079007
parent c80dd92f
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -15,11 +15,15 @@ DAEMON = metrics_daemon
DAEMON_TEST = metrics_daemon_test
LIB = libmetrics.a
SHAREDLIB = libmetrics.so
LIB_TEST = metrics_library_test

CLIENT_OBJS = \
	metrics_client.o
LIB_OBJS = \
	metrics_library.o
TESTLIB_OBJS = \
	metrics_library.o \
	metrics_library_test.o
DAEMON_OBJS = \
	metrics_daemon.o \
	metrics_daemon_main.o
@@ -27,12 +31,13 @@ TESTDAEMON_OBJS = \
	metrics_daemon.o \
	metrics_daemon_test.o

DAEMON_LDFLAGS = $(LDCONFIG) -lrt -lbase -lpthread -lgflags
DAEMON_LDFLAGS = $(LDFLAGS) $(LDCONFIG) -lrt -lbase -lpthread -lgflags
TESTDAEMON_LIBS = -lgmock -lgtest
TESTLIB_LIBS = -lgtest -lbase -lrt -lpthread

all: $(LIB) $(SHAREDLIB) $(CLIENT) $(DAEMON)

tests: $(DAEMON_TEST)
tests: $(DAEMON_TEST) $(LIB_TEST)

$(CLIENT): $(CLIENT_OBJS) $(SHAREDLIB)
	$(CXX) $(LDFLAGS) $^ -o $@
@@ -40,7 +45,7 @@ $(CLIENT): $(CLIENT_OBJS) $(SHAREDLIB)
$(DAEMON): $(DAEMON_OBJS) $(SHAREDLIB)
	$(CXX) -o $@ $^ $(DAEMON_LDFLAGS)

$(DAEMON_TEST): $(TESTDAEMON_OBJS) $(SHAREDLIB)
$(DAEMON_TEST): $(TESTDAEMON_OBJS)
	$(CXX) -o $@ $^ $(DAEMON_LDFLAGS) $(TESTDAEMON_LIBS)

$(LIB): $(LIB_OBJS)
@@ -49,6 +54,9 @@ $(LIB): $(LIB_OBJS)
$(SHAREDLIB): $(LIB_OBJS)
	$(CXX) $(LDFLAGS) -shared $^ -o $@

$(LIB_TEST): $(TESTLIB_OBJS) $(SHAREDLIB)
	$(CXX) -o $@ $^ $(LDFLAGS) $(TESTLIB_LIBS)

%.o: %.cc
	$(CXX) $(CXXFLAGS) -c $< -o $@

@@ -64,4 +72,5 @@ metrics_daemon_test.o: \
	power_states.h

clean:
	rm -f $(CLIENT) $(DAEMON) $(LIB) $(SHAREDLIB) $(TESTDAEMON) *.o
	rm -f $(CLIENT) $(DAEMON) $(LIB) $(SHAREDLIB) *.o
	rm -f $(DAEMON_TEST) $(LIB_TEST)
+10 −13
Original line number Diff line number Diff line
@@ -100,9 +100,6 @@ const char* MetricsDaemon::kSessionStates_[] = {
};

void MetricsDaemon::Run(bool run_as_daemon) {
  MetricsLibrary metrics_lib;
  metrics_lib.Init();
  Init(false, &metrics_lib);
  if (!run_as_daemon || daemon(0, 0) == 0) {
    Loop();
  }
@@ -223,7 +220,7 @@ void MetricsDaemon::NetStateChanged(const char* state_name, time_t now) {
      network_state_ == kNetworkStateOnline &&
      power_state_ != kPowerStateMem) {
    int online_time = static_cast<int>(now - network_state_last_);
    PublishMetric(kMetricTimeToNetworkDropName, online_time,
    SendMetric(kMetricTimeToNetworkDropName, online_time,
               kMetricTimeToNetworkDropMin,
               kMetricTimeToNetworkDropMax,
               kMetricTimeToNetworkDropBuckets);
@@ -349,7 +346,7 @@ void MetricsDaemon::LogDailyUseRecord(int day, int seconds) {
      // the usage to the nearest minute and sends it to UMA.
      int minutes =
          (record.seconds_ + kSecondsPerMinute / 2) / kSecondsPerMinute;
      PublishMetric(kMetricDailyUseTimeName, minutes,
      SendMetric(kMetricDailyUseTimeName, minutes,
                 kMetricDailyUseTimeMin,
                 kMetricDailyUseTimeMax,
                 kMetricDailyUseTimeBuckets);
@@ -445,7 +442,7 @@ void MetricsDaemon::UnscheduleUseMonitor() {
  usemon_interval_ = 0;
}

void MetricsDaemon::PublishMetric(const char* name, int sample,
void MetricsDaemon::SendMetric(const std::string& name, int sample,
                               int min, int max, int nbuckets) {
  DLOG(INFO) << "received metric: " << name << " " << sample << " "
             << min << " " << max << " " << nbuckets;
+9 −9
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ class MetricsDaemon {
        usemon_source_(NULL) {}
  ~MetricsDaemon() {}

  // Initializes.
  void Init(bool testing, MetricsLibraryInterface* metrics_lib);

  // Does all the work. If |run_as_daemon| is true, daemonizes by
  // forking.
  void Run(bool run_as_daemon);
@@ -48,8 +51,8 @@ class MetricsDaemon {
  FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop);
  FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend);
  FRIEND_TEST(MetricsDaemonTest, PowerStateChanged);
  FRIEND_TEST(MetricsDaemonTest, PublishMetric);
  FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged);
  FRIEND_TEST(MetricsDaemonTest, SendMetric);
  FRIEND_TEST(MetricsDaemonTest, SessionStateChanged);
  FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateSendOnLogin);
  FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateSendOnMonitor);
@@ -119,9 +122,6 @@ class MetricsDaemon {
  // Array of user session states.
  static const char* kSessionStates_[kNumberSessionStates];

  // Initializes.
  void Init(bool testing, MetricsLibraryInterface* metrics_lib);

  // Creates the event loop and enters it.
  void Loop();

@@ -188,10 +188,10 @@ class MetricsDaemon {
  // Unschedules a scheduled use monitor, if any.
  void UnscheduleUseMonitor();

  // Sends a stat to Chrome for transport to UMA (or prints it for
  // testing). See MetricsLibrary::SendToChrome in metrics_library.h
  // for a description of the arguments.
  void PublishMetric(const char* name, int sample,
  // Sends a regular (exponential) histogram sample to Chrome for
  // transport to UMA. See MetricsLibrary::SendToUMA in
  // metrics_library.h for a description of the arguments.
  void SendMetric(const std::string& name, int sample,
                  int min, int max, int nbuckets);

  // Test mode.
+5 −2
Original line number Diff line number Diff line
@@ -10,7 +10,10 @@
DEFINE_bool(daemon, true, "run as daemon (use -nodaemon for debugging)");

int main(int argc, char** argv) {
  MetricsDaemon::MetricsDaemon d;
  google::ParseCommandLineFlags(&argc, &argv, true);
  d.Run(FLAGS_daemon);
  MetricsLibrary metrics_lib;
  metrics_lib.Init();
  MetricsDaemon daemon;
  daemon.Init(false, &metrics_lib);
  daemon.Run(FLAGS_daemon);
}
+8 −6
Original line number Diff line number Diff line
@@ -25,7 +25,9 @@ static const int kSecondsPerDay = 24 * 60 * 60;
class MetricsDaemonTest : public testing::Test {
 protected:
  virtual void SetUp() {
    EXPECT_EQ(NULL, daemon_.daily_use_record_file_);
    daemon_.Init(true, &metrics_lib_);
    EXPECT_TRUE(NULL != daemon_.daily_use_record_file_);
    daemon_.daily_use_record_file_ = kTestDailyUseRecordFile;

    // The test fixture object will be used by the log message handler.
@@ -423,12 +425,6 @@ TEST_F(MetricsDaemonTest, PowerStateChanged) {
  EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30);
}

TEST_F(MetricsDaemonTest, PublishMetric) {
  ExpectMetric("Dummy.Metric", 3, 1, 100, 50);
  daemon_.PublishMetric("Dummy.Metric", /* sample */ 3,
                        /* min */ 1, /* max */ 100, /* buckets */ 50);
}

TEST_F(MetricsDaemonTest, ScreenSaverStateChanged) {
  EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState,
            daemon_.screensaver_state_);
@@ -460,6 +456,12 @@ TEST_F(MetricsDaemonTest, ScreenSaverStateChanged) {
  EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 200);
}

TEST_F(MetricsDaemonTest, SendMetric) {
  ExpectMetric("Dummy.Metric", 3, 1, 100, 50);
  daemon_.SendMetric("Dummy.Metric", /* sample */ 3,
                     /* min */ 1, /* max */ 100, /* buckets */ 50);
}

TEST_F(MetricsDaemonTest, SessionStateChanged) {
  EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_);
  EXPECT_FALSE(daemon_.user_active_);
Loading