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
This commit is contained in:
Khaled Abdelmohsen
2019-11-12 16:47:01 +00:00
parent 0efe7cbcbe
commit 6d77f94919
4 changed files with 330 additions and 331 deletions

View File

@@ -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;

View File

@@ -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)

View File

@@ -39,19 +39,19 @@ public class RuleXmlParserTest {
@Test
public void testXmlStream_validOpenFormula() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
InputStream inputStream = new ByteArrayInputStream(ruleXmlOpenFormula.getBytes());
Rule expectedRule = new Rule(new OpenFormula(OpenFormula.NOT, Collections.singletonList(
@@ -65,19 +65,19 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validOpenFormula_notConnector() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(new OpenFormula(OpenFormula.NOT, Collections.singletonList(
new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"))),
@@ -90,24 +90,24 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validOpenFormula_andConnector() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.AND + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.APP_CERTIFICATE + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>test_cert</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.AND + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<AF>"
+ "<K>" + AtomicFormula.APP_CERTIFICATE + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>test_cert</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(new OpenFormula(OpenFormula.AND, Arrays.asList(
new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"),
@@ -121,24 +121,24 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validOpenFormula_orConnector() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.OR + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.APP_CERTIFICATE + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>test_cert</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.OR + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<AF>"
+ "<K>" + AtomicFormula.APP_CERTIFICATE + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>test_cert</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(new OpenFormula(OpenFormula.OR, Arrays.asList(
new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"),
@@ -152,19 +152,19 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validOpenFormula_differentTagOrder() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(new OpenFormula(OpenFormula.NOT, Collections.singletonList(
new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"))),
@@ -177,24 +177,24 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_invalidOpenFormula_invalidNumberOfFormulas() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.VERSION_CODE + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>1</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<AF>"
+ "<K>" + AtomicFormula.VERSION_CODE + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>1</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
@@ -205,19 +205,19 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_invalidOpenFormula_invalidOperator() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>INVALID_OPERATOR</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>INVALID_OPERATOR</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
@@ -228,19 +228,19 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_invalidOpenFormula_invalidEffect() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>INVALID_EFFECT</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>INVALID_EFFECT</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
@@ -251,19 +251,19 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_invalidOpenFormula_invalidTags() throws Exception {
String ruleXmlOpenFormula = "<RuleList>"
+ "<Rule>"
+ "<OpenFormula>"
String ruleXmlOpenFormula = "<RL>"
+ "<R>"
+ "<OF>"
+ "<InvalidConnector>" + OpenFormula.NOT + "</InvalidConnector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
@@ -274,16 +274,16 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validAtomicFormula_stringValue() throws Exception {
String ruleXmlAtomicFormula = "<RuleList>"
+ "<Rule>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlAtomicFormula = "<RL>"
+ "<R>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(
new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"),
@@ -296,16 +296,16 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validAtomicFormula_integerValue() throws Exception {
String ruleXmlAtomicFormula = "<RuleList>"
+ "<Rule>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.VERSION_CODE + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>1</Value>"
+ "</AtomicFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlAtomicFormula = "<RL>"
+ "<R>"
+ "<AF>"
+ "<K>" + AtomicFormula.VERSION_CODE + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>1</V>"
+ "</AF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(
new AtomicFormula.IntAtomicFormula(AtomicFormula.VERSION_CODE, AtomicFormula.EQ, 1),
@@ -318,16 +318,16 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validAtomicFormula_booleanValue() throws Exception {
String ruleXmlAtomicFormula = "<RuleList>"
+ "<Rule>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PRE_INSTALLED + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>true</Value>"
+ "</AtomicFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlAtomicFormula = "<RL>"
+ "<R>"
+ "<AF>"
+ "<K>" + AtomicFormula.PRE_INSTALLED + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>true</V>"
+ "</AF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(
new AtomicFormula.BooleanAtomicFormula(AtomicFormula.PRE_INSTALLED, true),
@@ -340,16 +340,16 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_validAtomicFormula_differentTagOrder() throws Exception {
String ruleXmlAtomicFormula = "<RuleList>"
+ "<Rule>"
+ "<AtomicFormula>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "</AtomicFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlAtomicFormula = "<RL>"
+ "<R>"
+ "<AF>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "</AF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
Rule expectedRule = new Rule(
new AtomicFormula.StringAtomicFormula(AtomicFormula.PACKAGE_NAME, "com.app.test"),
@@ -362,16 +362,16 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_invalidAtomicFormula_invalidTags() throws Exception {
String ruleXmlAtomicFormula = "<RuleList>"
+ "<Rule>"
+ "<AtomicFormula>"
String ruleXmlAtomicFormula = "<RL>"
+ "<R>"
+ "<AF>"
+ "<BadKey>" + AtomicFormula.PACKAGE_NAME + "</BadKey>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
@@ -382,16 +382,16 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_invalidAtomicFormula() throws Exception {
String ruleXmlAtomicFormula = "<RuleList>"
+ "<Rule>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.VERSION_CODE + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>"
+ "</RuleList>";
String ruleXmlAtomicFormula = "<RL>"
+ "<R>"
+ "<AF>"
+ "<K>" + AtomicFormula.VERSION_CODE + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>"
+ "</RL>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
@@ -402,44 +402,44 @@ public class RuleXmlParserTest {
@Test
public void testXmlString_withNoRuleList() {
String ruleXmlWithNoRuleList = "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>";
String ruleXmlWithNoRuleList = "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>";
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Rules must start with <RuleList> tag.",
/* expectedExceptionMessageRegex */ "Rules must start with RuleList <RL> tag",
() -> xmlParser.parse(ruleXmlWithNoRuleList));
}
@Test
public void testXmlStream_withNoRuleList() {
String ruleXmlWithNoRuleList = "<Rule>"
+ "<OpenFormula>"
+ "<Connector>" + OpenFormula.NOT + "</Connector>"
+ "<AtomicFormula>"
+ "<Key>" + AtomicFormula.PACKAGE_NAME + "</Key>"
+ "<Operator>" + AtomicFormula.EQ + "</Operator>"
+ "<Value>com.app.test</Value>"
+ "</AtomicFormula>"
+ "</OpenFormula>"
+ "<Effect>" + Rule.DENY + "</Effect>"
+ "</Rule>";
String ruleXmlWithNoRuleList = "<R>"
+ "<OF>"
+ "<C>" + OpenFormula.NOT + "</C>"
+ "<AF>"
+ "<K>" + AtomicFormula.PACKAGE_NAME + "</K>"
+ "<O>" + AtomicFormula.EQ + "</O>"
+ "<V>com.app.test</V>"
+ "</AF>"
+ "</OF>"
+ "<E>" + Rule.DENY + "</E>"
+ "</R>";
InputStream inputStream = new ByteArrayInputStream(ruleXmlWithNoRuleList.getBytes());
RuleParser xmlParser = new RuleXmlParser();
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Rules must start with <RuleList> tag.",
/* expectedExceptionMessageRegex */ "Rules must start with RuleList <RL> tag",
() -> xmlParser.parse(inputStream));
}
}

View File

@@ -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));