Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d77f949 authored by Khaled Abdelmohsen's avatar Khaled Abdelmohsen
Browse files

Use minified tag names for rule XML

Shortened tag names are less readable, but provide better size savings
for rules when represented in files to be serialized or parsed.

Bug: 143697198
Test: atest FrameworksServicesTests:RuleXmlParserTest
Test: atest FrameworksServicesTests:RuleXmlSerializerTest
Change-Id: I29f71b34d9be5fe3d0e2cbf05fe46c4ff3dbe5c7
parent 0efe7cbc
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -41,15 +41,15 @@ public final class RuleXmlParser implements RuleParser {
    public static final String TAG = "RuleXmlParser";

    // TODO: Use XML attributes
    private static final String RULE_LIST_TAG = "RuleList";
    private static final String RULE_TAG = "Rule";
    private static final String OPEN_FORMULA_TAG = "OpenFormula";
    private static final String ATOMIC_FORMULA_TAG = "AtomicFormula";
    private static final String EFFECT_TAG = "Effect";
    private static final String KEY_TAG = "Key";
    private static final String OPERATOR_TAG = "Operator";
    private static final String VALUE_TAG = "Value";
    private static final String CONNECTOR_TAG = "Connector";
    private static final String RULE_LIST_TAG = "RL";
    private static final String RULE_TAG = "R";
    private static final String OPEN_FORMULA_TAG = "OF";
    private static final String ATOMIC_FORMULA_TAG = "AF";
    private static final String EFFECT_TAG = "E";
    private static final String KEY_TAG = "K";
    private static final String OPERATOR_TAG = "O";
    private static final String VALUE_TAG = "V";
    private static final String CONNECTOR_TAG = "C";

    @Override
    public List<Rule> parse(String ruleText) throws RuleParseException {
@@ -80,16 +80,16 @@ public final class RuleXmlParser implements RuleParser {
        // Skipping the first event type, which is always {@link XmlPullParser.START_DOCUMENT}
        parser.next();

        // Processing the first tag; which should always be a <RuleList> tag.
        // Processing the first tag; which should always be a RuleList <RL> tag.
        String nodeName = parser.getName();
        // Validating that the XML is starting with a <RuleList> tag.
        // Validating that the XML is starting with a RuleList <RL> tag.
        // Note: This is the only breaking validation to run against XML files in the platform.
        // All rules inside are assumed to be validated at the server. If a rule is found to be
        // corrupt in the XML, it will be skipped to the next rule.
        if (!nodeName.equals(RULE_LIST_TAG)) {
            throw new RuntimeException(
                    String.format("Rules must start with <RuleList> tag. Found: %s at %s", nodeName,
                            parser.getPositionDescription()));
                    String.format("Rules must start with RuleList <RL> tag. Found: %s at %s",
                            nodeName, parser.getPositionDescription()));
        }

        int eventType;
+9 −10
Original line number Diff line number Diff line
@@ -39,16 +39,15 @@ public class RuleXmlSerializer implements RuleSerializer {
    public static final String TAG = "RuleXmlSerializer";
    private static final String NAMESPACE = "";

    // TODO: Use smaller tag names.
    private static final String RULE_LIST_TAG = "RuleList";
    private static final String RULE_TAG = "Rule";
    private static final String OPEN_FORMULA_TAG = "OpenFormula";
    private static final String ATOMIC_FORMULA_TAG = "AtomicFormula";
    private static final String EFFECT_TAG = "Effect";
    private static final String KEY_TAG = "Key";
    private static final String OPERATOR_TAG = "Operator";
    private static final String VALUE_TAG = "Value";
    private static final String CONNECTOR_TAG = "Connector";
    private static final String RULE_LIST_TAG = "RL";
    private static final String RULE_TAG = "R";
    private static final String OPEN_FORMULA_TAG = "OF";
    private static final String ATOMIC_FORMULA_TAG = "AF";
    private static final String EFFECT_TAG = "E";
    private static final String KEY_TAG = "K";
    private static final String OPERATOR_TAG = "O";
    private static final String VALUE_TAG = "V";
    private static final String CONNECTOR_TAG = "C";

    @Override
    public void serialize(List<Rule> rules, OutputStream outputStream)
+214 −214

File changed.

Preview size limit exceeded, changes collapsed.

+94 −94
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ public class RuleXmlSerializerTest {
    public void testXmlString_serializeEmptyRule() throws Exception {
        Rule rule = null;
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList />";
        String expectedRules = "<RL />";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));

@@ -58,15 +58,15 @@ public class RuleXmlSerializerTest {
                new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"),
                Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
                + "<Value>com.app.test</Value>"
                + "</AtomicFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<AF>"
                + "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
                + "<V>com.app.test</V>"
                + "</AF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Arrays.asList(rule1, rule2));

@@ -81,18 +81,18 @@ public class RuleXmlSerializerTest {
                                "com.app.test"))), Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        OutputStream outputStream = new ByteArrayOutputStream();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<OpenFormula>"
                + "<Connector>" + OpenFormula.NOT + "</Connector>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
                + "<Value>com.app.test</Value>"
                + "</AtomicFormula>"
                + "</OpenFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<OF>"
                + "<C>" + OpenFormula.NOT + "</C>"
                + "<AF>"
                + "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
                + "<V>com.app.test</V>"
                + "</AF>"
                + "</OF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        xmlSerializer.serialize(Collections.singletonList(rule), outputStream);

@@ -107,18 +107,18 @@ public class RuleXmlSerializerTest {
                        new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME,
                                "com.app.test"))), Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<OpenFormula>"
                + "<Connector>" + OpenFormula.NOT + "</Connector>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
                + "<Value>com.app.test</Value>"
                + "</AtomicFormula>"
                + "</OpenFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<OF>"
                + "<C>" + OpenFormula.NOT + "</C>"
                + "<AF>"
                + "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
                + "<V>com.app.test</V>"
                + "</AF>"
                + "</OF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));

