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  }