diff --git a/checks/raw/security_policy_test.go b/checks/raw/security_policy_test.go index 2c1e3eed32f..95aa84d3399 100644 --- a/checks/raw/security_policy_test.go +++ b/checks/raw/security_policy_test.go @@ -14,7 +14,15 @@ package raw -import "testing" +import ( + "testing" + + "github.com/golang/mock/gomock" + + "github.com/ossf/scorecard/v4/checker" + mockrepo "github.com/ossf/scorecard/v4/clients/mockclients" + scut "github.com/ossf/scorecard/v4/utests" +) func Test_isSecurityRstFound(t *testing.T) { t.Parallel() @@ -58,3 +66,77 @@ func Test_isSecurityRstFound(t *testing.T) { }) } } + +// TestSecurityPolicy tests the security policy. +func TestSecurityPolicy(t *testing.T) { + t.Parallel() + //nolint + tests := []struct { + name string + files []string + result checker.SecurityPolicyData + wantErr bool + want scut.TestReturn + }{ + { + name: "security.md", + files: []string{ + "security.md", + }, + }, + { + name: ".github/security.md", + files: []string{ + ".github/security.md", + }, + }, + { + name: "docs/security.md", + files: []string{ + "docs/security.md", + }, + }, + { + name: "docs/security.rst", + files: []string{ + "docs/security.rst", + }, + }, + { + name: "doc/security.rst", + files: []string{ + "doc/security.rst", + }, + }, + } + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + ctrl := gomock.NewController(t) + mockRepo := mockrepo.NewMockRepoClient(ctrl) + + mockRepo.EXPECT().ListFiles(gomock.Any()).Return(tt.files, nil).AnyTimes() + dl := scut.TestDetailLogger{} + c := checker.CheckRequest{ + RepoClient: mockRepo, + Dlogger: &dl, + } + + res, err := SecurityPolicy(&c) + + if !scut.ValidateTestReturn(t, tt.name, &tt.want, &checker.CheckResult{}, &dl) { + t.Errorf("test failed: log message not present: %+v , for test %v", tt.want, tt.name) + } + + if (err != nil) != tt.wantErr { + t.Errorf("SecurityPolicy() error = %v, wantErr %v", err, tt.wantErr) + return + } + + if len(res.Files) != len(tt.files) { + t.Errorf("test failed: number of files returned is not correct: %+v", res) + } + }) + } +} diff --git a/checks/security_policy_test.go b/checks/security_policy_test.go new file mode 100644 index 00000000000..6729ad3f228 --- /dev/null +++ b/checks/security_policy_test.go @@ -0,0 +1,109 @@ +// Copyright 2022 Security Scorecard Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package checks + +import ( + "testing" + + "github.com/golang/mock/gomock" + + "github.com/ossf/scorecard/v4/checker" + mockrepo "github.com/ossf/scorecard/v4/clients/mockclients" + scut "github.com/ossf/scorecard/v4/utests" +) + +func TestSecurityPolicy(t *testing.T) { + t.Parallel() + //nolint + tests := []struct { + name string + files []string + wantErr bool + want scut.TestReturn + }{ + { + name: "security.md", + files: []string{ + "security.md", + }, + want: scut.TestReturn{ + Score: 10, + NumberOfInfo: 1, + }, + }, + { + name: ".github/security.md", + files: []string{ + ".github/security.md", + }, + want: scut.TestReturn{ + Score: 10, + NumberOfInfo: 1, + }, + }, + { + name: "docs/security.md", + files: []string{ + "docs/security.md", + }, + want: scut.TestReturn{ + Score: 10, + NumberOfInfo: 1, + }, + }, + { + name: "docs/security.rst", + files: []string{ + "docs/security.rst", + }, + want: scut.TestReturn{ + Score: 10, + NumberOfInfo: 1, + }, + }, + { + name: "doc/security.rst", + files: []string{ + "doc/security.rst", + }, + want: scut.TestReturn{ + Score: 10, + NumberOfInfo: 1, + }, + }, + } + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + ctrl := gomock.NewController(t) + mockRepo := mockrepo.NewMockRepoClient(ctrl) + + mockRepo.EXPECT().ListFiles(gomock.Any()).Return(tt.files, nil).AnyTimes() + dl := scut.TestDetailLogger{} + c := checker.CheckRequest{ + RepoClient: mockRepo, + Dlogger: &dl, + } + + res := SecurityPolicy(&c) + + if !scut.ValidateTestReturn(t, tt.name, &tt.want, &res, &dl) { + t.Errorf("test failed: log message not present: %+v", tt.want) + } + }) + } +}