@@ -133,22 +133,22 @@ public class RuleXmlSerializerTest {
                        new AtomicFormula.StringAtomicFormula(AtomicFormula.APP_CERTIFICATE,
                                "test_cert"))), Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<OpenFormula>"
                + "<Connector>" + OpenFormula.AND + "</Connector>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
                + "<Value>com.app.test</Value>"
                + "</AtomicFormula>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.APP_CERTIFICATE + "</Key>"
                + "<Value>test_cert</Value>"
                + "</AtomicFormula>"
                + "</OpenFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<OF>"
                + "<C>" + OpenFormula.AND + "</C>"
                + "<AF>"
                + "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
                + "<V>com.app.test</V>"
                + "</AF>"
                + "<AF>"
                + "<K>" + AtomicFormula.APP_CERTIFICATE + "</K>"
                + "<V>test_cert</V>"
                + "</AF>"
                + "</OF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));

@@ -163,22 +163,22 @@ public class RuleXmlSerializerTest {
                        new AtomicFormula.StringAtomicFormula(AtomicFormula.APP_CERTIFICATE,
                                "test_cert"))), Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<OpenFormula>"
                + "<Connector>" + OpenFormula.OR + "</Connector>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
                + "<Value>com.app.test</Value>"
                + "</AtomicFormula>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.APP_CERTIFICATE + "</Key>"
                + "<Value>test_cert</Value>"
                + "</AtomicFormula>"
                + "</OpenFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<OF>"
                + "<C>" + OpenFormula.OR + "</C>"
                + "<AF>"
                + "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
                + "<V>com.app.test</V>"
                + "</AF>"
                + "<AF>"
                + "<K>" + AtomicFormula.APP_CERTIFICATE + "</K>"
                + "<V>test_cert</V>"
                + "</AF>"
                + "</OF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));

@@ -191,15 +191,15 @@ public class RuleXmlSerializerTest {
                new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"),
                Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
                + "<Value>com.app.test</Value>"
                + "</AtomicFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<AF>"
                + "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
                + "<V>com.app.test</V>"
                + "</AF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));

@@ -212,16 +212,16 @@ public class RuleXmlSerializerTest {
                new AtomicFormula.IntAtomicFormula(AtomicFormula.VERSION_CODE, AtomicFormula.EQ, 1),
                Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.VERSION_CODE + "</Key>"
                + "<Operator>" + AtomicFormula.EQ + "</Operator>"
                + "<Value>1</Value>"
                + "</AtomicFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<AF>"
                + "<K>" + AtomicFormula.VERSION_CODE + "</K>"
                + "<O>" + AtomicFormula.EQ + "</O>"
                + "<V>1</V>"
                + "</AF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));

@@ -234,15 +234,15 @@ public class RuleXmlSerializerTest {
                new AtomicFormula.BooleanAtomicFormula(AtomicFormula.PRE_INSTALLED, true),
                Rule.DENY);
        RuleSerializer xmlSerializer = new RuleXmlSerializer();
        String expectedRules = "<RuleList>"
                + "<Rule>"
                + "<AtomicFormula>"
                + "<Key>" + AtomicFormula.PRE_INSTALLED + "</Key>"
                + "<Value>true</Value>"
                + "</AtomicFormula>"
                + "<Effect>" + Rule.DENY + "</Effect>"
                + "</Rule>"
                + "</RuleList>";
        String expectedRules = "<RL>"
                + "<R>"
                + "<AF>"
                + "<K>" + AtomicFormula.PRE_INSTALLED + "</K>"
                + "<V>true</V>"
                + "</AF>"
                + "<E>" + Rule.DENY + "</E>"
                + "</R>"
                + "</RL>";

        String actualRules = xmlSerializer.serialize(Collections.singletonList(rule));