From 01ec1b9a0fcbdbe514ed2193780f74070be862ae Mon Sep 17 00:00:00 2001 From: wsalembi Date: Wed, 22 Jan 2020 18:07:41 +0100 Subject: [PATCH 1/2] #1305 fixing parsing of empty securityRequirement --- .../parser/util/SwaggerDeserializer.java | 8 +- .../parser/util/SwaggerDeserializerTest.java | 76 +++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java index a5999a33c8..53edb85bef 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java @@ -417,8 +417,12 @@ public Operation operation(ObjectNode obj, String location, ParseResult result) if(security != null) { List>> ss = new ArrayList<>(); for(SecurityRequirement s : security) { - if(s.getRequirements() != null && s.getRequirements().size() > 0) { - ss.add(s.getRequirements()); + if(s.getRequirements() != null) { + if (s.getRequirements().size() > 0) { + ss.add(s.getRequirements()); + } else { + ss.add(Collections.singletonMap("none", Collections.emptyList())); + } } } output.setSecurity(ss); diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java index 5b2dae71a0..1fc960be54 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java @@ -224,6 +224,36 @@ public void testSecurity() { Assert.assertTrue(requirements.contains("write:pets")); } + @Test + public void testSecurityWithEmpty() { + String json = "{\n" + + " \"swagger\": \"2.0\",\n" + + " \"security\": [\n" + + " {},\n" + + " {\n" + + " \"petstore_auth\": [\n" + + " \"write:pets\",\n" + + " \"read:pets\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + "}"; + SwaggerParser parser = new SwaggerParser(); + + SwaggerDeserializationResult result = parser.readWithInfo(json); + + Swagger swagger = result.getSwagger(); + + assertNotNull(swagger.getSecurity()); + List security = swagger.getSecurity(); + Assert.assertTrue(security.size() == 2); + Assert.assertTrue(security.get(0).getRequirements().size() == 0); + Assert.assertTrue(security.get(1).getRequirements().size() == 1); + + List requirement = security.get(1).getRequirements().get("petstore_auth"); + Assert.assertTrue(requirement.size() == 2); + } + @Test public void testSecurityDefinition() { String json = "{\n" + @@ -566,6 +596,52 @@ public void testPaths() { assertTrue(scopes.contains("read:pets")); assertTrue(scopes.contains("write:pets")); } + + @Test + public void testOperationSecurityWithEmpty() { + String json = "{\n" + + " \"swagger\": \"2.0\",\n" + + " \"paths\": {\n" + + " \"/pet\": {\n" + + " \"foo\": \"bar\",\n" + + " \"get\": {\n" + + " \"security\": [\n" + + " {},\n" + + " {\n" + + " \"petstore_auth\": [\n" + + " \"write:pets\",\n" + + " \"read:pets\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + SwaggerParser parser = new SwaggerParser(); + + SwaggerDeserializationResult result = parser.readWithInfo(json); + List messageList = result.getMessages(); + Set messages = new HashSet(messageList); + assertTrue(messages.contains("attribute paths.'/pet'.foo is unexpected")); + Swagger swagger = result.getSwagger(); + + Path path = swagger.getPath("/pet"); + assertNotNull(path); + Operation operation = path.getGet(); + assertNotNull(operation); + List>> security = operation.getSecurity(); + + assertTrue(security.size() == 2); + + Map> requirement1 = security.get(0); + assertTrue(requirement1.containsKey("none")); + assertTrue(requirement1.get("none").isEmpty()); + + Map> requirement2 = security.get(1); + assertTrue(requirement2.containsKey("petstore_auth")); + assertFalse(requirement2.get("petstore_auth").isEmpty()); + } @Test public void testPathsWithRefResponse() { From d8385f4835ac045e9254be67bd4473869f7c3cb9 Mon Sep 17 00:00:00 2001 From: wsalembi Date: Wed, 22 Jan 2020 18:21:20 +0100 Subject: [PATCH 2/2] #1305 fixing parsing of empty securityRequirement (use empty map instead) --- .../main/java/io/swagger/parser/util/SwaggerDeserializer.java | 2 +- .../java/io/swagger/parser/util/SwaggerDeserializerTest.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java index 53edb85bef..1b5f19cbb2 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java @@ -421,7 +421,7 @@ public Operation operation(ObjectNode obj, String location, ParseResult result) if (s.getRequirements().size() > 0) { ss.add(s.getRequirements()); } else { - ss.add(Collections.singletonMap("none", Collections.emptyList())); + ss.add(Collections.>emptyMap()); } } } diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java index 1fc960be54..c179ad8e1d 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java @@ -635,8 +635,7 @@ public void testOperationSecurityWithEmpty() { assertTrue(security.size() == 2); Map> requirement1 = security.get(0); - assertTrue(requirement1.containsKey("none")); - assertTrue(requirement1.get("none").isEmpty()); + assertTrue(requirement1.isEmpty()); Map> requirement2 = security.get(1); assertTrue(requirement2.containsKey("petstore_auth"));