• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.networknt.schema;
2 
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.assertTrue;
5 
6 import com.fasterxml.jackson.databind.JsonNode;
7 import com.fasterxml.jackson.databind.ObjectMapper;
8 import java.io.IOException;
9 import java.io.InputStream;
10 import java.util.List;
11 import java.util.Set;
12 import org.junit.jupiter.api.BeforeEach;
13 import org.junit.jupiter.api.Test;
14 
15 public class Issue366FailSlowTest {
16 
17   @BeforeEach
setup()18   public void setup() throws IOException {
19     setupSchema();
20   }
21 
22   JsonSchema jsonSchema;
23   ObjectMapper objectMapper = new ObjectMapper();
setupSchema()24   private void setupSchema() throws IOException {
25 
26     SchemaValidatorsConfig schemaValidatorsConfig = new SchemaValidatorsConfig();
27     JsonSchemaFactory schemaFactory = JsonSchemaFactory
28         .builder(JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7))
29         .jsonMapper(objectMapper)
30         .build();
31 
32     schemaValidatorsConfig.setTypeLoose(false);
33 
34     SchemaLocation uri = getSchema();
35 
36     InputStream in = getClass().getResourceAsStream("/schema/issue366_schema.json");
37     JsonNode testCases = objectMapper.readValue(in, JsonNode.class);
38     this.jsonSchema = schemaFactory.getSchema(uri, testCases,schemaValidatorsConfig);
39   }
40 
getJsonNodeFromStreamContent(InputStream content)41   protected JsonNode getJsonNodeFromStreamContent(InputStream content) throws Exception {
42     ObjectMapper mapper = new ObjectMapper();
43     JsonNode node = mapper.readTree(content);
44     return node;
45   }
46 
47   @Test
firstOneValid()48   public void firstOneValid() throws Exception {
49     String dataPath = "/data/issue366.json";
50 
51     InputStream dataInputStream = getClass().getResourceAsStream(dataPath);
52     JsonNode node = getJsonNodeFromStreamContent(dataInputStream);
53     List<JsonNode> testNodes = node.findValues("tests");
54     JsonNode testNode = testNodes.get(0).get(0);
55     JsonNode dataNode = testNode.get("data");
56     Set<ValidationMessage> errors = jsonSchema.validate(dataNode);
57     assertTrue(errors.isEmpty());
58   }
59 
60   @Test
secondOneValid()61   public void secondOneValid() throws Exception {
62     String dataPath = "/data/issue366.json";
63 
64     InputStream dataInputStream = getClass().getResourceAsStream(dataPath);
65     JsonNode node = getJsonNodeFromStreamContent(dataInputStream);
66     List<JsonNode> testNodes = node.findValues("tests");
67     JsonNode testNode = testNodes.get(0).get(1);
68     JsonNode dataNode = testNode.get("data");
69     Set<ValidationMessage> errors = jsonSchema.validate(dataNode);
70     assertTrue(errors.isEmpty());
71   }
72 
73   @Test
bothValid()74   public void bothValid() throws Exception {
75     String dataPath = "/data/issue366.json";
76 
77     InputStream dataInputStream = getClass().getResourceAsStream(dataPath);
78     JsonNode node = getJsonNodeFromStreamContent(dataInputStream);
79     List<JsonNode> testNodes = node.findValues("tests");
80     JsonNode testNode = testNodes.get(0).get(2);
81     JsonNode dataNode = testNode.get("data");
82     Set<ValidationMessage> errors = jsonSchema.validate(dataNode);
83     assertTrue(!errors.isEmpty());
84     assertEquals(errors.size(),1);
85   }
86 
87   @Test
neitherValid()88   public void neitherValid() throws Exception {
89     String dataPath = "/data/issue366.json";
90 
91     InputStream dataInputStream = getClass().getResourceAsStream(dataPath);
92     JsonNode node = getJsonNodeFromStreamContent(dataInputStream);
93     List<JsonNode> testNodes = node.findValues("tests");
94     JsonNode testNode = testNodes.get(0).get(3);
95     JsonNode dataNode = testNode.get("data");
96     Set<ValidationMessage> errors = jsonSchema.validate(dataNode);
97     assertTrue(!errors.isEmpty());
98     assertEquals(errors.size(),3);
99   }
100 
getSchema()101   private SchemaLocation getSchema() {
102    return SchemaLocation.of("classpath:" + "/draft7/issue366_schema.json");
103   }
104 }
105