libexperiments: fix C-version initializer API function
Change-Id: Ie786cbd905f903a2ff5b7838dd88ba423b4dc24a
diff --git a/libexperiments/experiments.cc b/libexperiments/experiments.cc
index d3dcb2b..89fec64 100644
--- a/libexperiments/experiments.cc
+++ b/libexperiments/experiments.cc
@@ -64,13 +64,17 @@
register_func_ = register_func;
min_time_between_refresh_usec_ = min_time_between_refresh_usec;
- if (!Register_Locked(names_to_register))
- return false;
+ initialized_ = true; // initialization part succeeded at this point
- // initial read of registered experiments states
- Refresh();
+ // register any provided experiments
+ if (!names_to_register.empty()) {
+ if (!Register_Locked(names_to_register))
+ return false;
- initialized_ = true;
+ // initial read of registered experiments states
+ Refresh();
+ }
+
return true;
}
@@ -156,7 +160,7 @@
experiments = new Experiments();
return experiments->Initialize(config_dir, min_time_between_refresh_usec,
- register_func, {""});
+ register_func, {});
}
int experiments_is_initialized() {
@@ -171,6 +175,10 @@
return experiments ? experiments->IsRegistered(name) : false;
}
+int experiments_get_num_of_registered_experiments() {
+ return experiments ? experiments->GetNumOfRegisteredExperiments() : 0;
+}
+
int experiments_is_enabled(const char *name) {
return experiments ? experiments->IsEnabled(name) : false;
}
diff --git a/libexperiments/experiments.h b/libexperiments/experiments.h
index 54c6389..1f086ba 100644
--- a/libexperiments/experiments.h
+++ b/libexperiments/experiments.h
@@ -84,8 +84,10 @@
last_time_refreshed_usec_(0) {}
virtual ~Experiments() {}
- // Initializes the instance:
- // * Sets the provided experiments config directory and register function.
+ // Initializes the instance and registers any provided experiments. In detail:
+ // * Sets the provided experiments config directory and register function and
+ // makes sure they are valid. If successful the instance is marked as
+ // initialized.
// * Calls the register function for the provided experiment names.
// * Scans the config folder to determine initial state of all registered
// experiments.
@@ -113,6 +115,10 @@
return Register(names);
}
+ int GetNumOfRegisteredExperiments() const {
+ return registered_experiments_.size();
+ }
+
// Returns true if the given experiment is registered.
bool IsRegistered(const std::string &name);
@@ -205,6 +211,9 @@
// else 0 (boolean false).
int experiments_is_registered(const char *name);
+// Returns the number of experiments registered.
+int experiments_get_num_of_registered_experiments();
+
// Returns non-zero (boolean true) if the given experiment is active, else 0
// (boolean false). If the minimum time between refreshes has passed, re-scans
// the config folder for updates first.
diff --git a/libexperiments/experiments_test.cc b/libexperiments/experiments_test.cc
index e0370cc..5f0178d 100644
--- a/libexperiments/experiments_test.cc
+++ b/libexperiments/experiments_test.cc
@@ -131,6 +131,7 @@
ASSERT_TRUE(e.Initialize(test_folder_path_, 0, &DummyExperimentsRegisterFunc,
{"exp1"}));
EXPECT_TRUE(e.IsRegistered("exp1"));
+ EXPECT_EQ(1, e.GetNumOfRegisteredExperiments());
// add one more
EXPECT_FALSE(e.IsRegistered("exp2"));
@@ -160,6 +161,7 @@
ASSERT_TRUE(e.Initialize(test_folder_path_, 0, &DummyExperimentsRegisterFunc,
{"exp1"}));
EXPECT_FALSE(e.IsEnabled("exp1"));
+ EXPECT_EQ(1, e.GetNumOfRegisteredExperiments());
EXPECT_TRUE(SetActive(&e, "exp1"));
EXPECT_TRUE(e.IsEnabled("exp1"));
@@ -178,6 +180,7 @@
Experiments e;
ASSERT_TRUE(e.Initialize(test_folder_path_, 0, &DummyExperimentsRegisterFunc,
{"exp1", "exp2", "exp3"}));
+ EXPECT_EQ(3, e.GetNumOfRegisteredExperiments());
EXPECT_FALSE(e.IsEnabled("exp1"));
EXPECT_FALSE(e.IsEnabled("exp2"));
EXPECT_FALSE(e.IsEnabled("exp3"));
@@ -233,6 +236,7 @@
Experiments e;
ASSERT_TRUE(e.Initialize(test_folder_path_, kMinTimeBetweenRefresh,
&DummyExperimentsRegisterFunc, {"exp1"}));
+ EXPECT_EQ(1, e.GetNumOfRegisteredExperiments());
EXPECT_FALSE(e.IsEnabled("exp1"));
EXPECT_TRUE(SetActive(&e, "exp1"));
@@ -263,9 +267,11 @@
// initialize
EXPECT_TRUE(test_experiments_initialize(test_folder_path_));
EXPECT_TRUE(test_experiments_is_initialized());
+ EXPECT_EQ(0, experiments_get_num_of_registered_experiments());
EXPECT_TRUE(test_experiments_register("exp1"));
EXPECT_TRUE(test_experiments_is_registered("exp1"));
+ EXPECT_EQ(1, experiments_get_num_of_registered_experiments());
EXPECT_FALSE(test_experiments_is_enabled("exp1"));
EXPECT_TRUE(SetActive(experiments, "exp1"));