aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/validator/validator_test.go
blob: ef04d9cde344589916fb8cc72b1e3bd2eae2aea3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright 2024 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

package validator_test

import (
	"errors"
	"testing"

	"github.com/google/syzkaller/pkg/validator"
	"github.com/stretchr/testify/assert"
)

func TestIsCommitHash(t *testing.T) {
	assert.True(t, validator.CommitHash("b311c1b497e51a628aa89e7cb954481e5f9dced2").Ok)
	assert.False(t, validator.CommitHash("").Ok)
	assert.False(t, validator.CommitHash("b311").Ok)
	assert.False(t, validator.CommitHash("+311c1b497e51a628aa89e7cb954481e5f9dced2").Ok)

	assert.Equal(t, "not a hash: len is not 40", validator.CommitHash("b311").Err.Error())
	assert.Equal(t, "valName: not a hash: len is not 40",
		validator.CommitHash("b311", "valName").Err.Error())
	assert.Equal(t, "valName: not a hash: not an alphanum",
		validator.CommitHash("!311c1b497e51a628aa89e7cb954481e5f9dced2", "valName").Err.Error())
}

func TestIsNamespaceName(t *testing.T) {
	assert.True(t, validator.NamespaceName("upstream").Ok)
	assert.False(t, validator.NamespaceName("up").Ok)
	assert.False(t, validator.NamespaceName("").Ok)

	assert.Equal(t, "not a namespace name", validator.NamespaceName("up").Err.Error())
	assert.Equal(t, "ns: not a namespace name",
		validator.NamespaceName("up", "ns").Err.Error())
}

// nolint: dupl
func TestIsDashboardClientName(t *testing.T) {
	assert.True(t, validator.DashClientName("name").Ok)
	assert.False(t, validator.DashClientName("").Ok)

	assert.Equal(t, "not a dashboard client name", validator.DashClientName("cl").Err.Error())
	assert.Equal(t, "client: not a dashboard client name",
		validator.DashClientName("cl", "client").Err.Error())
}

// nolint: dupl
func TestIsDashboardClientKey(t *testing.T) {
	assert.True(t, validator.DashClientKey("b311c1b497e51a628aa89e7cb954481e5f9dced2").Ok)
	assert.False(t, validator.DashClientKey("").Ok)

	assert.Equal(t, "not a dashboard client key", validator.DashClientKey("key").Err.Error())
	assert.Equal(t, "clientKey: not a dashboard client key",
		validator.DashClientKey("clKey", "clientKey").Err.Error())
}

// nolint: dupl
func TestIsKernelFilePath(t *testing.T) {
	assert.True(t, validator.KernelFilePath("io_uring/advise.c").Ok)
	assert.False(t, validator.KernelFilePath("io-uring/advise.c").Ok)

	assert.Equal(t, "not a kernel file path", validator.KernelFilePath("io-uring").Err.Error())
	assert.Equal(t, "kernelPath: not a kernel file path",
		validator.KernelFilePath("io-uring", "kernelPath").Err.Error())
}

var badResult = validator.Result{false, errors.New("sample error")}

func TestAnyError(t *testing.T) {
	assert.Nil(t, validator.AnyError("prefix", validator.ResultOk, validator.ResultOk))
	assert.Equal(t, "prefix: sample error",
		validator.AnyError("prefix", validator.ResultOk, badResult).Error())
}

func TestPanicIfNot(t *testing.T) {
	assert.NotPanics(t, func() { validator.PanicIfNot(validator.ResultOk, validator.ResultOk) })
	assert.Panics(t, func() { validator.PanicIfNot(validator.ResultOk, badResult) })
}

func TestAnyOk(t *testing.T) {
	assert.Equal(t, validator.ResultOk, validator.AnyOk())
	assert.Equal(t, validator.ResultOk, validator.AnyOk(validator.ResultOk))
	assert.Equal(t, badResult, validator.AnyOk(badResult))
	assert.Equal(t, validator.ResultOk, validator.AnyOk(badResult, validator.ResultOk))
}