diff --git a/services/core/java/com/android/server/integrity/model/OpenFormula.java b/services/core/java/com/android/server/integrity/model/OpenFormula.java index 218cdc99c0161..e9fa1a3706114 100644 --- a/services/core/java/com/android/server/integrity/model/OpenFormula.java +++ b/services/core/java/com/android/server/integrity/model/OpenFormula.java @@ -16,9 +16,11 @@ package com.android.server.integrity.model; +import static com.android.internal.util.Preconditions.checkArgument; import static com.android.internal.util.Preconditions.checkNotNull; -import android.annotation.Nullable; +import java.util.Collections; +import java.util.List; /** * Represents a complex formula consisting of other simple and complex formulas. @@ -34,46 +36,33 @@ public final class OpenFormula extends Formula { } private final Connector mConnector; - private final Formula mMainFormula; - private final Formula mAuxiliaryFormula; + private final List mFormulas; - public OpenFormula(Connector connector, Formula mainFormula, - @Nullable Formula auxiliaryFormula) { - validateAuxiliaryFormula(connector, auxiliaryFormula); + public OpenFormula(Connector connector, List formulas) { + validateFormulas(connector, formulas); this.mConnector = checkNotNull(connector); - this.mMainFormula = checkNotNull(mainFormula); - // TODO: Add validators on auxiliary formula - this.mAuxiliaryFormula = auxiliaryFormula; + this.mFormulas = Collections.unmodifiableList(checkNotNull(formulas)); } public Connector getConnector() { return mConnector; } - public Formula getMainFormula() { - return mMainFormula; + public List getFormulas() { + return mFormulas; } - public Formula getAuxiliaryFormula() { - return mAuxiliaryFormula; - } - - private void validateAuxiliaryFormula(Connector connector, Formula auxiliaryFormula) { - boolean validAuxiliaryFormula; + private void validateFormulas(Connector connector, List formulas) { switch (connector) { case AND: case OR: - validAuxiliaryFormula = (auxiliaryFormula != null); + checkArgument(formulas.size() >= 2, + String.format("Connector %s must have at least 2 formulas", connector)); break; case NOT: - validAuxiliaryFormula = (auxiliaryFormula == null); + checkArgument(formulas.size() == 1, + String.format("Connector %s must have 1 formula only", connector)); break; - default: - validAuxiliaryFormula = false; - } - if (!validAuxiliaryFormula) { - throw new IllegalArgumentException( - String.format("Invalid formulas used for connector %s", connector)); } } } diff --git a/services/tests/servicestests/src/com/android/server/integrity/model/OpenFormulaTest.java b/services/tests/servicestests/src/com/android/server/integrity/model/OpenFormulaTest.java index 1a3dde0cb8389..2133a7d3550b3 100644 --- a/services/tests/servicestests/src/com/android/server/integrity/model/OpenFormulaTest.java +++ b/services/tests/servicestests/src/com/android/server/integrity/model/OpenFormulaTest.java @@ -24,6 +24,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import java.util.Arrays; +import java.util.Collections; + @RunWith(JUnit4.class) public class OpenFormulaTest { @@ -34,12 +37,11 @@ public class OpenFormulaTest { @Test public void testValidOpenFormula() { - OpenFormula openFormula = new OpenFormula(OpenFormula.Connector.AND, ATOMIC_FORMULA_1, - ATOMIC_FORMULA_2); + OpenFormula openFormula = new OpenFormula(OpenFormula.Connector.AND, + Arrays.asList(ATOMIC_FORMULA_1, ATOMIC_FORMULA_2)); assertEquals(OpenFormula.Connector.AND, openFormula.getConnector()); - assertEquals(ATOMIC_FORMULA_1, openFormula.getMainFormula()); - assertEquals(ATOMIC_FORMULA_2, openFormula.getAuxiliaryFormula()); + assertEquals(Arrays.asList(ATOMIC_FORMULA_1, ATOMIC_FORMULA_2), openFormula.getFormulas()); } @Test @@ -47,9 +49,10 @@ public class OpenFormulaTest { assertExpectException( IllegalArgumentException.class, /* expectedExceptionMessageRegex */ - String.format("Invalid formulas used for connector %s", OpenFormula.Connector.AND), - () -> new OpenFormula(OpenFormula.Connector.AND, ATOMIC_FORMULA_1, - null)); + String.format("Connector %s must have at least 2 formulas", + OpenFormula.Connector.AND), + () -> new OpenFormula(OpenFormula.Connector.AND, + Collections.singletonList(ATOMIC_FORMULA_1))); } @Test @@ -57,8 +60,8 @@ public class OpenFormulaTest { assertExpectException( IllegalArgumentException.class, /* expectedExceptionMessageRegex */ - String.format("Invalid formulas used for connector %s", OpenFormula.Connector.NOT), - () -> new OpenFormula(OpenFormula.Connector.NOT, ATOMIC_FORMULA_1, - ATOMIC_FORMULA_2)); + String.format("Connector %s must have 1 formula only", OpenFormula.Connector.NOT), + () -> new OpenFormula(OpenFormula.Connector.NOT, + Arrays.asList(ATOMIC_FORMULA_1, ATOMIC_FORMULA_2))); } }