|
1 | | -package io.swagger.v3.parser.test; |
2 | | - |
3 | | -import io.swagger.v3.core.util.Json; |
4 | | -import io.swagger.v3.oas.models.OpenAPI; |
5 | | -import io.swagger.v3.oas.models.media.Schema; |
6 | | -import io.swagger.v3.parser.OpenAPIV3Parser; |
7 | | -import io.swagger.v3.parser.core.models.ParseOptions; |
8 | | -import io.swagger.v3.parser.core.models.SwaggerParseResult; |
9 | | -import io.swagger.v3.parser.util.DeserializationUtils; |
10 | | -import org.testng.annotations.Test; |
11 | | - |
12 | | -import java.util.Arrays; |
13 | | - |
14 | | -import static org.testng.Assert.assertEquals; |
15 | | -import static org.testng.Assert.assertNotNull; |
16 | | -import static org.testng.Assert.assertNull; |
17 | | - |
18 | | -public class AnchorTest { |
19 | | - |
20 | | - @Test |
21 | | - public void testIssue146() { |
22 | | - |
23 | | - String yaml = "openapi: 3.0.0\n" + |
24 | | - "servers: []\n" + |
25 | | - "info:\n" + |
26 | | - " version: 0.0.1\n" + |
27 | | - " title: API\n" + |
28 | | - "x-types:\n" + |
29 | | - " OperationType: &OperationType\n" + |
30 | | - " - registration\n" + |
31 | | - "# Describe your paths here\n" + |
32 | | - "paths:\n" + |
33 | | - " /checker:\n" + |
34 | | - " get:\n" + |
35 | | - " parameters:\n" + |
36 | | - " - name: operations\n" + |
37 | | - " in: query\n" + |
38 | | - " schema:\n" + |
39 | | - " type: array\n" + |
40 | | - " items:\n" + |
41 | | - " type: string\n" + |
42 | | - " enum: *OperationType\n" + |
43 | | - " default:\n" + |
44 | | - " - registration\n" + |
45 | | - " responses:\n" + |
46 | | - " '200':\n" + |
47 | | - " description: OK\n" + |
48 | | - " content:\n" + |
49 | | - " '*/*':\n" + |
50 | | - " schema:\n" + |
51 | | - " $ref: \"#/components/schemas/OperationType\"\n" + |
52 | | - "components:\n" + |
53 | | - " schemas:\n" + |
54 | | - " OperationType:\n" + |
55 | | - " type: string\n" + |
56 | | - " enum: *OperationType"; |
57 | | - |
58 | | - SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml,null,null); |
59 | | - |
60 | | - Schema model = result.getOpenAPI().getComponents().getSchemas().get("OperationType"); |
61 | | - assertEquals(model.getEnum(), Arrays.asList("registration")); |
62 | | - } |
63 | | - |
64 | | - |
65 | | - @Test |
66 | | - public void testCycle() { |
67 | | - |
68 | | - String yaml = "a:\n" + |
69 | | - " a1: &a1\n" + |
70 | | - " a2: \n" + |
71 | | - " - a3\n" + |
72 | | - " - a4\n" + |
73 | | - " a5: \n" + |
74 | | - " - *a1"; |
75 | | - |
76 | | - SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml,null,null); |
77 | | - assertEquals(Json.pretty(result.getOpenAPI()), "null"); |
78 | | - |
79 | | - } |
80 | | - |
81 | | - @Test |
82 | | - public void testIssue998() throws Exception{ |
83 | | - |
84 | | - //DeserializationUtils.getOptions().setMaxYamlDepth(5000); |
85 | | - SwaggerParseResult result = new OpenAPIV3Parser().readLocation("./issue_998.yaml",null,null); |
86 | | - assertNull(result.getOpenAPI()); |
87 | | - |
88 | | - } |
89 | | - |
90 | | - @Test |
91 | | - public void testIssue998Billion() throws Exception{ |
92 | | - DeserializationUtils.getOptions().setMaxYamlReferences(100000L); |
93 | | - String yaml = "a: &a [\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\"]\n" + |
94 | | - "b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]\n" + |
95 | | - "c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]\n" + |
96 | | - "d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]\n" + |
97 | | - "e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]\n" + |
98 | | - "f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]\n" + |
99 | | - "g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]\n" + |
100 | | - "h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]\n" + |
101 | | - "i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]"; |
102 | | - |
103 | | - String yaml2 = "a: &a [\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\"]\n" + |
104 | | - "b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]\n" + |
105 | | - "c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]\n" + |
106 | | - "d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]\n" + |
107 | | - "e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]\n" + |
108 | | - "f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]\n" + |
109 | | - "g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]\n" + |
110 | | - "h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]"; |
111 | | - |
112 | | - String yaml3 = "a: &a [\"lol\"]\n" + |
113 | | - "b: &b [*a,*a]\n" + |
114 | | - "c: &c [*b,*b]"; |
115 | | - |
116 | | - OpenAPI result = new OpenAPIV3Parser().readContents(yaml,null,null).getOpenAPI(); |
117 | | - assertEquals(Json.pretty(result), "null"); |
118 | | - result = new OpenAPIV3Parser().readContents(yaml2,null,null).getOpenAPI(); |
119 | | - assertEquals(Json.pretty(result), "null"); |
120 | | - DeserializationUtils.getOptions().setMaxYamlReferences(10000000L); |
121 | | - |
122 | | - } |
123 | | - |
124 | | - @Test |
125 | | - public void testBillionLaughProtectionSnakeYaml() { |
126 | | - ParseOptions opts = new ParseOptions(); |
127 | | - opts.setResolve(true); |
128 | | - SwaggerParseResult result = new OpenAPIV3Parser().readLocation("billion_laughs_snake_yaml.yaml",null,opts); |
129 | | - assertNotNull(result.getOpenAPI().getComponents().getSchemas().get("a1")); |
130 | | - assertEquals(result.getOpenAPI().getComponents().getSchemas().get("a1").getEnum().get(0), "AA1"); |
131 | | - assertNotNull(result.getOpenAPI().getComponents().getSchemas().get("c1")); |
132 | | - assertEquals(((Schema)result.getOpenAPI().getComponents().getSchemas().get("c1").getProperties().get("a")).getEnum().get(0), "AA1"); |
133 | | - |
134 | | - |
135 | | - DeserializationUtils.getOptions().setMaxYamlAliasesForCollections(50); |
136 | | - DeserializationUtils.getOptions().setYamlAllowRecursiveKeys(false); |
137 | | - |
138 | | - result = new OpenAPIV3Parser().readLocation("billion_laughs_snake_yaml.yaml",null,opts); |
139 | | - |
140 | | - DeserializationUtils.getOptions().setMaxYamlAliasesForCollections(Integer.MAX_VALUE); |
141 | | - DeserializationUtils.getOptions().setYamlAllowRecursiveKeys(true); |
142 | | - |
143 | | - } |
144 | | -} |
| 1 | +//package io.swagger.v3.parser.test; |
| 2 | +// |
| 3 | +//import io.swagger.v3.core.util.Json; |
| 4 | +//import io.swagger.v3.oas.models.OpenAPI; |
| 5 | +//import io.swagger.v3.oas.models.media.Schema; |
| 6 | +//import io.swagger.v3.parser.OpenAPIV3Parser; |
| 7 | +//import io.swagger.v3.parser.core.models.ParseOptions; |
| 8 | +//import io.swagger.v3.parser.core.models.SwaggerParseResult; |
| 9 | +//import io.swagger.v3.parser.util.DeserializationUtils; |
| 10 | +//import org.testng.annotations.Test; |
| 11 | +// |
| 12 | +//import java.util.Arrays; |
| 13 | +// |
| 14 | +//import static org.testng.Assert.assertEquals; |
| 15 | +//import static org.testng.Assert.assertNotNull; |
| 16 | +//import static org.testng.Assert.assertNull; |
| 17 | +// |
| 18 | +//public class AnchorTest { |
| 19 | +// |
| 20 | +// @Test |
| 21 | +// public void testIssue146() { |
| 22 | +// |
| 23 | +// String yaml = "openapi: 3.0.0\n" + |
| 24 | +// "servers: []\n" + |
| 25 | +// "info:\n" + |
| 26 | +// " version: 0.0.1\n" + |
| 27 | +// " title: API\n" + |
| 28 | +// "x-types:\n" + |
| 29 | +// " OperationType: &OperationType\n" + |
| 30 | +// " - registration\n" + |
| 31 | +// "# Describe your paths here\n" + |
| 32 | +// "paths:\n" + |
| 33 | +// " /checker:\n" + |
| 34 | +// " get:\n" + |
| 35 | +// " parameters:\n" + |
| 36 | +// " - name: operations\n" + |
| 37 | +// " in: query\n" + |
| 38 | +// " schema:\n" + |
| 39 | +// " type: array\n" + |
| 40 | +// " items:\n" + |
| 41 | +// " type: string\n" + |
| 42 | +// " enum: *OperationType\n" + |
| 43 | +// " default:\n" + |
| 44 | +// " - registration\n" + |
| 45 | +// " responses:\n" + |
| 46 | +// " '200':\n" + |
| 47 | +// " description: OK\n" + |
| 48 | +// " content:\n" + |
| 49 | +// " '*/*':\n" + |
| 50 | +// " schema:\n" + |
| 51 | +// " $ref: \"#/components/schemas/OperationType\"\n" + |
| 52 | +// "components:\n" + |
| 53 | +// " schemas:\n" + |
| 54 | +// " OperationType:\n" + |
| 55 | +// " type: string\n" + |
| 56 | +// " enum: *OperationType"; |
| 57 | +// |
| 58 | +// SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml,null,null); |
| 59 | +// |
| 60 | +// Schema model = result.getOpenAPI().getComponents().getSchemas().get("OperationType"); |
| 61 | +// assertEquals(model.getEnum(), Arrays.asList("registration")); |
| 62 | +// } |
| 63 | +// |
| 64 | +// |
| 65 | +// @Test |
| 66 | +// public void testCycle() { |
| 67 | +// |
| 68 | +// String yaml = "a:\n" + |
| 69 | +// " a1: &a1\n" + |
| 70 | +// " a2: \n" + |
| 71 | +// " - a3\n" + |
| 72 | +// " - a4\n" + |
| 73 | +// " a5: \n" + |
| 74 | +// " - *a1"; |
| 75 | +// |
| 76 | +// SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml,null,null); |
| 77 | +// assertEquals(Json.pretty(result.getOpenAPI()), "null"); |
| 78 | +// |
| 79 | +// } |
| 80 | +// |
| 81 | +// @Test |
| 82 | +// public void testIssue998() throws Exception{ |
| 83 | +// |
| 84 | +// //DeserializationUtils.getOptions().setMaxYamlDepth(5000); |
| 85 | +// SwaggerParseResult result = new OpenAPIV3Parser().readLocation("./issue_998.yaml",null,null); |
| 86 | +// assertNull(result.getOpenAPI()); |
| 87 | +// |
| 88 | +// } |
| 89 | +// |
| 90 | +// @Test |
| 91 | +// public void testIssue998Billion() throws Exception{ |
| 92 | +// DeserializationUtils.getOptions().setMaxYamlReferences(100000L); |
| 93 | +// String yaml = "a: &a [\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\"]\n" + |
| 94 | +// "b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]\n" + |
| 95 | +// "c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]\n" + |
| 96 | +// "d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]\n" + |
| 97 | +// "e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]\n" + |
| 98 | +// "f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]\n" + |
| 99 | +// "g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]\n" + |
| 100 | +// "h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]\n" + |
| 101 | +// "i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]"; |
| 102 | +// |
| 103 | +// String yaml2 = "a: &a [\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\",\"lol\"]\n" + |
| 104 | +// "b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]\n" + |
| 105 | +// "c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]\n" + |
| 106 | +// "d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]\n" + |
| 107 | +// "e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]\n" + |
| 108 | +// "f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]\n" + |
| 109 | +// "g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]\n" + |
| 110 | +// "h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]"; |
| 111 | +// |
| 112 | +// String yaml3 = "a: &a [\"lol\"]\n" + |
| 113 | +// "b: &b [*a,*a]\n" + |
| 114 | +// "c: &c [*b,*b]"; |
| 115 | +// |
| 116 | +// OpenAPI result = new OpenAPIV3Parser().readContents(yaml,null,null).getOpenAPI(); |
| 117 | +// assertEquals(Json.pretty(result), "null"); |
| 118 | +// result = new OpenAPIV3Parser().readContents(yaml2,null,null).getOpenAPI(); |
| 119 | +// assertEquals(Json.pretty(result), "null"); |
| 120 | +// DeserializationUtils.getOptions().setMaxYamlReferences(10000000L); |
| 121 | +// |
| 122 | +// } |
| 123 | +// |
| 124 | +// @Test |
| 125 | +// public void testBillionLaughProtectionSnakeYaml() { |
| 126 | +// ParseOptions opts = new ParseOptions(); |
| 127 | +// opts.setResolve(true); |
| 128 | +// SwaggerParseResult result = new OpenAPIV3Parser().readLocation("billion_laughs_snake_yaml.yaml",null,opts); |
| 129 | +// assertNotNull(result.getOpenAPI().getComponents().getSchemas().get("a1")); |
| 130 | +// assertEquals(result.getOpenAPI().getComponents().getSchemas().get("a1").getEnum().get(0), "AA1"); |
| 131 | +// assertNotNull(result.getOpenAPI().getComponents().getSchemas().get("c1")); |
| 132 | +// assertEquals(((Schema)result.getOpenAPI().getComponents().getSchemas().get("c1").getProperties().get("a")).getEnum().get(0), "AA1"); |
| 133 | +// |
| 134 | +// |
| 135 | +// DeserializationUtils.getOptions().setMaxYamlAliasesForCollections(50); |
| 136 | +// DeserializationUtils.getOptions().setYamlAllowRecursiveKeys(false); |
| 137 | +// |
| 138 | +// result = new OpenAPIV3Parser().readLocation("billion_laughs_snake_yaml.yaml",null,opts); |
| 139 | +// |
| 140 | +// DeserializationUtils.getOptions().setMaxYamlAliasesForCollections(Integer.MAX_VALUE); |
| 141 | +// DeserializationUtils.getOptions().setYamlAllowRecursiveKeys(true); |
| 142 | +// |
| 143 | +// } |
| 144 | +//} |
0 commit comments