Add ChannelIsForwardedFromNode to aos/configuration.h

Change-Id: I52a42fbc1b2137da8bc2585a5d6ee803f793bdd4
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/configuration_test.cc b/aos/configuration_test.cc
index c4df812..560e5eb 100644
--- a/aos/configuration_test.cc
+++ b/aos/configuration_test.cc
@@ -438,6 +438,63 @@
       ChannelIsReadableOnNode(&bad_channel2.message(), &node.message()));
 }
 
+// Tests that our channel is forwarded helpers work as intended.
+TEST_F(ConfigurationTest, ChannelIsForwardedFromNode) {
+  FlatbufferDetachedBuffer<Channel> forwarded_channel(JsonToFlatbuffer(
+      R"channel({
+  "name": "/test",
+  "type": "aos.examples.Ping",
+  "source_node": "bar",
+  "destination_nodes": [
+    {
+      "name": "baz"
+    },
+    {
+      "name": "foo"
+    }
+  ]
+})channel",
+      Channel::MiniReflectTypeTable()));
+
+  FlatbufferDetachedBuffer<Channel> single_node_channel(JsonToFlatbuffer(
+      R"channel({
+  "name": "/test",
+  "type": "aos.examples.Ping"
+})channel",
+      Channel::MiniReflectTypeTable()));
+
+  FlatbufferDetachedBuffer<Channel> zero_length_vector_channel(JsonToFlatbuffer(
+      R"channel({
+  "name": "/test",
+  "type": "aos.examples.Ping",
+  "source_node": "bar",
+  "destination_nodes": [
+  ]
+})channel",
+      Channel::MiniReflectTypeTable()));
+
+  FlatbufferDetachedBuffer<Node> node(JsonToFlatbuffer(
+      R"node({
+  "name": "bar"
+})node",
+      Node::MiniReflectTypeTable()));
+
+  FlatbufferDetachedBuffer<Node> readable_node(JsonToFlatbuffer(
+      R"node({
+  "name": "foo"
+})node",
+      Node::MiniReflectTypeTable()));
+
+  EXPECT_TRUE(ChannelIsForwardedFromNode(&forwarded_channel.message(),
+                                         &node.message()));
+  EXPECT_FALSE(ChannelIsForwardedFromNode(&forwarded_channel.message(),
+                                          &readable_node.message()));
+  EXPECT_FALSE(
+      ChannelIsForwardedFromNode(&single_node_channel.message(), nullptr));
+  EXPECT_FALSE(ChannelIsForwardedFromNode(&zero_length_vector_channel.message(),
+                                          &node.message()));
+}
+
 // Tests that our node message is logged helpers work as intended.
 TEST_F(ConfigurationTest, ChannelMessageIsLoggedOnNode) {
   FlatbufferDetachedBuffer<Channel> logged_on_self_channel(JsonToFlatbuffer(