namespace base {
class StatsTableTest : public MultiProcessTest {
- public:
- void DeleteShmem(const std::string& name) {
- SharedMemory mem;
- mem.Delete(name);
- }
};
// Open a StatsTable and verify that we can write to each of the
// locations in the table.
TEST_F(StatsTableTest, VerifySlots) {
- const std::string kTableName = "VerifySlotsStatTable";
const int kMaxThreads = 1;
const int kMaxCounter = 5;
- DeleteShmem(kTableName);
- StatsTable table(kTableName, kMaxThreads, kMaxCounter);
+ StatsTable table(StatsTable::TableIdentifier(), kMaxThreads, kMaxCounter);
// Register a single thread.
std::string thread_name = "mainThread";
// Try to allocate an additional counter. Verify it fails.
int counter_id = table.FindCounter(counter_base_name);
EXPECT_EQ(counter_id, 0);
-
- DeleteShmem(kTableName);
}
// CounterZero will continually be set to 0.
#endif
TEST_F(StatsTableTest, MAYBE_MultipleThreads) {
// Create a stats table.
- const std::string kTableName = "MultipleThreadStatTable";
const int kMaxThreads = 20;
const int kMaxCounter = 5;
- DeleteShmem(kTableName);
- StatsTable table(kTableName, kMaxThreads, kMaxCounter);
+ StatsTable table(StatsTable::TableIdentifier(), kMaxThreads, kMaxCounter);
StatsTable::set_current(&table);
EXPECT_EQ(0, table.CountThreadsRegistered());
EXPECT_EQ((kMaxThreads % 2) * kThreadLoops,
table.GetCounterValue(name));
EXPECT_EQ(0, table.CountThreadsRegistered());
-
- DeleteShmem(kTableName);
}
+// This multiprocess test only runs on Windows. On Posix, the shared memory
+// handle is not sent between the processes properly.
+#if defined(OS_WIN)
const std::string kMPTableName = "MultipleProcessStatTable";
MULTIPROCESS_TEST_MAIN(StatsTableMultipleProcessMain) {
// Create a stats table.
const int kMaxProcs = 20;
const int kMaxCounter = 5;
- DeleteShmem(kMPTableName);
StatsTable table(kMPTableName, kMaxProcs, kMaxCounter);
StatsTable::set_current(&table);
EXPECT_EQ(0, table.CountThreadsRegistered());
EXPECT_EQ(-kMaxProcs * kThreadLoops,
table.GetCounterValue(name));
EXPECT_EQ(0, table.CountThreadsRegistered());
-
- DeleteShmem(kMPTableName);
}
+#endif
class MockStatsCounter : public StatsCounter {
public:
// Test some basic StatsCounter operations
TEST_F(StatsTableTest, StatsCounter) {
// Create a stats table.
- const std::string kTableName = "StatTable";
const int kMaxThreads = 20;
const int kMaxCounter = 5;
- DeleteShmem(kTableName);
- StatsTable table(kTableName, kMaxThreads, kMaxCounter);
+ StatsTable table(StatsTable::TableIdentifier(), kMaxThreads, kMaxCounter);
StatsTable::set_current(&table);
MockStatsCounter foo("foo");
EXPECT_EQ(-1, table.GetCounterValue("c:foo"));
foo.Subtract(-1);
EXPECT_EQ(0, table.GetCounterValue("c:foo"));
-
- DeleteShmem(kTableName);
}
class MockStatsCounterTimer : public StatsCounterTimer {
// Test some basic StatsCounterTimer operations
TEST_F(StatsTableTest, StatsCounterTimer) {
// Create a stats table.
- const std::string kTableName = "StatTable";
const int kMaxThreads = 20;
const int kMaxCounter = 5;
- DeleteShmem(kTableName);
- StatsTable table(kTableName, kMaxThreads, kMaxCounter);
+ StatsTable table(StatsTable::TableIdentifier(), kMaxThreads, kMaxCounter);
StatsTable::set_current(&table);
MockStatsCounterTimer bar("bar");
bar.Stop();
EXPECT_GT(table.GetCounterValue("t:bar"), 0);
EXPECT_LE(kDuration.InMilliseconds() * 2, table.GetCounterValue("t:bar"));
- DeleteShmem(kTableName);
}
// Test some basic StatsRate operations
TEST_F(StatsTableTest, StatsRate) {
// Create a stats table.
- const std::string kTableName = "StatTable";
const int kMaxThreads = 20;
const int kMaxCounter = 5;
- DeleteShmem(kTableName);
- StatsTable table(kTableName, kMaxThreads, kMaxCounter);
+ StatsTable table(StatsTable::TableIdentifier(), kMaxThreads, kMaxCounter);
StatsTable::set_current(&table);
StatsRate baz("baz");
baz.Stop();
EXPECT_EQ(2, table.GetCounterValue("c:baz"));
EXPECT_LE(kDuration.InMilliseconds() * 2, table.GetCounterValue("t:baz"));
- DeleteShmem(kTableName);
}
// Test some basic StatsScope operations
TEST_F(StatsTableTest, StatsScope) {
// Create a stats table.
- const std::string kTableName = "StatTable";
const int kMaxThreads = 20;
const int kMaxCounter = 5;
- DeleteShmem(kTableName);
- StatsTable table(kTableName, kMaxThreads, kMaxCounter);
+ StatsTable table(StatsTable::TableIdentifier(), kMaxThreads, kMaxCounter);
StatsTable::set_current(&table);
StatsCounterTimer foo("foo");
EXPECT_LE(kDuration.InMilliseconds() * 2, table.GetCounterValue("t:foo"));
EXPECT_LE(kDuration.InMilliseconds() * 2, table.GetCounterValue("t:bar"));
EXPECT_EQ(2, table.GetCounterValue("c:bar"));
-
- DeleteShmem(kTableName);
}
} // namespace base