pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/knf/validators/fs/validators_test.go (about) 1 package fs 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "fmt" 12 "io/ioutil" 13 "os" 14 "runtime" 15 "testing" 16 17 "pkg.re/essentialkaos/ek.v12/knf" 18 19 . "pkg.re/essentialkaos/check.v1" 20 ) 21 22 // ////////////////////////////////////////////////////////////////////////////////// // 23 24 const _CONFIG_TEMPLATE = ` 25 [test] 26 test0: 27 test1: %s 28 ` 29 30 // ////////////////////////////////////////////////////////////////////////////////// // 31 32 type ValidatorSuite struct{} 33 34 // ////////////////////////////////////////////////////////////////////////////////// // 35 36 var _ = Suite(&ValidatorSuite{}) 37 38 // ////////////////////////////////////////////////////////////////////////////////// // 39 40 func Test(t *testing.T) { 41 TestingT(t) 42 } 43 44 // ////////////////////////////////////////////////////////////////////////////////// // 45 46 func (s *ValidatorSuite) TestPermsValidator(c *C) { 47 configFile := createConfig(c, "/etc/passwd") 48 49 err := knf.Global(configFile) 50 c.Assert(err, IsNil) 51 52 errs := knf.Validate([]*knf.Validator{ 53 {"test:test0", Perms, "FR"}, 54 {"test:test1", Perms, "FR"}, 55 }) 56 57 c.Assert(errs, HasLen, 0) 58 59 configFile = createConfig(c, "/etc/__unknown__") 60 61 err = knf.Global(configFile) 62 c.Assert(err, IsNil) 63 64 errs = knf.Validate([]*knf.Validator{ 65 {"test:test1", Perms, "F"}, 66 {"test:test1", Perms, "FR"}, 67 {"test:test1", Perms, "FW"}, 68 {"test:test1", Perms, "FX"}, 69 {"test:test1", Perms, "FRW"}, 70 {"test:test1", Perms, "DX"}, 71 {"test:test1", Perms, "DRX"}, 72 {"test:test1", Perms, "DRX"}, 73 {"test:test1", Perms, "DWX"}, 74 {"test:test1", Perms, "DRWX"}, 75 {"test:test1", Perms, "WX"}, 76 }) 77 78 c.Assert(errs, HasLen, 11) 79 } 80 81 func (s *ValidatorSuite) TestOwnerValidator(c *C) { 82 configFile := createConfig(c, "/etc/passwd") 83 84 err := knf.Global(configFile) 85 c.Assert(err, IsNil) 86 87 errs := knf.Validate([]*knf.Validator{ 88 {"test:test0", Owner, "root"}, 89 {"test:test1", Owner, "root"}, 90 }) 91 92 c.Assert(errs, HasLen, 0) 93 94 errs = knf.Validate([]*knf.Validator{ 95 {"test:test1", Owner, "ftp"}, 96 {"test:test1", Owner, "somerandomuser"}, 97 }) 98 99 c.Assert(errs, HasLen, 2) 100 101 configFile = createConfig(c, "/etc/__unknown__") 102 103 err = knf.Global(configFile) 104 c.Assert(err, IsNil) 105 106 errs = knf.Validate([]*knf.Validator{ 107 {"test:test1", Owner, "root"}, 108 }) 109 110 c.Assert(errs, HasLen, 1) 111 } 112 113 func (s *ValidatorSuite) TestOwnerGroupValidator(c *C) { 114 configFile := createConfig(c, "/etc/passwd") 115 116 err := knf.Global(configFile) 117 c.Assert(err, IsNil) 118 119 var errs []error 120 121 if runtime.GOOS == "darwin" { 122 errs = knf.Validate([]*knf.Validator{ 123 {"test:test0", OwnerGroup, "wheel"}, 124 {"test:test1", OwnerGroup, "wheel"}, 125 }) 126 } else { 127 errs = knf.Validate([]*knf.Validator{ 128 {"test:test0", OwnerGroup, "root"}, 129 {"test:test1", OwnerGroup, "root"}, 130 }) 131 } 132 133 c.Assert(errs, HasLen, 0) 134 135 errs = knf.Validate([]*knf.Validator{ 136 {"test:test1", OwnerGroup, "ftp"}, 137 {"test:test1", OwnerGroup, "somerandomuser"}, 138 }) 139 140 c.Assert(errs, HasLen, 2) 141 142 configFile = createConfig(c, "/etc/__unknown__") 143 144 err = knf.Global(configFile) 145 c.Assert(err, IsNil) 146 147 errs = knf.Validate([]*knf.Validator{ 148 {"test:test1", OwnerGroup, "root"}, 149 }) 150 151 c.Assert(errs, HasLen, 1) 152 } 153 154 func (s *ValidatorSuite) TestFileModeValidator(c *C) { 155 configFile := createConfig(c, "/etc/passwd") 156 157 err := knf.Global(configFile) 158 c.Assert(err, IsNil) 159 160 errs := knf.Validate([]*knf.Validator{ 161 {"test:test0", FileMode, os.FileMode(0644)}, 162 {"test:test1", FileMode, os.FileMode(0644)}, 163 }) 164 165 c.Assert(errs, HasLen, 0) 166 167 errs = knf.Validate([]*knf.Validator{ 168 {"test:test1", FileMode, os.FileMode(0777)}, 169 }) 170 171 c.Assert(errs, HasLen, 1) 172 173 configFile = createConfig(c, "/etc/__unknown__") 174 175 err = knf.Global(configFile) 176 c.Assert(err, IsNil) 177 178 errs = knf.Validate([]*knf.Validator{ 179 {"test:test1", FileMode, os.FileMode(0644)}, 180 }) 181 182 c.Assert(errs, HasLen, 1) 183 } 184 185 func (s *ValidatorSuite) TestMatchPattern(c *C) { 186 configFile := createConfig(c, "/etc/passwd") 187 188 err := knf.Global(configFile) 189 c.Assert(err, IsNil) 190 191 errs := knf.Validate([]*knf.Validator{ 192 {"test:test0", MatchPattern, "/etc/*"}, 193 {"test:test1", MatchPattern, "/etc/*"}, 194 }) 195 196 c.Assert(errs, HasLen, 0) 197 198 errs = knf.Validate([]*knf.Validator{ 199 {"test:test1", MatchPattern, "/var/*"}, 200 {"test:test1", MatchPattern, "[]a"}, 201 }) 202 203 c.Assert(errs, HasLen, 2) 204 } 205 206 // ////////////////////////////////////////////////////////////////////////////////// // 207 208 func createConfig(c *C, data string) string { 209 configPath := c.MkDir() + "/config.knf" 210 configData := fmt.Sprintf(_CONFIG_TEMPLATE, data) 211 212 err := ioutil.WriteFile(configPath, []byte(configData), 0644) 213 214 if err != nil { 215 c.Fatal(err.Error()) 216 } 217 218 return configPath 219 }