Add a testcase for setProperty

Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Change-Id: Ifade8963ebc8d18dbdca46ece16800cf8ea8a6ad
diff --git a/example/events.d/match1.yaml b/example/events.d/match1.yaml
index 3a08305..19d501a 100644
--- a/example/events.d/match1.yaml
+++ b/example/events.d/match1.yaml
@@ -4,20 +4,31 @@
 events:
     - name: Example Match(1)
       description: >
-          Matches any PropertiesChanged signal.
+          Sets the value of ExampleProperty1 on /changeme
+          when the value of ExampleProperty2 on
+          /testing/inventory/trigger2 changes to yyyxxx.
       type: match
       signatures:
           - type: signal
             interface: org.freedesktop.DBus.Properties
+            path: /testing/inventory/trigger2
             member: PropertiesChanged
+      filters:
+          - name: propertyChangedTo
+            args:
+              interface: xyz.openbmc_project.Example.Iface2
+              property: ExampleProperty2
+              value:
+                  type: string
+                  value: yyyxxx
       actions:
           - name: setProperty
             args:
               interface: xyz.openbmc_project.Example.Iface1
               property: ExampleProperty1
-              path: /test
+              path: /changeme
               value:
                 type: string
-                value: test
+                value: changed
 
 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/test/test.cpp b/test/test.cpp
index 0a1fbd9..13b8934 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -261,6 +261,54 @@
         }
     }
 
+    // Validate the set property action.
+    {
+        ObjectPath relChangeMe{"/changeme"};
+        ObjectPath relTriggerTwo{"/trigger2"};
+        ObjectPath changeMe{root + relChangeMe};
+        ObjectPath triggerTwo{root + relTriggerTwo};
+
+        // Create an object to be updated by the set property action.
+        {
+            auto m = notify();
+            m.append(relChangeMe);
+            m.append(obj);
+            b.call(m);
+        }
+
+        // Create the triggering object.
+        {
+            auto m = notify();
+            m.append(relTriggerTwo);
+            m.append(obj);
+            b.call(m);
+        }
+
+        // Trigger and validate the change.
+        {
+            SignalQueue queue(
+                    "path='" + changeMe + "',member='PropertiesChanged'");
+            auto m = set(triggerTwo);
+            m.append("xyz.openbmc_project.Example.Iface2");
+            m.append("ExampleProperty2");
+            m.append(sdbusplus::message::variant<std::string>("yyyxxx"));
+            b.call(m);
+
+            std::string sigInterface;
+            std::map<
+                std::string,
+                sdbusplus::message::variant<std::string>> sigProperties;
+            {
+                std::vector<std::string> interfaces;
+                auto sig{queue.pop()};
+                sig.read(sigInterface);
+                assert(sigInterface == "xyz.openbmc_project.Example.Iface1");
+                sig.read(sigProperties);
+                assert(sigProperties["ExampleProperty1"] == "changed");
+            }
+        }
+    }
+
     mgr.shutdown();
     std::cout << "Success!" << std::endl;
 }