change plugin to optional
authorYoungjae Shin <yj99.shin@samsung.com>
Mon, 30 Mar 2020 08:06:51 +0000 (17:06 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Mon, 30 Mar 2020 08:17:56 +0000 (17:17 +0900)
12 files changed:
example/mode/tizen_normalEx1_mode.xml
example/rule/tizen_aliasValueErr_rule.xml
example/rule/tizen_pluginErr1_rule.xml [new file with mode: 0644]
example/rule/tizen_pluginErr2_rule.xml [new file with mode: 0644]
example/rule/tizen_uniqueRuleErr_rule.xml
plugin/tizen_test_rule.xml
schema/tizen_action_rule.xsd
supervisor/RuleManager.cpp
unittest/modes_test_conflict.cpp
unittest/modes_test_generator.cpp
unittest/modes_test_parser.cpp
unittest/modes_test_rulemgr.cpp

index 9de72ed..fb1f7b1 100644 (file)
@@ -3,7 +3,7 @@
   <mode name="ex1" type="normal">
     <action ID="wifiOn" rule="test.printBool" priority="-100">on</action>
     <action rule="test.launch" before="GoPbsKids">com.vpn.usa123</action>
-    <action ID="GoPbsKids" rule="test.url" after="wifiOn">https://pbskids.org/</action>
+    <action ID="GoPbsKids" rule="web.url" after="wifiOn">https://pbskids.org/</action>
     <action ID="BMJ" rule="test.connect">Modes-JBL</action>
     <action rule="test.player" after="BMJ">beatles-yesterday.mp3</action>
     <action ID="1" rule="test.printInt" priority="-100"
index ea765f6..2fe3db2 100644 (file)
@@ -1,26 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <tizenModes xmlns="http://www.tizen.org" version="6.0">
   <actionRule>
-    <rule name="test.changeAccuracy" type="int" since="6.0" plugin="test">
+    <rule name="test.changeAccuracy" type="int" since="6.0">
       <conflict>test.exactness</conflict>
       <desc>Sensor Accuracy</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.exactness" type="int" since="6.0" plugin="test">
+    <rule name="test.exactness" type="int" since="6.0">
       <conflict>test.changeAccuracy</conflict>
       <desc>Sensor Exactness</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.url" type="string" since="6.0" plugin="test">
+    <rule name="test.url" type="string" since="6.0">
       <desc>browser</desc>
       <domain>Web Framework</domain>
     </rule>
-    <rule name="test.nightLight" type="int" since="6.0" plugin="test">
+    <rule name="test.nightLight" type="int" since="6.0">
       <conflict>display.autoLight</conflict>
       <desc>It makes the screen color warmer.</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.printInt" type="int" since="6.0" plugin="test">
+    <rule name="test.printInt" type="int" since="6.0">
       <alias name="PRINT_ZERO">0</alias>
       <alias name="PRINT_ONE">1</alias>
       <alias name="PRINT_TWO">2</alias>
@@ -29,7 +29,7 @@
       <desc>It prints integer value</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.printBool" type="bool" since="6.0" plugin="test">
+    <rule name="test.printBool" type="bool" since="6.0">
       <alias name="on">1</alias>
       <alias name="off">0</alias>
       <desc>It prints boolean value</desc>
diff --git a/example/rule/tizen_pluginErr1_rule.xml b/example/rule/tizen_pluginErr1_rule.xml
new file mode 100644 (file)
index 0000000..1ccdad5
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
+  <actionRule>
+    <rule name="sensor.changeAccuracy" type="int" since="6.0" plugin="test1">
+      <conflict>sensor.exactness</conflict>
+      <desc>Sensor Accuracy</desc>
+      <domain>System</domain>
+    </rule>
+    <rule name="sensor.exactness" type="int" since="6.0" plugin="test">
+      <conflict>sensor.changeAccuracy</conflict>
+      <desc>Sensor Exactness</desc>
+      <domain>System</domain>
+    </rule>
+    <rule name="web.url" type="string" since="6.0" plugin="test">
+      <desc>browser</desc>
+      <domain>Web Framework</domain>
+    </rule>
+  </actionRule>
+</tizenModes>
diff --git a/example/rule/tizen_pluginErr2_rule.xml b/example/rule/tizen_pluginErr2_rule.xml
new file mode 100644 (file)
index 0000000..d028c48
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tizenModes xmlns="http://www.tizen.org" version="6.0">
+  <actionRule>
+    <rule name="testErr.nightLight" type="int" since="6.0">
+      <conflict>display.autoLight</conflict>
+      <desc>It makes the screen color warmer.</desc>
+      <domain>System</domain>
+    </rule>
+    <rule name="test.launch" type="string" since="6.0">
+      <desc>Launch App</desc>
+      <domain>App Framework</domain>
+    </rule>
+    <rule name="test.connect" type="string" since="6.0">
+      <desc>bluetooth Audio Connect</desc>
+      <domain>Network &amp; Connectivity</domain>
+    </rule>
+    <rule name="test.player" type="string" since="6.0">
+      <desc>Audio/Video player</desc>
+      <domain>Multimedia</domain>
+    </rule>
+  </actionRule>
+</tizenModes>
index 02cb688..3622088 100644 (file)
@@ -1,26 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <tizenModes xmlns="http://www.tizen.org" version="6.0">
   <actionRule>
-    <rule name="test.changeAccuracy" type="int" since="6.0" plugin="test">
+    <rule name="test.changeAccuracy" type="int" since="6.0">
       <conflict>test.exactness</conflict>
       <desc>Sensor Accuracy</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.exactness" type="int" since="6.0" plugin="test">
+    <rule name="test.exactness" type="int" since="6.0">
       <conflict>test.changeAccuracy</conflict>
       <desc>Sensor Exactness</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.url" type="string" since="6.0" plugin="test">
+    <rule name="test.url" type="string" since="6.0">
       <desc>browser</desc>
       <domain>Web Framework</domain>
     </rule>
-    <rule name="test.nightLight" type="int" since="6.0" plugin="test">
+    <rule name="test.nightLight" type="int" since="6.0">
       <conflict>display.autoLight</conflict>
       <desc>It makes the screen color warmer.</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.printInt" type="int" since="6.0" plugin="test">
+    <rule name="test.printInt" type="int" since="6.0">
       <alias name="PRINT_ZERO">0</alias>
       <alias name="PRINT_ONE">1</alias>
       <alias name="PRINT_TWO">2</alias>
@@ -29,7 +29,7 @@
       <desc>It prints integer value</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.printBool" type="bool" since="6.0" plugin="test">
+    <rule name="test.printBool" type="bool" since="6.0">
       <alias name="on">1</alias>
       <alias name="off">0</alias>
       <desc>It prints boolean value</desc>
index 1d04312..982e29a 100644 (file)
@@ -1,38 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <tizenModes xmlns="http://www.tizen.org" version="6.0">
   <actionRule>
-    <rule name="test.changeAccuracy" type="int" since="6.0" plugin="test">
-      <conflict>test.exactness</conflict>
+    <rule name="sensor.changeAccuracy" type="int" since="6.0" plugin="test">
+      <conflict>sensor.exactness</conflict>
       <desc>Sensor Accuracy</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.exactness" type="int" since="6.0" plugin="test">
-      <conflict>test.changeAccuracy</conflict>
+    <rule name="sensor.exactness" type="int" since="6.0" plugin="test">
+      <conflict>sensor.changeAccuracy</conflict>
       <desc>Sensor Exactness</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.url" type="string" since="6.0" plugin="test">
+    <rule name="web.url" type="string" since="6.0" plugin="test">
       <desc>browser</desc>
       <domain>Web Framework</domain>
     </rule>
-    <rule name="test.nightLight" type="int" since="6.0" plugin="test">
+    <rule name="test.nightLight" type="int" since="6.0">
       <conflict>display.autoLight</conflict>
       <desc>It makes the screen color warmer.</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.launch" type="string" since="6.0" plugin="test">
+    <rule name="test.launch" type="string" since="6.0">
       <desc>Launch App</desc>
       <domain>App Framework</domain>
     </rule>
-    <rule name="test.connect" type="string" since="6.0" plugin="test">
+    <rule name="test.connect" type="string" since="6.0">
       <desc>bluetooth Audio Connect</desc>
       <domain>Network &amp; Connectivity</domain>
     </rule>
-    <rule name="test.player" type="string" since="6.0" plugin="test">
+    <rule name="test.player" type="string" since="6.0">
       <desc>Audio/Video player</desc>
       <domain>Multimedia</domain>
     </rule>
-    <rule name="test.printInt" type="int" since="6.0" plugin="test">
+    <rule name="test.printInt" type="int" since="6.0">
       <alias name="PRINT_ZERO">0</alias>
       <alias name="PRINT_ONE">1</alias>
       <alias name="PRINT_TWO">2</alias>
@@ -42,7 +42,7 @@
       <desc>It prints integer value</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.printBool" type="bool" since="6.0" plugin="test">
+    <rule name="test.printBool" type="bool" since="6.0">
       <alias name="on">1</alias>
       <alias name="off">0</alias>
       <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
       <desc>It prints double value</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.printString" type="string" since="6.0" plugin="test">
+    <rule name="test.printString" type="string" since="6.0">
       <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
       <desc>It prints string value</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.sleep" type="int" since="6.0" plugin="test">
+    <rule name="test.sleep" type="int" since="6.0">
       <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
       <desc>Sleep</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.sleepErrorReturn" type="int" since="6.0" plugin="test">
+    <rule name="test.sleepErrorReturn" type="int" since="6.0">
       <desc>Sleep and return error after value seconds</desc>
       <domain>System</domain>
     </rule>
-    <rule name="test.changeTime" type="int" since="6.0" plugin="test">
+    <rule name="test.changeTime" type="int" since="6.0">
       <desc>Call Change callback after value seconds</desc>
       <domain>System</domain>
     </rule>
index 94d1c7e..71defcf 100644 (file)
@@ -27,7 +27,7 @@
                   <xs:attribute name="name" type="xs:string" use="required" />
                   <xs:attribute name="type" type="o:basicTypeT" use="required" />
                   <xs:attribute name="since" type="o:versionT" use="required" />
-                  <xs:attribute name="plugin" type="xs:string" use="required" />
+                  <xs:attribute name="plugin" type="xs:string" use="optional" />
                 </xs:complexType>
               </xs:element>
             </xs:sequence>
index 6965940..62053da 100644 (file)
@@ -177,7 +177,17 @@ ActionRule* RuleManager::makeRule(xmlNodePtr node)
        } else {
                actionRule = new TActionRule<string>(name);
        }
