Skip to content

Commit 168588b

Browse files
ChinmayMadeshicopybara-github
authored andcommitted
Internal change
PiperOrigin-RevId: 772357400
1 parent f49d834 commit 168588b

File tree

15 files changed

+344
-225
lines changed

15 files changed

+344
-225
lines changed

testing/src/main/java/dev/cel/testing/testrunner/BUILD.bazel

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ java_library(
2121
":cel_test_suite_yaml_parser",
2222
":cel_user_test_template",
2323
":junit_xml_reporter",
24+
"//testing/testrunner:class_loader_utils",
2425
"@maven//:com_google_guava_guava",
2526
"@maven//:io_github_classgraph_classgraph",
2627
"@maven//:junit_junit",
@@ -61,20 +62,20 @@ java_library(
6162
"//:auto_value",
6263
"//bundle:cel",
6364
"//bundle:environment",
64-
"//bundle:environment_exception",
6565
"//bundle:environment_yaml_parser",
6666
"//common:cel_ast",
67-
"//common:cel_descriptors",
6867
"//common:compiler_common",
6968
"//common:options",
7069
"//common:proto_ast",
70+
"//common/internal:default_instance_message_factory",
7171
"//policy",
7272
"//policy:compiler_factory",
7373
"//policy:parser",
7474
"//policy:parser_factory",
7575
"//policy:validation_exception",
7676
"//runtime",
7777
"//testing:expr_value_utils",
78+
"//testing/testrunner:proto_descriptor_utils",
7879
"@cel_spec//proto/cel/expr:expr_java_proto",
7980
"@maven//:com_google_guava_guava",
8081
"@maven//:com_google_protobuf_protobuf_java",
@@ -145,10 +146,8 @@ java_library(
145146
tags = [
146147
],
147148
deps = [
148-
"//common:cel_descriptors",
149-
"//common/internal:cel_descriptor_pools",
150-
"//common/internal:default_message_factory",
151-
"@maven//:com_google_guava_guava",
149+
"//common/internal:default_instance_message_factory",
150+
"//testing/testrunner:proto_descriptor_utils",
152151
"@maven//:com_google_protobuf_protobuf_java",
153152
],
154153
)
@@ -177,11 +176,9 @@ java_library(
177176
"//:java_truth",
178177
"//bundle:cel",
179178
"//common:cel_ast",
180-
"//common:cel_descriptors",
181179
"//runtime",
182180
"//testing:expr_value_utils",
183181
"@cel_spec//proto/cel/expr:expr_java_proto",
184-
"@maven//:com_google_guava_guava",
185182
"@maven//:com_google_protobuf_protobuf_java",
186183
"@maven//:com_google_truth_extensions_truth_proto_extension",
187184
],
@@ -196,7 +193,6 @@ java_library(
196193
":cel_test_suite",
197194
":cel_test_suite_exception",
198195
":registry_utils",
199-
"//common:cel_descriptors",
200196
"@cel_spec//proto/cel/expr:expr_java_proto",
201197
"@cel_spec//proto/cel/expr/conformance/test:suite_java_proto",
202198
"@maven//:com_google_guava_guava",

testing/src/main/java/dev/cel/testing/testrunner/CelTestSuiteTextProtoParser.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@
1818
import com.google.common.collect.ImmutableList;
1919
import com.google.common.collect.ImmutableMap;
2020
import com.google.common.collect.ImmutableSet;
21-
import com.google.protobuf.Descriptors.FileDescriptor;
2221
import com.google.protobuf.ExtensionRegistry;
2322
import com.google.protobuf.TextFormat;
2423
import com.google.protobuf.TextFormat.ParseException;
2524
import com.google.protobuf.TypeRegistry;
26-
import dev.cel.common.CelDescriptorUtil;
2725
import dev.cel.expr.conformance.test.InputValue;
2826
import dev.cel.expr.conformance.test.TestCase;
2927
import dev.cel.expr.conformance.test.TestSection;
@@ -55,11 +53,8 @@ private TestSuite parseTestSuite(String textProto) throws IOException {
5553
TypeRegistry typeRegistry = TypeRegistry.getEmptyTypeRegistry();
5654
ExtensionRegistry extensionRegistry = ExtensionRegistry.getEmptyRegistry();
5755
if (fileDescriptorSetPath != null) {
58-
ImmutableSet<FileDescriptor> fileDescriptors =
59-
CelDescriptorUtil.getFileDescriptorsFromFileDescriptorSet(
60-
RegistryUtils.getFileDescriptorSet(fileDescriptorSetPath));
61-
extensionRegistry = RegistryUtils.getExtensionRegistry(fileDescriptors);
62-
typeRegistry = RegistryUtils.getTypeRegistry(fileDescriptors);
56+
extensionRegistry = RegistryUtils.getExtensionRegistry();
57+
typeRegistry = RegistryUtils.getTypeRegistry();
6358
}
6459
TextFormat.Parser parser = TextFormat.Parser.newBuilder().setTypeRegistry(typeRegistry).build();
6560
TestSuite.Builder builder = TestSuite.newBuilder();

testing/src/main/java/dev/cel/testing/testrunner/DefaultResultMatcher.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,8 @@
2020

2121
import dev.cel.expr.ExprValue;
2222
import dev.cel.expr.MapValue;
23-
import com.google.common.collect.ImmutableSet;
24-
import com.google.protobuf.Descriptors.FileDescriptor;
2523
import dev.cel.bundle.Cel;
2624
import dev.cel.common.CelAbstractSyntaxTree;
27-
import dev.cel.common.CelDescriptorUtil;
2825
import dev.cel.runtime.CelEvaluationException;
2926
import dev.cel.runtime.CelRuntime.Program;
3027
import dev.cel.testing.testrunner.CelTestSuite.CelTestSection.CelTestCase.Output;
@@ -88,15 +85,10 @@ private static void assertExprValue(ExprValue exprValue, ExprValue expectedExprV
8885
throws IOException {
8986
String fileDescriptorSetPath = System.getProperty("file_descriptor_set_path");
9087
if (fileDescriptorSetPath != null) {
91-
ImmutableSet<FileDescriptor> fileDescriptors =
92-
CelDescriptorUtil.getFileDescriptorsFromFileDescriptorSet(
93-
RegistryUtils.getFileDescriptorSet(fileDescriptorSetPath));
9488
assertThat(exprValue)
9589
.ignoringRepeatedFieldOrderOfFieldDescriptors(
9690
MapValue.getDescriptor().findFieldByName("entries"))
97-
.unpackingAnyUsing(
98-
RegistryUtils.getTypeRegistry(fileDescriptors),
99-
RegistryUtils.getExtensionRegistry(fileDescriptors))
91+
.unpackingAnyUsing(RegistryUtils.getTypeRegistry(), RegistryUtils.getExtensionRegistry())
10092
.isEqualTo(expectedExprValue);
10193
} else {
10294
assertThat(exprValue)

testing/src/main/java/dev/cel/testing/testrunner/RegistryUtils.java

Lines changed: 15 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -13,91 +13,50 @@
1313
// limitations under the License.
1414
package dev.cel.testing.testrunner;
1515

16-
import com.google.common.io.Files;
17-
import com.google.protobuf.DescriptorProtos.FileDescriptorSet;
16+
import static dev.cel.testing.utils.ProtoDescriptorUtils.getAllDescriptorsFromJvm;
17+
1818
import com.google.protobuf.Descriptors.FieldDescriptor;
19-
import com.google.protobuf.Descriptors.FileDescriptor;
2019
import com.google.protobuf.ExtensionRegistry;
2120
import com.google.protobuf.Message;
2221
import com.google.protobuf.TypeRegistry;
23-
import dev.cel.common.CelDescriptorUtil;
24-
import dev.cel.common.CelDescriptors;
25-
import dev.cel.common.internal.CelDescriptorPool;
26-
import dev.cel.common.internal.DefaultDescriptorPool;
27-
import dev.cel.common.internal.DefaultMessageFactory;
28-
import java.io.File;
22+
import dev.cel.common.internal.DefaultInstanceMessageFactory;
2923
import java.io.IOException;
3024
import java.util.NoSuchElementException;
31-
import java.util.Set;
3225

3326
/** Utility class for creating registries from a file descriptor set. */
3427
public final class RegistryUtils {
3528

36-
private RegistryUtils() {}
37-
38-
/** Returns the {@link FileDescriptorSet} for the given file descriptor set path. */
39-
public static FileDescriptorSet getFileDescriptorSet(String fileDescriptorSetPath)
40-
throws IOException {
41-
// We can pass an empty extension registry here because extensions are recovered later when
42-
// creating the extension registry in {@link #createExtensionRegistry}.
43-
return FileDescriptorSet.parseFrom(
44-
Files.toByteArray(new File(fileDescriptorSetPath)), ExtensionRegistry.newInstance());
45-
}
46-
4729
/** Returns the {@link TypeRegistry} for the given file descriptor set. */
48-
public static TypeRegistry getTypeRegistry(Set<FileDescriptor> fileDescriptors)
49-
throws IOException {
50-
return createTypeRegistry(fileDescriptors);
30+
public static TypeRegistry getTypeRegistry() throws IOException {
31+
return TypeRegistry.newBuilder()
32+
.add(getAllDescriptorsFromJvm().messageTypeDescriptors())
33+
.build();
5134
}
5235

5336
/** Returns the {@link ExtensionRegistry} for the given file descriptor set. */
54-
public static ExtensionRegistry getExtensionRegistry(Set<FileDescriptor> fileDescriptors)
55-
throws IOException {
56-
return createExtensionRegistry(fileDescriptors);
57-
}
58-
59-
private static TypeRegistry createTypeRegistry(Set<FileDescriptor> fileDescriptors) {
60-
CelDescriptors allDescriptors =
61-
CelDescriptorUtil.getAllDescriptorsFromFileDescriptor(fileDescriptors);
62-
return TypeRegistry.newBuilder().add(allDescriptors.messageTypeDescriptors()).build();
63-
}
64-
65-
private static ExtensionRegistry createExtensionRegistry(Set<FileDescriptor> fileDescriptors) {
37+
public static ExtensionRegistry getExtensionRegistry() throws IOException {
6638
ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance();
6739

68-
CelDescriptors allDescriptors =
69-
CelDescriptorUtil.getAllDescriptorsFromFileDescriptor(fileDescriptors);
70-
71-
CelDescriptorPool pool = DefaultDescriptorPool.create(allDescriptors);
72-
73-
// We need to create a default message factory because there would always be difference in
74-
// reference between the default instance's descriptor and the descriptor in the pool if the
75-
// file descriptor set is created at runtime, therefore
76-
// we need to create a default message factory to get the default instance for each descriptor
77-
// because it falls back to the DynamicMessages.
78-
//
79-
// For more details, see: b/292174333
80-
DefaultMessageFactory defaultMessageFactory = DefaultMessageFactory.create(pool);
81-
82-
allDescriptors
40+
getAllDescriptorsFromJvm()
8341
.extensionDescriptors()
8442
.forEach(
8543
(descriptorName, descriptor) -> {
8644
if (descriptor.getType().equals(FieldDescriptor.Type.MESSAGE)) {
87-
Message.Builder defaultInstance =
88-
defaultMessageFactory
89-
.newBuilder(descriptor.getMessageType().getFullName())
45+
Message output =
46+
DefaultInstanceMessageFactory.getInstance()
47+
.getPrototype(descriptor.getMessageType())
9048
.orElseThrow(
9149
() ->
9250
new NoSuchElementException(
9351
"Could not find a default message for: "
9452
+ descriptor.getFullName()));
95-
extensionRegistry.add(descriptor, defaultInstance.build());
53+
extensionRegistry.add(descriptor, output);
9654
} else {
9755
extensionRegistry.add(descriptor);
9856
}
9957
});
100-
10158
return extensionRegistry;
10259
}
60+
61+
private RegistryUtils() {}
10362
}

testing/src/main/java/dev/cel/testing/testrunner/TestExecutor.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package dev.cel.testing.testrunner;
1616

1717
import static com.google.common.collect.MoreCollectors.onlyElement;
18+
import static dev.cel.testing.utils.ClassLoaderUtils.loadClassesWithMethodAnnotation;
19+
import static dev.cel.testing.utils.ClassLoaderUtils.loadSubclasses;
1820
import static java.nio.charset.StandardCharsets.UTF_8;
1921
import static java.time.ZoneId.systemDefault;
2022

@@ -23,9 +25,7 @@
2325
import dev.cel.testing.testrunner.Annotations.TestSuiteSupplier;
2426
import dev.cel.testing.testrunner.CelTestSuite.CelTestSection;
2527
import dev.cel.testing.testrunner.CelTestSuite.CelTestSection.CelTestCase;
26-
import io.github.classgraph.ClassGraph;
2728
import io.github.classgraph.ClassInfoList;
28-
import io.github.classgraph.ScanResult;
2929
import java.io.File;
3030
import java.io.IOException;
3131
import java.lang.reflect.Method;
@@ -166,12 +166,8 @@ private void setStartMillis(long startMillis) {
166166
public static void runTests() throws Exception {
167167
String testSuitePath = System.getProperty("test_suite_path");
168168

169-
// Using `enableAllInfo()` to scan all class files upfront. This avoids repeated parsing
170-
// of class files by individual methods, improving efficiency.
171-
ScanResult scanResult = new ClassGraph().enableAllInfo().scan();
172-
173169
CelTestSuite testSuite;
174-
testSuite = readCustomTestSuite(scanResult);
170+
testSuite = readCustomTestSuite();
175171

176172
if (testSuitePath != null) {
177173
if (testSuite != null) {
@@ -184,7 +180,7 @@ public static void runTests() throws Exception {
184180
throw new IllegalArgumentException("Neither test_suite_path nor TestSuiteSupplier is set.");
185181
}
186182

187-
Class<?> testClass = getUserTestClass(scanResult);
183+
Class<?> testClass = getUserTestClass();
188184
String envXmlFile = System.getenv("XML_OUTPUT_FILE");
189185
JUnitXmlReporter testReporter = new JUnitXmlReporter(envXmlFile);
190186
TestContext testContext = new TestContext();
@@ -245,9 +241,9 @@ public String describe() {
245241
}
246242
}
247243

248-
private static CelTestSuite readCustomTestSuite(ScanResult scanResult) throws Exception {
244+
private static CelTestSuite readCustomTestSuite() throws Exception {
249245
ClassInfoList classInfoList =
250-
scanResult.getClassesWithMethodAnnotation(CEL_TESTSUITE_ANNOTATION_CLASS.getName());
246+
loadClassesWithMethodAnnotation(CEL_TESTSUITE_ANNOTATION_CLASS.getName());
251247
if (classInfoList.isEmpty()) {
252248
return null;
253249
}
@@ -278,8 +274,8 @@ private static Method getMethodWithAnnotation(Class<?> clazz) {
278274
return testSuiteSupplierMethod;
279275
}
280276

281-
private static Class<?> getUserTestClass(ScanResult scanResult) {
282-
ClassInfoList subClassInfoList = scanResult.getSubclasses(CelUserTestTemplate.class);
277+
private static Class<?> getUserTestClass() {
278+
ClassInfoList subClassInfoList = loadSubclasses(CelUserTestTemplate.class);
283279
if (subClassInfoList.size() != 1) {
284280
throw new IllegalArgumentException(
285281
"Expected 1 subclass for CelUserTestTemplate, but got "

0 commit comments

Comments
 (0)