pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/initsystem/initsystem_test.go (about)

     1  //go:build linux || freebsd
     2  // +build linux freebsd
     3  
     4  package initsystem
     5  
     6  // ////////////////////////////////////////////////////////////////////////////////// //
     7  //                                                                                    //
     8  //                         Copyright (c) 2022 ESSENTIAL KAOS                          //
     9  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
    10  //                                                                                    //
    11  // ////////////////////////////////////////////////////////////////////////////////// //
    12  
    13  import (
    14  	"io/ioutil"
    15  	"testing"
    16  
    17  	. "pkg.re/essentialkaos/check.v1"
    18  )
    19  
    20  // ////////////////////////////////////////////////////////////////////////////////// //
    21  
    22  func Test(t *testing.T) { TestingT(t) }
    23  
    24  type InitSuite struct{}
    25  
    26  // ////////////////////////////////////////////////////////////////////////////////// //
    27  
    28  var _ = Suite(&InitSuite{})
    29  
    30  // ////////////////////////////////////////////////////////////////////////////////// //
    31  
    32  func (s *InitSuite) TestSystemdEnabled(c *C) {
    33  	c.Assert(parseSystemdEnabledOutput("enabled\r\n"), Equals, true)
    34  	c.Assert(parseSystemdEnabledOutput("enabled"), Equals, true)
    35  	c.Assert(parseSystemdEnabledOutput(""), Equals, false)
    36  	c.Assert(parseSystemdEnabledOutput("Failed to get unit file state for unknown.service: No such file or directory"), Equals, false)
    37  }
    38  
    39  func (s *InitSuite) TestUpstartEnabled(c *C) {
    40  	data1 := `# Ignore this comment
    41  start on runlevel [2]
    42  stop on runlevel [5]
    43  
    44  pre-start script
    45  
    46  bash << "EOF"
    47    mkdir -p /var/log/myapp
    48  EOF
    49  
    50  end script`
    51  
    52  	data2 := `# Ignore this comment
    53  
    54  pre-start script
    55  
    56  bash << "EOF"
    57    mkdir -p /var/log/myapp
    58  EOF
    59  
    60  end script`
    61  
    62  	tmpDir := c.MkDir()
    63  
    64  	ioutil.WriteFile(tmpDir+"/1.conf", []byte(data1), 0644)
    65  	ioutil.WriteFile(tmpDir+"/2.conf", []byte(data2), 0644)
    66  
    67  	ok, err := parseUpstartEnabledData(tmpDir + "/0.conf")
    68  
    69  	c.Assert(err, NotNil)
    70  	c.Assert(ok, Equals, false)
    71  
    72  	ok, err = parseUpstartEnabledData(tmpDir + "/1.conf")
    73  
    74  	c.Assert(err, IsNil)
    75  	c.Assert(ok, Equals, true)
    76  
    77  	ok, err = parseUpstartEnabledData(tmpDir + "/2.conf")
    78  
    79  	c.Assert(err, IsNil)
    80  	c.Assert(ok, Equals, false)
    81  }
    82  
    83  func (s *InitSuite) TestSysvEnabled(c *C) {
    84  	d1 := "myapp         0:off 1:off 2:on  3:on  4:on  5:on  6:off\r\n"
    85  	d2 := "myapp         0:off 1:off 2:off 3:off 4:off 5:off 6:off\r\n"
    86  	d3 := "myapp\r\n"
    87  
    88  	ok, err := parseSysvEnabledOutput(d1)
    89  
    90  	c.Assert(err, IsNil)
    91  	c.Assert(ok, Equals, true)
    92  
    93  	ok, err = parseSysvEnabledOutput(d2)
    94  
    95  	c.Assert(err, IsNil)
    96  	c.Assert(ok, Equals, false)
    97  
    98  	ok, err = parseSysvEnabledOutput(d3)
    99  
   100  	c.Assert(err, NotNil)
   101  	c.Assert(ok, Equals, false)
   102  
   103  	ok, err = parseSysvEnabledOutput("")
   104  
   105  	c.Assert(err, NotNil)
   106  	c.Assert(ok, Equals, false)
   107  }
   108  
   109  func (s *InitSuite) TestSystemdStatus(c *C) {
   110  	d := "\r\n\r\n\n\n"
   111  	ok, err := parseSystemdStatusOutput("myapp", d)
   112  
   113  	c.Assert(err, NotNil)
   114  	c.Assert(err.Error(), Equals, "Can't parse systemd output")
   115  	c.Assert(ok, Equals, false)
   116  
   117  	d = "LoadState=not-found\nActiveState=inactive\n"
   118  	ok, err = parseSystemdStatusOutput("myapp", d)
   119  
   120  	c.Assert(err, NotNil)
   121  	c.Assert(err.Error(), Equals, "Unit myapp could not be found")
   122  	c.Assert(ok, Equals, false)
   123  
   124  	d = "LoadState=loaded\nActiveState=failed\n"
   125  	ok, err = parseSystemdStatusOutput("myapp", d)
   126  
   127  	c.Assert(err, IsNil)
   128  	c.Assert(ok, Equals, false)
   129  
   130  	d = "LoadState=loaded\nActiveState=failed\n"
   131  	ok, err = parseSystemdStatusOutput("myapp", d)
   132  
   133  	c.Assert(err, IsNil)
   134  	c.Assert(ok, Equals, false)
   135  
   136  	d = "LoadState=loaded\nActiveState=inactive\n"
   137  	ok, err = parseSystemdStatusOutput("myapp", d)
   138  
   139  	c.Assert(err, IsNil)
   140  	c.Assert(ok, Equals, false)
   141  
   142  	d = "LoadState=loaded\nActiveState=active\n"
   143  	ok, err = parseSystemdStatusOutput("myapp", d)
   144  
   145  	c.Assert(err, IsNil)
   146  	c.Assert(ok, Equals, true)
   147  }
   148  
   149  func (s *InitSuite) TestUpstartStatus(c *C) {
   150  	ok, err := parseUpstartStatusOutput("\r\n")
   151  
   152  	c.Assert(err, NotNil)
   153  	c.Assert(ok, Equals, false)
   154  
   155  	ok, err = parseUpstartStatusOutput("assdas ad asd asd\r\n")
   156  
   157  	c.Assert(err, NotNil)
   158  	c.Assert(ok, Equals, false)
   159  
   160  	ok, err = parseUpstartStatusOutput("myapp stop/waiting\r\n")
   161  
   162  	c.Assert(err, IsNil)
   163  	c.Assert(ok, Equals, false)
   164  
   165  	ok, err = parseUpstartStatusOutput("myapp start/running\r\n")
   166  
   167  	c.Assert(err, IsNil)
   168  	c.Assert(ok, Equals, true)
   169  }