-       actionRule->setPlugin(piMapper.getPlugin(pluginName));
+
+       if (pluginName.empty())
+               pluginName = name.substr(0, name.find_first_of("."));
+
+       Plugin *plugin = piMapper.getPlugin(pluginName);
+       if (nullptr == plugin) {
+               ERR("Unknown plugin Name(%s)", pluginName.c_str());
+               throw ModesEx(ModesEx::NO_DATA, "Unknown plugin Name");
+       }
+
+       actionRule->setPlugin(plugin);
        for (xmlNode *cur = node->children; cur; cur = cur->next) {
                if (xmlIsBlankNode(cur))
                        continue;
index f98a592..47be435 100644 (file)
@@ -48,8 +48,9 @@ ConflictTest::ConflictTest()
        config.actionRuleXsdFile = "./" MODES_ACTIONRULE_DEFAULT_XSD_FILE;
        config.undoInfoDir = ".";
        config.undoInfoDir = ".";
+       config.pluginDir = "../../.." MODES_PLUGIN_DEFAULT_DIR;
 
-       ruleMgr.setOptions(config.actionRuleDir, config.actionRuleXsdFile, ".");
+       ruleMgr.setOptions(config.actionRuleDir, config.actionRuleXsdFile, config.pluginDir);
        ruleMgr.start();
        careTaker.setOptions(config.undoInfoDir);
 }
