github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/pkg/validator/validator_test.go (about) 1 // Copyright 2024 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package validator_test 5 6 import ( 7 "errors" 8 "testing" 9 10 "github.com/google/syzkaller/pkg/validator" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestIsCommitHash(t *testing.T) { 15 assert.True(t, validator.CommitHash("b311c1b497e51a628aa89e7cb954481e5f9dced2").Ok) 16 assert.False(t, validator.CommitHash("").Ok) 17 assert.False(t, validator.CommitHash("b311").Ok) 18 assert.False(t, validator.CommitHash("+311c1b497e51a628aa89e7cb954481e5f9dced2").Ok) 19 20 assert.Equal(t, "not a hash: len is not 40", validator.CommitHash("b311").Err.Error()) 21 assert.Equal(t, "valName: not a hash: len is not 40", 22 validator.CommitHash("b311", "valName").Err.Error()) 23 assert.Equal(t, "valName: not a hash: not an alphanum", 24 validator.CommitHash("!311c1b497e51a628aa89e7cb954481e5f9dced2", "valName").Err.Error()) 25 } 26 27 // nolint: dupl 28 func TestIsNamespaceName(t *testing.T) { 29 assert.True(t, validator.NamespaceName("upstream").Ok) 30 assert.False(t, validator.NamespaceName("up").Ok) 31 assert.False(t, validator.NamespaceName("").Ok) 32 33 assert.Equal(t, "not a namespace name", validator.NamespaceName("up").Err.Error()) 34 assert.Equal(t, "ns: not a namespace name", 35 validator.NamespaceName("up", "ns").Err.Error()) 36 } 37 38 // nolint: dupl 39 func TestIsManagerName(t *testing.T) { 40 assert.True(t, validator.ManagerName("ci-upstream").Ok) 41 assert.False(t, validator.ManagerName("").Ok) 42 43 assert.Equal(t, "not a manager name", validator.ManagerName("*").Err.Error()) 44 assert.Equal(t, "manager: not a manager name", 45 validator.ManagerName("*", "manager").Err.Error()) 46 } 47 48 // nolint: dupl 49 func TestIsDashboardClientName(t *testing.T) { 50 assert.True(t, validator.DashClientName("name").Ok) 51 assert.False(t, validator.DashClientName("").Ok) 52 53 assert.Equal(t, "not a dashboard client name", validator.DashClientName("cl").Err.Error()) 54 assert.Equal(t, "client: not a dashboard client name", 55 validator.DashClientName("cl", "client").Err.Error()) 56 } 57 58 // nolint: dupl 59 func TestIsDashboardClientKey(t *testing.T) { 60 assert.True(t, validator.DashClientKey("b311c1b497e51a628aa89e7cb954481e5f9dced2").Ok) 61 assert.False(t, validator.DashClientKey("").Ok) 62 63 assert.Equal(t, "not a dashboard client key", validator.DashClientKey("key").Err.Error()) 64 assert.Equal(t, "clientKey: not a dashboard client key", 65 validator.DashClientKey("clKey", "clientKey").Err.Error()) 66 } 67 68 // nolint: dupl 69 func TestIsKernelFilePath(t *testing.T) { 70 assert.True(t, validator.KernelFilePath("io_uring/advise.c").Ok) 71 assert.True(t, validator.KernelFilePath("io-uring/advise.c").Ok) 72 assert.False(t, validator.KernelFilePath("io--uring/advise.c").Ok) 73 assert.False(t, validator.KernelFilePath("").Ok) 74 75 assert.Equal(t, "not a kernel file path", validator.KernelFilePath("io--uring").Err.Error()) 76 assert.Equal(t, "kernelPath: not a kernel file path", 77 validator.KernelFilePath("io--uring", "kernelPath").Err.Error()) 78 } 79 80 var badResult = validator.Result{false, errors.New("sample error")} 81 82 func TestAnyError(t *testing.T) { 83 assert.Nil(t, validator.AnyError("prefix", validator.ResultOk, validator.ResultOk)) 84 assert.Equal(t, "prefix: sample error", 85 validator.AnyError("prefix", validator.ResultOk, badResult).Error()) 86 } 87 88 func TestPanicIfNot(t *testing.T) { 89 assert.NotPanics(t, func() { validator.PanicIfNot(validator.ResultOk, validator.ResultOk) }) 90 assert.Panics(t, func() { validator.PanicIfNot(validator.ResultOk, badResult) }) 91 } 92 93 func TestAnyOk(t *testing.T) { 94 assert.Equal(t, validator.ResultOk, validator.AnyOk()) 95 assert.Equal(t, validator.ResultOk, validator.AnyOk(validator.ResultOk)) 96 assert.Equal(t, badResult, validator.AnyOk(badResult)) 97 assert.Equal(t, validator.ResultOk, validator.AnyOk(badResult, validator.ResultOk)) 98 } 99 100 func TestAllowlisted(t *testing.T) { 101 assert.True(t, validator.Allowlisted("good", []string{"good", "also-good"}).Ok) 102 assert.False(t, validator.Allowlisted("bad", []string{"good", "also-good"}).Ok) 103 assert.Equal(t, 104 validator.Result{Ok: false, Err: errors.New("name(bad) is not allowed")}, 105 validator.Allowlisted("bad", nil, "name")) 106 }