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 }