Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.compatibility.common.util;
     18 
     19 import static junit.framework.Assert.assertEquals;
     20 import static junit.framework.Assert.assertFalse;
     21 import static junit.framework.Assert.assertTrue;
     22 
     23 import org.junit.Test;
     24 import org.junit.runner.RunWith;
     25 import org.junit.runners.JUnit4;
     26 
     27 import com.android.compatibility.common.util.BusinessLogic.BusinessLogicRule;
     28 import com.android.compatibility.common.util.BusinessLogic.BusinessLogicRuleAction;
     29 import com.android.compatibility.common.util.BusinessLogic.BusinessLogicRuleCondition;
     30 import com.android.tradefed.util.FileUtil;
     31 
     32 import java.io.File;
     33 import java.io.FileOutputStream;
     34 import java.io.IOException;
     35 import java.util.List;
     36 
     37 /**
     38  * Unit tests for {@link BusinessLogic}
     39  */
     40 @RunWith(JUnit4.class)
     41 public class BusinessLogicTest {
     42 
     43     private static final String CORRECT_LOGIC =
     44             "{\n" +
     45             "  \"name\": \"businessLogic/suites/gts\",\n" +
     46             "  \"businessLogicRulesLists\": [\n" +
     47             "    {\n" +
     48             "      \"testName\": \"testCaseName1\",\n" +
     49             "      \"description\": \"first test\",\n" +
     50             "      \"businessLogicRules\": [\n" +
     51             "        {\n" +
     52             "          \"ruleConditions\": [\n" +
     53             "            {\n" +
     54             "              \"methodName\": \"conditionMethodName1\",\n" +
     55             "              \"methodArgs\": [\n" +
     56             "                \"arg1\"\n" +
     57             "              ]\n" +
     58             "            }\n" +
     59             "          ],\n" +
     60             "          \"ruleActions\": [\n" +
     61             "            {\n" +
     62             "              \"methodName\": \"actionMethodName1\",\n" +
     63             "              \"methodArgs\": [\n" +
     64             "                \"arg1\",\n" +
     65             "                \"arg2\"\n" +
     66             "              ]\n" +
     67             "            }\n" +
     68             "          ]\n" +
     69             "        }\n" +
     70             "      ]\n" +
     71             "    },\n" +
     72             "    {\n" +
     73             "      \"testName\": \"testCaseName2\",\n" +
     74             "      \"businessLogicRules\": [\n" +
     75             "        {\n" +
     76             "          \"ruleConditions\": [\n" +
     77             "            {\n" +
     78             "              \"methodName\": \"conditionMethodName1\",\n" +
     79             "              \"methodArgs\": [\n" +
     80             "                \"arg1\"\n" +
     81             "              ]\n" +
     82             "            }\n" +
     83             "          ],\n" +
     84             "          \"ruleActions\": [\n" +
     85             "            {\n" +
     86             "              \"methodName\": \"actionMethodName1\",\n" +
     87             "              \"methodArgs\": [\n" +
     88             "                \"arg1\",\n" +
     89             "                \"arg2\"\n" +
     90             "              ]\n" +
     91             "            }\n" +
     92             "          ]\n" +
     93             "        },\n" +
     94             "        {\n" +
     95             "          \"ruleConditions\": [\n" +
     96             "            {\n" +
     97             "              \"methodName\": \"conditionMethodName1\",\n" +
     98             "              \"methodArgs\": [\n" +
     99             "                \"arg1\"\n" +
    100             "              ]\n" +
    101             "            },\n" +
    102             "            {\n" +
    103             "              \"methodName\": \"!conditionMethodName2\",\n" + // use negation
    104             "              \"methodArgs\": [\n" +
    105             "                \"arg2\"\n" +
    106             "              ]\n" +
    107             "            }\n" +
    108             "          ],\n" +
    109             "          \"ruleActions\": [\n" +
    110             "            {\n" +
    111             "              \"methodName\": \"actionMethodName1\",\n" +
    112             "              \"methodArgs\": [\n" +
    113             "                \"arg1\",\n" +
    114             "                \"arg2\"\n" +
    115             "              ]\n" +
    116             "            },\n" +
    117             "            {\n" +
    118             "              \"methodName\": \"actionMethodName2\"\n" +
    119             "            }\n" +
    120             "          ]\n" +
    121             "        }\n" +
    122             "      ]\n" +
    123             "    },\n" +
    124             "    {\n" +
    125             "      \"testName\": \"testCaseName3\"\n" +
    126             "    }\n" +
    127             "  ]\n" +
    128             "}";
    129 
    130     @Test
    131     public void testCorrectLogic() throws Exception {
    132         File file = createFileFromStr(CORRECT_LOGIC);
    133         try {
    134             BusinessLogic bl = BusinessLogicFactory.createFromFile(file);
    135             assertEquals("Wrong number of business logic rule lists", 3, bl.mRules.size());
    136             String description = bl.mRules.get("testCaseName1").get(0).getDescription();
    137             assertEquals("Wrong or missing rule list description", "first test", description);
    138             List<BusinessLogicRule> rulesList1 = bl.mRules.get("testCaseName1").get(0).getRules();
    139             assertEquals("Wrong number of rules in first rule list", 1, rulesList1.size());
    140             BusinessLogicRule rule1 = rulesList1.get(0);
    141             List<BusinessLogicRuleCondition> rule1Conditions = rule1.mConditions;
    142             assertEquals("Wrong number of conditions", 1, rule1Conditions.size());
    143             BusinessLogicRuleCondition rule1Condition = rule1Conditions.get(0);
    144             assertEquals("Wrong method name for business logic rule condition",
    145                     "conditionMethodName1", rule1Condition.mMethodName);
    146             assertFalse("Wrong negation value for business logic rule condition",
    147                     rule1Condition.mNegated);
    148             assertEquals("Wrong arg string count for business logic rule condition", 1,
    149                     rule1Condition.mMethodArgs.size());
    150             assertEquals("Wrong arg for business logic rule condition", "arg1",
    151                     rule1Condition.mMethodArgs.get(0));
    152             List<BusinessLogicRuleAction> rule1Actions = rule1.mActions;
    153             assertEquals("Wrong number of actions", 1, rule1Actions.size());
    154             BusinessLogicRuleAction rule1Action = rule1Actions.get(0);
    155             assertEquals("Wrong method name for business logic rule action",
    156                     "actionMethodName1", rule1Action.mMethodName);
    157             assertEquals("Wrong arg string count for business logic rule action", 2,
    158                     rule1Action.mMethodArgs.size());
    159             assertEquals("Wrong arg for business logic rule action", "arg1",
    160                     rule1Action.mMethodArgs.get(0));
    161             assertEquals("Wrong arg for business logic rule action", "arg2",
    162                     rule1Action.mMethodArgs.get(1));
    163 
    164             List<BusinessLogicRule> rulesList2 = bl.mRules.get("testCaseName2").get(0).getRules();
    165             assertEquals("Wrong number of rules in second rule list", 2, rulesList2.size());
    166             BusinessLogicRule rule2 = rulesList2.get(0);
    167             List<BusinessLogicRuleCondition> rule2Conditions = rule2.mConditions;
    168             assertEquals("Wrong number of conditions", 1, rule2Conditions.size());
    169             BusinessLogicRuleCondition rule2Condition = rule2Conditions.get(0);
    170             assertEquals("Wrong method name for business logic rule condition",
    171                     "conditionMethodName1", rule2Condition.mMethodName);
    172             assertFalse("Wrong negation value for business logic rule condition",
    173                     rule2Condition.mNegated);
    174             assertEquals("Wrong arg string count for business logic rule condition", 1,
    175                     rule2Condition.mMethodArgs.size());
    176             assertEquals("Wrong arg for business logic rule condition", "arg1",
    177                     rule2Condition.mMethodArgs.get(0));
    178             List<BusinessLogicRuleAction> rule2Actions = rule2.mActions;
    179             assertEquals("Wrong number of actions", 1, rule2Actions.size());
    180             BusinessLogicRuleAction rule2Action = rule2Actions.get(0);
    181             assertEquals("Wrong method name for business logic rule action",
    182                     "actionMethodName1", rule2Action.mMethodName);
    183             assertEquals("Wrong arg string count for business logic rule action", 2,
    184                     rule2Action.mMethodArgs.size());
    185             assertEquals("Wrong arg for business logic rule action", "arg1",
    186                     rule2Action.mMethodArgs.get(0));
    187             assertEquals("Wrong arg for business logic rule action", "arg2",
    188                     rule2Action.mMethodArgs.get(1));
    189             BusinessLogicRule rule3 = rulesList2.get(1);
    190             List<BusinessLogicRuleCondition> rule3Conditions = rule3.mConditions;
    191             assertEquals("Wrong number of conditions", 2, rule3Conditions.size());
    192             BusinessLogicRuleCondition rule3Condition1 = rule3Conditions.get(0);
    193             assertEquals("Wrong method name for business logic rule condition",
    194                     "conditionMethodName1", rule3Condition1.mMethodName);
    195             assertFalse("Wrong negation value for business logic rule condition",
    196                     rule3Condition1.mNegated);
    197             assertEquals("Wrong arg string count for business logic rule condition", 1,
    198                     rule3Condition1.mMethodArgs.size());
    199             assertEquals("Wrong arg for business logic rule condition", "arg1",
    200                     rule3Condition1.mMethodArgs.get(0));
    201             BusinessLogicRuleCondition rule3Condition2 = rule3Conditions.get(1);
    202             assertEquals("Wrong method name for business logic rule condition",
    203                     "conditionMethodName2", rule3Condition2.mMethodName);
    204             assertTrue("Wrong negation value for business logic rule condition",
    205                     rule3Condition2.mNegated);
    206             assertEquals("Wrong arg string count for business logic rule condition", 1,
    207                     rule3Condition2.mMethodArgs.size());
    208             assertEquals("Wrong arg for business logic rule condition", "arg2",
    209                     rule3Condition2.mMethodArgs.get(0));
    210             List<BusinessLogicRuleAction> rule3Actions = rule3.mActions;
    211             assertEquals("Wrong number of actions", 2, rule3Actions.size());
    212             BusinessLogicRuleAction rule3Action1 = rule3Actions.get(0);
    213             assertEquals("Wrong method name for business logic rule action",
    214                     "actionMethodName1", rule3Action1.mMethodName);
    215             assertEquals("Wrong arg string count for business logic rule action", 2,
    216                     rule3Action1.mMethodArgs.size());
    217             assertEquals("Wrong arg for business logic rule action", "arg1",
    218                     rule3Action1.mMethodArgs.get(0));
    219             assertEquals("Wrong arg for business logic rule action", "arg2",
    220                     rule3Action1.mMethodArgs.get(1));
    221             BusinessLogicRuleAction rule3Action2 = rule3Actions.get(1);
    222             assertEquals("Wrong method name for business logic rule action",
    223                     "actionMethodName2", rule3Action2.mMethodName);
    224             assertEquals("Wrong arg string count for business logic rule action", 0,
    225                     rule3Action2.mMethodArgs.size());
    226 
    227             List<BusinessLogicRule> rulesList3 = bl.mRules.get("testCaseName3").get(0).getRules();
    228             assertEquals("Wrong number of rules in third rule list", 0, rulesList3.size());
    229         } finally {
    230             FileUtil.deleteFile(file);
    231         }
    232     }
    233 
    234     @Test(expected = RuntimeException.class)
    235     public void testLogicWithWrongNodeName() throws Exception {
    236         File file = createFileFromStr(CORRECT_LOGIC.replace("testName", "testNam3"));
    237         try {
    238             BusinessLogic bl = BusinessLogicFactory.createFromFile(file);
    239         } finally {
    240             FileUtil.deleteFile(file);
    241         }
    242     }
    243 
    244     private static File createFileFromStr(String blString) throws IOException {
    245         File file = File.createTempFile("test", "bl");
    246         FileOutputStream stream = new FileOutputStream(file);
    247         stream.write(blString.getBytes());
    248         stream.flush();
    249         stream.close();
    250         return file;
    251     }
    252 }
    253