cedar-policy / cedar-java

Java bindings for the Cedar language

Home Page:https://www.cedarpolicy.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Corpus integration tests are not executed

vurhanau opened this issue · comments

Bug Category

Tests

Describe the bug

SharedIntegrationTests.integrationTestsFromJson() ignores corpus tests.
This code filters out all files with wrong predicates: Path.endsWith(...), Path.startsWith(...) is not a correct check to validate filename prefix/suffix.

Example:

public class Test {
    public static void main(String[] args) {
        Path p = Paths.get("/var/lib/foo.json");
        System.out.println(p.startsWith("foo"));
        System.out.println(p.endsWith(".json"));
    }
}

Output:

false
false

Links:
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Path.html#startsWith(java.lang.String)
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Path.html#endsWith(java.lang.String)

Expected behavior

Corpus integration tests should not be ignored

Reproduction steps

  1. Enable integration test execution
  2. Observe that corpus tests are not executed

I was trying to fix this issue, but corpus tests are failing with a deserialization error:

SharedIntegrationTests > integrationTestsFromJson() > initializationError FAILED
    java.io.UncheckedIOException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "type" (class com.cedarpolicy.serializer.JsonEUID), not marked as ignorable (one known property: "__expr"])
     at [Source: (FileInputStream); line: 4, column: 16] (through reference chain: java.lang.Object[][0]->com.cedarpolicy.SharedIntegrationTests$JsonEntity["uid"]->com.cedarpolicy.serializer.JsonEUID["type"])
        at app//com.cedarpolicy.SharedIntegrationTests.lambda$integrationTestsFromJson$1(SharedIntegrationTests.java:240)
        at java.base@14/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base@14/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at java.base@14/java.util.Iterator.forEachRemaining(Iterator.java:133)
        at java.base@14/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
        at java.base@14/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base@14/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base@14/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base@14/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base@14/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base@14/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
        at app//com.cedarpolicy.SharedIntegrationTests.integrationTestsFromJson(SharedIntegrationTests.java:233)
        Caused by:
        com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "type" (class com.cedarpolicy.serializer.JsonEUID), not marked as ignorable (one known property: "__expr"])
         at [Source: (FileInputStream); line: 4, column: 16] (through reference chain: java.lang.Object[][0]->com.cedarpolicy.SharedIntegrationTests$JsonEntity["uid"]->com.cedarpolicy.serializer.JsonEUID["type"])
            at app//com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
            at app//com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1138)
            at app//com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2224)
            at app//com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1709)
            at app//com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1687)
            at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:320)
            at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
            at app//com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
            at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)
            at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
            at app//com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:216)
            at app//com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:26)
            at app//com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
            at app//com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)
            at app//com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)
            at app//com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1496)
            at app//com.cedarpolicy.SharedIntegrationTests.loadEntities(SharedIntegrationTests.java:332)
            at app//com.cedarpolicy.SharedIntegrationTests.loadJsonTests(SharedIntegrationTests.java:257)
            at app//com.cedarpolicy.SharedIntegrationTests.lambda$integrationTestsFromJson$1(SharedIntegrationTests.java:236)
            ... 11 more
1 test completed, 1 failed
> Task :test FAILED

Thanks for reporting this! We'll take a look and get back to you.

I'll clean up the code some more, but this should be fixed with:
#31
#32
#33