This is an automated email from the ASF dual-hosted git repository.
dlmarion pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo-access.git
The following commit(s) were added to refs/heads/main by this push:
new 33be659 Modified Authorizations.of to only accept a Set (#68)
33be659 is described below
commit 33be6595160d0f62041731a720cc2b80f898c243
Author: Dave Marion <[email protected]>
AuthorDate: Tue Mar 12 13:47:23 2024 -0400
Modified Authorizations.of to only accept a Set (#68)
Closes #66
---------
Co-authored-by: Keith Turner <[email protected]>
---
.../antlr/AccessExpressionAntlrBenchmark.java | 3 +-
.../accumulo/access/grammar/antlr/Antlr4Tests.java | 7 ++--
.../apache/accumulo/access/AccessEvaluator.java | 7 ----
.../accumulo/access/AccessEvaluatorImpl.java | 8 ----
.../accumulo/access/AccessExpressionImpl.java | 2 +-
.../org/apache/accumulo/access/Authorizations.java | 21 ++++++----
src/test/java/example/AccessExample.java | 4 +-
.../accumulo/access/AccessEvaluatorTest.java | 18 +++++----
.../accumulo/access/AccessExpressionBenchmark.java | 7 ++--
.../apache/accumulo/access/AuthorizationTest.java | 45 ++++++++++++++++++++++
10 files changed, 84 insertions(+), 38 deletions(-)
diff --git
a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrBenchmark.java
b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrBenchmark.java
index 0c3422f..75ec0a7 100644
---
a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrBenchmark.java
+++
b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/AccessExpressionAntlrBenchmark.java
@@ -25,6 +25,7 @@ import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -86,7 +87,7 @@ public class AccessExpressionAntlrBenchmark {
et.expressions = new ArrayList<>();
et.evaluator = new AccessExpressionAntlrEvaluator(
-
Stream.of(testDataSet.auths).map(Authorizations::of).collect(Collectors.toList()));
+ Stream.of(testDataSet.auths).map(a ->
Authorizations.of(Set.of(a))).collect(Collectors.toList()));
for (var tests : testDataSet.tests) {
if (tests.expectedResult != TestDataLoader.ExpectedResult.ERROR) {
diff --git
a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java
b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java
index be40f3b..09870ae 100644
---
a/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java
+++
b/src/it/antlr4-example/src/test/java/org/apache/accumulo/access/grammar/antlr/Antlr4Tests.java
@@ -27,6 +27,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -120,7 +121,7 @@ public class Antlr4Tests {
@Test
public void testSimpleEvaluation() throws Exception {
String accessExpression = "(one&two)|(foo&bar)";
- Authorizations auths = Authorizations.of("four", "three", "one", "two");
+ Authorizations auths = Authorizations.of(Set.of("four", "three", "one",
"two"));
AccessExpressionAntlrEvaluator eval = new
AccessExpressionAntlrEvaluator(List.of(auths));
assertTrue(eval.canAccess(accessExpression));
}
@@ -128,7 +129,7 @@ public class Antlr4Tests {
@Test
public void testSimpleEvaluationFailure() throws Exception {
String accessExpression = "(A&B&C)";
- Authorizations auths = Authorizations.of("A", "C");
+ Authorizations auths = Authorizations.of(Set.of("A", "C"));
AccessExpressionAntlrEvaluator eval = new
AccessExpressionAntlrEvaluator(List.of(auths));
assertFalse(eval.canAccess(accessExpression));
}
@@ -141,7 +142,7 @@ public class Antlr4Tests {
for (TestDataSet testSet : testData) {
List<Authorizations> authSets =
-
Stream.of(testSet.auths).map(Authorizations::of).collect(Collectors.toList());
+ Stream.of(testSet.auths).map(a ->
Authorizations.of(Set.of(a))).collect(Collectors.toList());
AccessEvaluator evaluator = AccessEvaluator.of(authSets);
AccessExpressionAntlrEvaluator antlr = new
AccessExpressionAntlrEvaluator(authSets);
diff --git a/src/main/java/org/apache/accumulo/access/AccessEvaluator.java
b/src/main/java/org/apache/accumulo/access/AccessEvaluator.java
index 1ea4d23..3eff0d1 100644
--- a/src/main/java/org/apache/accumulo/access/AccessEvaluator.java
+++ b/src/main/java/org/apache/accumulo/access/AccessEvaluator.java
@@ -152,13 +152,6 @@ public interface AccessEvaluator {
return new
AccessEvaluatorImpl(AccessEvaluatorImpl.convert(authorizationSets));
}
- /**
- * Allows specifying a single set of authorizations.
- */
- static AccessEvaluator of(String... authorizations) {
- return new
AccessEvaluatorImpl(AccessEvaluatorImpl.convert(authorizations));
- }
-
/**
* An interface that is used to check if an authorization seen in an access
expression is
* authorized.
diff --git a/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java
b/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java
index a73f627..7fe6077 100644
--- a/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java
+++ b/src/main/java/org/apache/accumulo/access/AccessEvaluatorImpl.java
@@ -56,14 +56,6 @@ final class AccessEvaluatorImpl implements AccessEvaluator {
return authorizationLists;
}
- static Collection<List<byte[]>> convert(String... authorizations) {
- final List<byte[]> authList = new ArrayList<>(authorizations.length);
- for (final String auth : authorizations) {
- authList.add(auth.getBytes(UTF_8));
- }
- return Collections.singletonList(authList);
- }
-
static Collection<List<byte[]>> convert(Authorizations authorizations) {
final Set<String> authSet = authorizations.asSet();
final List<byte[]> authList = new ArrayList<>(authSet.size());
diff --git a/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java
b/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java
index 9585cb9..5c549b8 100644
--- a/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java
+++ b/src/main/java/org/apache/accumulo/access/AccessExpressionImpl.java
@@ -75,7 +75,7 @@ final class AccessExpressionImpl implements AccessExpression {
@Override
public Authorizations getAuthorizations() {
- return AccessExpressionImpl.getAuthorizations(expression);
+ return getAuthorizations(expression);
}
static Authorizations getAuthorizations(byte[] expression) {
diff --git a/src/main/java/org/apache/accumulo/access/Authorizations.java
b/src/main/java/org/apache/accumulo/access/Authorizations.java
index f1b1640..d3bd568 100644
--- a/src/main/java/org/apache/accumulo/access/Authorizations.java
+++ b/src/main/java/org/apache/accumulo/access/Authorizations.java
@@ -18,7 +18,6 @@
*/
package org.apache.accumulo.access;
-import java.util.Collection;
import java.util.Set;
/**
@@ -33,12 +32,18 @@ import java.util.Set;
* @since 1.0.0
*/
public final class Authorizations {
+
private final Set<String> authorizations;
private Authorizations(Set<String> authorizations) {
this.authorizations = Set.copyOf(authorizations);
}
+ /**
+ * Returns the set of authorization strings in this Authorization object
+ *
+ * @return immutable set of authorization strings
+ */
public Set<String> asSet() {
return authorizations;
}
@@ -63,12 +68,14 @@ public final class Authorizations {
return authorizations.toString();
}
- public static Authorizations of(String... authorizations) {
- return new Authorizations(Set.of(authorizations));
- }
-
- public static Authorizations of(Collection<String> authorizations) {
- return new Authorizations(Set.copyOf(authorizations));
+ /**
+ * Creates an Authorizations object from the set of input authorization
strings.
+ *
+ * @param authorizations set of authorization strings
+ * @return Authorizations object
+ */
+ public static Authorizations of(Set<String> authorizations) {
+ return new Authorizations(authorizations);
}
}
diff --git a/src/test/java/example/AccessExample.java
b/src/test/java/example/AccessExample.java
index d62f309..5b4b2cc 100644
--- a/src/test/java/example/AccessExample.java
+++ b/src/test/java/example/AccessExample.java
@@ -22,9 +22,11 @@ package example;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Map;
+import java.util.Set;
import java.util.TreeMap;
import org.apache.accumulo.access.AccessEvaluator;
+import org.apache.accumulo.access.Authorizations;
public class AccessExample {
@@ -56,7 +58,7 @@ public class AccessExample {
Arrays.toString(authorizations));
// Create an access evaluator using the provided authorizations
- AccessEvaluator evaluator = AccessEvaluator.of(authorizations);
+ AccessEvaluator evaluator =
AccessEvaluator.of(Authorizations.of(Set.of(authorizations)));
// Print each record whose access expression permits viewing using the
provided authorizations
getData().forEach((record, accessExpression) -> {
diff --git a/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java
b/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java
index 8d1c522..bcba1fc 100644
--- a/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java
+++ b/src/test/java/org/apache/accumulo/access/AccessEvaluatorTest.java
@@ -84,15 +84,15 @@ public class AccessEvaluatorTest {
AccessEvaluator evaluator;
assertTrue(testSet.auths.length >= 1);
if (testSet.auths.length == 1) {
- evaluator = AccessEvaluator.of(testSet.auths[0]);
+ evaluator =
AccessEvaluator.of(Authorizations.of(Set.of(testSet.auths[0])));
runTestCases(testSet, evaluator);
Set<String> auths =
Stream.of(testSet.auths[0]).collect(Collectors.toSet());
evaluator = AccessEvaluator.of(auths::contains);
runTestCases(testSet, evaluator);
} else {
- var authSets =
-
Stream.of(testSet.auths).map(Authorizations::of).collect(Collectors.toList());
+ var authSets = Stream.of(testSet.auths).map(a ->
Authorizations.of(Set.of(a)))
+ .collect(Collectors.toList());
evaluator = AccessEvaluator.of(authSets);
runTestCases(testSet, evaluator);
}
@@ -184,10 +184,14 @@ public class AccessEvaluatorTest {
@Test
public void testEmptyAuthorizations() {
- assertThrows(IllegalArgumentException.class, () -> AccessEvaluator.of(""));
- assertThrows(IllegalArgumentException.class, () -> AccessEvaluator.of("",
"A"));
- assertThrows(IllegalArgumentException.class, () -> AccessEvaluator.of("A",
""));
- assertThrows(IllegalArgumentException.class, () ->
AccessEvaluator.of(Authorizations.of("")));
+ assertThrows(IllegalArgumentException.class,
+ () -> AccessEvaluator.of(Authorizations.of(Set.of(""))));
+ assertThrows(IllegalArgumentException.class,
+ () -> AccessEvaluator.of(Authorizations.of(Set.of("", "A"))));
+ assertThrows(IllegalArgumentException.class,
+ () -> AccessEvaluator.of(Authorizations.of(Set.of("A", ""))));
+ assertThrows(IllegalArgumentException.class,
+ () -> AccessEvaluator.of(Authorizations.of(Set.of(""))));
}
@Test
diff --git
a/src/test/java/org/apache/accumulo/access/AccessExpressionBenchmark.java
b/src/test/java/org/apache/accumulo/access/AccessExpressionBenchmark.java
index 3d7ffa6..1c3f4a4 100644
--- a/src/test/java/org/apache/accumulo/access/AccessExpressionBenchmark.java
+++ b/src/test/java/org/apache/accumulo/access/AccessExpressionBenchmark.java
@@ -23,6 +23,7 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -85,10 +86,10 @@ public class AccessExpressionBenchmark {
et.expressions = new ArrayList<>();
if (testDataSet.auths.length == 1) {
- et.evaluator = AccessEvaluator.of(testDataSet.auths[0]);
+ et.evaluator =
AccessEvaluator.of(Authorizations.of(Set.of(testDataSet.auths[0])));
} else {
- var authSets =
-
Stream.of(testDataSet.auths).map(Authorizations::of).collect(Collectors.toList());
+ var authSets = Stream.of(testDataSet.auths).map(a ->
Authorizations.of(Set.of(a)))
+ .collect(Collectors.toList());
et.evaluator = AccessEvaluator.of(authSets);
}
diff --git a/src/test/java/org/apache/accumulo/access/AuthorizationTest.java
b/src/test/java/org/apache/accumulo/access/AuthorizationTest.java
new file mode 100644
index 0000000..22636ae
--- /dev/null
+++ b/src/test/java/org/apache/accumulo/access/AuthorizationTest.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.access;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.Set;
+
+import org.junit.jupiter.api.Test;
+
+public class AuthorizationTest {
+
+ @Test
+ public void testEquality() {
+ Authorizations auths1 = Authorizations.of(Set.of("A", "B", "C"));
+ Authorizations auths2 = Authorizations.of(Set.of("A", "B", "C"));
+
+ assertEquals(auths1, auths2);
+ assertEquals(auths1.hashCode(), auths2.hashCode());
+
+ Authorizations auths3 = Authorizations.of(Set.of("D", "E", "F"));
+
+ assertNotEquals(auths1, auths3);
+ assertNotEquals(auths1.hashCode(), auths3.hashCode());
+
+ }
+
+}