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