diff options
| author | Taras Madan <tarasmadan@google.com> | 2025-01-09 15:45:40 +0100 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2025-01-27 10:05:21 +0000 |
| commit | 0868754a9d325ba9011e1cb74510f68d4b627c79 (patch) | |
| tree | ce1f63a84afa095227d308ccfff258e2d1dea225 /pkg/validator | |
| parent | d99a33ad01eb09190a8680d743f8d520e459ef0f (diff) | |
dashboard/app: show manager unique coverage
1. Make heatmap testable, move out the spanner client instantiation.
2. Generate spannerdb.ReadOnlyTransaction mocks.
3. Generate spannerdb.RowIterator mocks.
4. Generate spannerdb.Row mocks.
5. Prepare spannerdb fixture.
6. Fixed html control name + value.
7. Added multiple tests.
8. Show line coverage from selected manager.
9. Propagate coverage url params to file coverage url.
Diffstat (limited to 'pkg/validator')
| -rw-r--r-- | pkg/validator/validator.go | 21 | ||||
| -rw-r--r-- | pkg/validator/validator_test.go | 18 |
2 files changed, 39 insertions, 0 deletions
diff --git a/pkg/validator/validator.go b/pkg/validator/validator.go index 9aebc8150..b9031302a 100644 --- a/pkg/validator/validator.go +++ b/pkg/validator/validator.go @@ -48,12 +48,33 @@ func PanicIfNot(results ...Result) error { return nil } +var ErrValueNotAllowed = errors.New("value is not allowed") + +func Allowlisted(str string, allowlist []string, valueName ...string) Result { + for _, allowed := range allowlist { + if allowed == str { + return Result{ + Ok: true, + } + } + } + if len(valueName) == 0 { + return Result{ + Err: fmt.Errorf("value %s is not allowed", str), + } + } + return Result{ + Err: fmt.Errorf("%s(%s) is not allowed", valueName[0], str), + } +} + var ( EmptyStr = makeStrLenFunc("not empty", 0) AlphaNumeric = makeStrReFunc("not an alphanum", "^[a-zA-Z0-9]*$") CommitHash = makeCombinedStrFunc("not a hash", AlphaNumeric, makeStrLenFunc("len is not 40", 40)) KernelFilePath = makeStrReFunc("not a kernel file path", "^[./_a-zA-Z0-9-]*$") NamespaceName = makeStrReFunc("not a namespace name", "^[a-zA-Z0-9_.-]{4,32}$") + ManagerName = makeStrReFunc("not a manager name", "^ci[a-z0-9-]*$") DashClientName = makeStrReFunc("not a dashboard client name", "^[a-zA-Z0-9_.-]{4,100}$") DashClientKey = makeStrReFunc("not a dashboard client key", "^([a-zA-Z0-9]{16,128})|("+regexp.QuoteMeta(auth.OauthMagic)+".*)$") diff --git a/pkg/validator/validator_test.go b/pkg/validator/validator_test.go index 9aa08e2d0..ffe935600 100644 --- a/pkg/validator/validator_test.go +++ b/pkg/validator/validator_test.go @@ -36,6 +36,16 @@ func TestIsNamespaceName(t *testing.T) { } // nolint: dupl +func TestIsManagerName(t *testing.T) { + assert.True(t, validator.ManagerName("ci-upstream").Ok) + assert.False(t, validator.ManagerName("").Ok) + + assert.Equal(t, "not a manager name", validator.ManagerName("*").Err.Error()) + assert.Equal(t, "manager: not a manager name", + validator.ManagerName("*", "manager").Err.Error()) +} + +// nolint: dupl func TestIsDashboardClientName(t *testing.T) { assert.True(t, validator.DashClientName("name").Ok) assert.False(t, validator.DashClientName("").Ok) @@ -86,3 +96,11 @@ func TestAnyOk(t *testing.T) { assert.Equal(t, badResult, validator.AnyOk(badResult)) assert.Equal(t, validator.ResultOk, validator.AnyOk(badResult, validator.ResultOk)) } + +func TestAllowlisted(t *testing.T) { + assert.True(t, validator.Allowlisted("good", []string{"good", "also-good"}).Ok) + assert.False(t, validator.Allowlisted("bad", []string{"good", "also-good"}).Ok) + assert.Equal(t, + validator.Result{Ok: false, Err: errors.New("name(bad) is not allowed")}, + validator.Allowlisted("bad", nil, "name")) +} |