index 65c88b2..6404061 100644 (file)
@@ -39,7 +39,7 @@ GeneratorTest::GeneratorTest()
        ModesConfig config;
        config.actionRuleDir = ".";
        config.actionRuleXsdFile = "./" MODES_ACTIONRULE_DEFAULT_XSD_FILE;
-       config.pluginDir = ".";
+       config.pluginDir = "../../.." MODES_PLUGIN_DEFAULT_DIR;
 
        ruleMgr.setOptions(config.actionRuleDir, config.actionRuleXsdFile, config.pluginDir);
        ruleMgr.start();
index 67a2182..fed3fa3 100644 (file)
@@ -51,10 +51,10 @@ ParserTest::ParserTest()
        ModesConfig config;
        config.actionRuleDir = ".";
        config.actionRuleXsdFile = "./" MODES_ACTIONRULE_DEFAULT_XSD_FILE;
-       config.pluginDir = ".";
+       config.pluginDir = "../../.." MODES_PLUGIN_DEFAULT_DIR;
 
-       ruleMgr.setOptions(std::string(), config.actionRuleXsdFile, config.pluginDir);
-       ruleMgr.parseActionRule("./tizen_test_rule.xml");
+       ruleMgr.setOptions(config.actionRuleDir, config.actionRuleXsdFile, config.pluginDir);
+       ruleMgr.start();
 }
 
 list<shared_ptr<Action>> ParserTest::getActionList(Mode& m)
index d357b19..5500508 100644 (file)
@@ -44,9 +44,10 @@ RuleManagerTest::RuleManagerTest()
        ModesConfig config;
        config.actionRuleDir = ".";
        config.actionRuleXsdFile = "./" MODES_ACTIONRULE_DEFAULT_XSD_FILE;
-       config.pluginDir = ".";
+       config.pluginDir = "../../.." MODES_PLUGIN_DEFAULT_DIR;
 
        rMgr.setOptions(config.actionRuleDir, config.actionRuleXsdFile, config.pluginDir);
+       rMgr.piMapper.loadPlugins();
 }
 
 TEST(RuleManagerTest, makeRuleMapP)
@@ -80,3 +81,15 @@ TEST(RuleManagerTest, CheckAtomicity)
        EXPECT_THROW(testBroker.parseActionRule("./tizen_aliasValueErr.xml"), ModesEx);
        EXPECT_TRUE(testBroker.emptyRuleMap());
 }
+
+TEST(RuleManagerTest, UnknownPlugin1)
+{
+       RuleManagerTest testBroker;
+       EXPECT_THROW(testBroker.parseActionRule("./tizen_pluginErr1_rule.xml"), ModesEx);
+}
+
+TEST(RuleManagerTest, UnknownPlugin2)
+{
+       RuleManagerTest testBroker;
+       EXPECT_THROW(testBroker.parseActionRule("./tizen_pluginErr2_rule.xml"), ModesEx);
+}