Add constructor new to MultiNodeFilesLogNamer
Add a constructor to MultiNodeFilesLogNamer allowing a aos
configuration to be specified. This is necessary when doing a
rerun and saving a log while using MultiNodeFilesLogNamer.
Change-Id: Ia991df8343f739e7b1cb2981bcd036333e6731d9
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/configuration_test.cc b/aos/configuration_test.cc
index 0ce6772..c1f00be 100644
--- a/aos/configuration_test.cc
+++ b/aos/configuration_test.cc
@@ -1262,4 +1262,84 @@
test_channel_type);
}
+// Test fixture for testing IsNodeFromConfiguration.
+// Initializes multiple configurations which share the same node names.
+// Use IsNodeFromConfiguration to check if a node is in a configuration.
+class IsNodeFromConfigurationFixtureTest : public ConfigurationTest {
+ protected:
+ // Use unique_ptr for deferred initialization
+ std::unique_ptr<FlatbufferDetachedBuffer<Configuration>> config1;
+ std::unique_ptr<FlatbufferDetachedBuffer<Configuration>> config2;
+ const Node *node1_config1;
+ const Node *node2_config1;
+ const Node *node1_config2;
+ const Node *node2_config2;
+
+ IsNodeFromConfigurationFixtureTest() {
+ // Initialize configurations here
+ config1 = std::make_unique<FlatbufferDetachedBuffer<Configuration>>(
+ JsonToFlatbuffer(R"config({
+ "nodes": [
+ {"name": "node1"},
+ {"name": "node2"}
+ ]
+ })config",
+ Configuration::MiniReflectTypeTable()));
+
+ config2 = std::make_unique<FlatbufferDetachedBuffer<Configuration>>(
+ JsonToFlatbuffer(R"config({
+ "nodes": [
+ {"name": "node1"},
+ {"name": "node2"}
+ ]
+ })config",
+ Configuration::MiniReflectTypeTable()));
+
+ // Initialize nodes after configuration initialization
+ node1_config1 = config1->message().nodes()->Get(0);
+ node2_config1 = config1->message().nodes()->Get(1);
+ node1_config2 = config2->message().nodes()->Get(0);
+ node2_config2 = config2->message().nodes()->Get(1);
+ }
+
+ void SetUp() override {
+ ConfigurationTest::SetUp();
+ // Any additional setup can go here.
+ }
+};
+
+// Test case when node exists in the configuration.
+TEST_F(IsNodeFromConfigurationFixtureTest, NodeExistsInConfiguration) {
+ EXPECT_TRUE(IsNodeFromConfiguration(&config1->message(), node1_config1));
+ EXPECT_TRUE(IsNodeFromConfiguration(&config1->message(), node2_config1));
+}
+
+// Test case when node does not exist in the configuration.
+TEST_F(IsNodeFromConfigurationFixtureTest, NodeDoesNotExistsInConfiguration) {
+ EXPECT_FALSE(IsNodeFromConfiguration(&config1->message(), node1_config2));
+ EXPECT_FALSE(IsNodeFromConfiguration(&config1->message(), node2_config2));
+}
+
+// Test case for nodes with same names but from different configurations.
+TEST_F(IsNodeFromConfigurationFixtureTest, SameNameDifferentConfiguration) {
+ EXPECT_FALSE(IsNodeFromConfiguration(&config1->message(), node1_config2));
+ EXPECT_FALSE(IsNodeFromConfiguration(&config1->message(), node2_config2));
+ EXPECT_FALSE(IsNodeFromConfiguration(&config2->message(), node1_config1));
+ EXPECT_FALSE(IsNodeFromConfiguration(&config2->message(), node2_config1));
+}
+
+// Test case for null pointers.
+TEST_F(IsNodeFromConfigurationFixtureTest, NullPointers) {
+ EXPECT_FALSE(IsNodeFromConfiguration(nullptr, nullptr));
+ EXPECT_FALSE(IsNodeFromConfiguration(&config1->message(), nullptr));
+ EXPECT_FALSE(IsNodeFromConfiguration(nullptr, node1_config1));
+}
+
+// Tests that SourceNode reasonably handles both single and multi-node configs.
+TEST(IsNodeFromConfigurationTest, SingleNode) {
+ FlatbufferDetachedBuffer<Configuration> config_single_node =
+ ReadConfig(ArtifactPath("aos/testdata/config1.json"));
+ EXPECT_TRUE(IsNodeFromConfiguration(&config_single_node.message(), nullptr));
+}
+
} // namespace aos::configuration::testing