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  }