Add API to enable additional producer_name_filter entries in a session
Change-Id: I5a5517e95402ce31b6f639549a219793f6edefda
diff --git a/src/tracing/core/service_impl_unittest.cc b/src/tracing/core/service_impl_unittest.cc
index 6e74a4a..81f4634 100644
--- a/src/tracing/core/service_impl_unittest.cc
+++ b/src/tracing/core/service_impl_unittest.cc
@@ -246,6 +246,82 @@
consumer->WaitForTracingDisabled();
}
+TEST_F(TracingServiceImplTest, ProducerNameFilterChange) {
+ std::unique_ptr<MockConsumer> consumer = CreateMockConsumer();
+ consumer->Connect(svc.get());
+
+ std::unique_ptr<MockProducer> producer1 = CreateMockProducer();
+ producer1->Connect(svc.get(), "mock_producer_1");
+ producer1->RegisterDataSource("data_source");
+
+ std::unique_ptr<MockProducer> producer2 = CreateMockProducer();
+ producer2->Connect(svc.get(), "mock_producer_2");
+ producer2->RegisterDataSource("data_source");
+
+ std::unique_ptr<MockProducer> producer3 = CreateMockProducer();
+ producer3->Connect(svc.get(), "mock_producer_3");
+ producer3->RegisterDataSource("data_source");
+ producer3->RegisterDataSource("unused_data_source");
+
+ TraceConfig trace_config;
+ trace_config.add_buffers()->set_size_kb(128);
+ auto* data_source = trace_config.add_data_sources();
+ data_source->mutable_config()->set_name("data_source");
+ *data_source->add_producer_name_filter() = "mock_producer_1";
+
+ // Enable tracing with only mock_producer_1 enabled;
+ // the rest should not start up.
+ consumer->EnableTracing(trace_config);
+
+ producer1->WaitForTracingSetup();
+ producer1->WaitForDataSourceSetup("data_source");
+ producer1->WaitForDataSourceStart("data_source");
+
+ EXPECT_CALL(*producer2, OnConnect()).Times(0);
+ EXPECT_CALL(*producer3, OnConnect()).Times(0);
+ task_runner.RunUntilIdle();
+ Mock::VerifyAndClearExpectations(producer2.get());
+ Mock::VerifyAndClearExpectations(producer3.get());
+
+ // Enable mock_producer_2, the third one should still
+ // not get connected.
+ *data_source->add_producer_name_filter() = "mock_producer_2";
+ consumer->ChangeTraceConfig(trace_config);
+
+ producer2->WaitForTracingSetup();
+ producer2->WaitForDataSourceSetup("data_source");
+ producer2->WaitForDataSourceStart("data_source");
+
+ // Enable mock_producer_3 but also try to do an
+ // unsupported change (adding a new data source);
+ // mock_producer_3 should get enabled but not
+ // for the new data source.
+ *data_source->add_producer_name_filter() = "mock_producer_3";
+ auto* dummy_data_source = trace_config.add_data_sources();
+ dummy_data_source->mutable_config()->set_name("unused_data_source");
+ *dummy_data_source->add_producer_name_filter() = "mock_producer_3";
+
+ consumer->ChangeTraceConfig(trace_config);
+
+ producer3->WaitForTracingSetup();
+ EXPECT_CALL(*producer3, SetupDataSource(_, _)).Times(1);
+ EXPECT_CALL(*producer3, StartDataSource(_, _)).Times(1);
+ task_runner.RunUntilIdle();
+ Mock::VerifyAndClearExpectations(producer3.get());
+
+ consumer->DisableTracing();
+ consumer->FreeBuffers();
+ producer1->WaitForDataSourceStop("data_source");
+ producer2->WaitForDataSourceStop("data_source");
+
+ EXPECT_CALL(*producer3, StopDataSource(_)).Times(1);
+
+ consumer->WaitForTracingDisabled();
+
+ task_runner.RunUntilIdle();
+ Mock::VerifyAndClearExpectations(producer3.get());
+}
+
TEST_F(TracingServiceImplTest, DisconnectConsumerWhileTracing) {
std::unique_ptr<MockConsumer> consumer = CreateMockConsumer();
consumer->Connect(svc.get());