From 48454e6a411f880081cab6df85598cf03aeaab67 Mon Sep 17 00:00:00 2001 From: theteacat Date: Tue, 30 Jan 2024 09:29:04 +0000 Subject: [PATCH] Add test case for optional global security --- functions/owasp/check_security_test.go | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/functions/owasp/check_security_test.go b/functions/owasp/check_security_test.go index ccfdb1f0..75caa6aa 100644 --- a/functions/owasp/check_security_test.go +++ b/functions/owasp/check_security_test.go @@ -283,3 +283,52 @@ components: assert.Equal(t, "`security` was not defined for path `/insecure` in method `put`", res[0].Message) assert.Equal(t, "$.paths['/insecure'].put", res[0].Path) } + +func TestCheckSecurity_SecurityGlobalDefined_Optional(t *testing.T) { + yml := `openapi: 3.0.1 +info: + version: "1.2.3" + title: "securitySchemes" +security: + - BasicAuth: [] + - {} +paths: + /insecure: + put: + responses: {} + /secure: + put: + responses: {} + security: + - BasicAuth: [] +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic` + + document, err := libopenapi.NewDocument([]byte(yml)) + if err != nil { + panic(fmt.Sprintf("cannot create new document: %e", err)) + } + + m, _ := document.BuildV3Model() + path := "$" + + drDocument := drModel.NewDrDocument(m) + + rule := buildOpenApiTestRuleAction(path, "check_security", "", nil) + ctx := buildOpenApiTestContext(model.CastToRuleAction(rule.Then), map[string]interface{}{ + "methods": []string{"put"}, + }) + + ctx.Document = document + ctx.DrDocument = drDocument + ctx.Rule = &rule + + res := CheckSecurity{}.RunRule(nil, ctx) + + assert.Len(t, res, 1) + assert.Equal(t, "`security` has null elements for path `/insecure` in method `put`", res[0].Message) + assert.Equal(t, "$.security[1]", res[0].Path) +}