2019-11-29 22:12:38 +01:00
|
|
|
package alpine_builder
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
2020-01-05 19:49:53 +01:00
|
|
|
"path"
|
2019-11-29 22:12:38 +01:00
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/GehirnInc/crypt"
|
|
|
|
_ "github.com/GehirnInc/crypt/sha256_crypt"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
systemShadow = "test_shadow"
|
|
|
|
systemDropbearConfig = "test_dropbear"
|
|
|
|
systemDropbearRestart = "restart_dropbear_command"
|
|
|
|
systemReboot = "reboot_command"
|
|
|
|
systemShutdown = "shutdown_command"
|
2020-01-05 19:49:53 +01:00
|
|
|
|
|
|
|
systemZoneinfo = "zoneinfo/"
|
|
|
|
systemLocaltimeFile = "test_localtime"
|
2019-11-29 22:12:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestSystemSetRootPassword(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.NoError(SystemSetRootPassword("password"))
|
|
|
|
|
|
|
|
data, err := ioutil.ReadFile(systemShadow)
|
|
|
|
ass.NoError(err)
|
|
|
|
hash := strings.Split(string(data), ":")[1]
|
|
|
|
|
|
|
|
crypter := crypt.SHA256.New()
|
|
|
|
ass.NoError(crypter.Verify(hash, []byte("password")))
|
|
|
|
|
|
|
|
_ = os.Remove(systemShadow)
|
|
|
|
}
|
|
|
|
|
2019-12-10 18:57:01 +01:00
|
|
|
func TestSystemSSHEnabled(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
_, err := SystemSSHEnabled()
|
|
|
|
ass.EqualError(err, "failed to read ssh config: open test_dropbear: no such file or directory")
|
|
|
|
|
|
|
|
ass.NoError(ioutil.WriteFile(systemDropbearConfig, []byte("test"), os.ModePerm))
|
|
|
|
value, err := SystemSSHEnabled()
|
|
|
|
ass.NoError(err)
|
2019-12-15 16:24:44 +01:00
|
|
|
ass.True(value)
|
2019-12-10 18:57:01 +01:00
|
|
|
|
|
|
|
ass.NoError(ioutil.WriteFile(systemDropbearConfig, []byte("DROPBEAR_OPTS=\"-p 127.0.0.1:22\""), os.ModePerm))
|
|
|
|
value, err = SystemSSHEnabled()
|
|
|
|
ass.NoError(err)
|
2019-12-15 16:24:44 +01:00
|
|
|
ass.False(value)
|
2019-12-10 18:57:01 +01:00
|
|
|
|
|
|
|
_ = os.Remove(systemDropbearConfig)
|
|
|
|
}
|
|
|
|
|
2019-11-29 22:12:38 +01:00
|
|
|
func TestSystemEnableSSH(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.EqualError(SystemEnableSSH(), "failed to restart ssh server: exec: \"restart_dropbear_command\": executable file not found in $PATH")
|
|
|
|
|
|
|
|
data, err := ioutil.ReadFile(systemDropbearConfig)
|
|
|
|
ass.NoError(err)
|
|
|
|
|
|
|
|
ass.Equal("DROPBEAR_OPTS=\"\"", string(data))
|
|
|
|
|
|
|
|
_ = os.Remove(systemDropbearConfig)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSystemDisableSSH(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.EqualError(SystemDisableSSH(), "failed to restart ssh server: exec: \"restart_dropbear_command\": executable file not found in $PATH")
|
|
|
|
|
|
|
|
data, err := ioutil.ReadFile(systemDropbearConfig)
|
|
|
|
ass.NoError(err)
|
|
|
|
|
|
|
|
ass.Equal("DROPBEAR_OPTS=\"-p 127.0.0.1:22\"", string(data))
|
|
|
|
|
|
|
|
_ = os.Remove(systemDropbearConfig)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSystemReboot(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.EqualError(SystemReboot(),
|
|
|
|
"failed to start system reboot: exec: \"reboot_command\": executable file not found in $PATH")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSystemShutdown(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.EqualError(SystemShutdown(),
|
|
|
|
"failed to start system shutdown: exec: \"shutdown_command\": executable file not found in $PATH")
|
|
|
|
}
|
2020-01-05 19:49:53 +01:00
|
|
|
|
|
|
|
var zoneTab = `
|
|
|
|
#
|
|
|
|
#country-
|
|
|
|
#codes coordinates TZ comments
|
|
|
|
AD +4230+00131 Europe/Andorra
|
|
|
|
AE,OM +2518+05518 Asia/Dubai
|
|
|
|
AQ -6617+11031 Antarctica/Casey Casey
|
|
|
|
`
|
|
|
|
|
|
|
|
func TestSystemListTimeZones(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
_, err := SystemListTimeZones()
|
|
|
|
ass.EqualError(err, "open zoneinfo/zone1970.tab: no such file or directory")
|
|
|
|
|
|
|
|
ass.NoError(os.MkdirAll(systemZoneinfo, os.ModePerm))
|
|
|
|
testZoneTab := path.Join(systemZoneinfo, "zone1970.tab")
|
|
|
|
ass.NoError(ioutil.WriteFile(testZoneTab, []byte(zoneTab), os.ModePerm))
|
|
|
|
|
|
|
|
zones, err := SystemListTimeZones()
|
|
|
|
ass.NoError(err)
|
|
|
|
ass.Equal([]string{
|
|
|
|
"Antarctica/Casey",
|
|
|
|
"Asia/Dubai",
|
|
|
|
"Etc/UTC",
|
|
|
|
"Europe/Andorra",
|
|
|
|
}, zones)
|
|
|
|
|
|
|
|
ass.NoError(os.Remove(testZoneTab))
|
|
|
|
ass.NoError(os.Remove(systemZoneinfo))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSystemSetTimeZone(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.NoError(os.MkdirAll(systemZoneinfo, os.ModePerm))
|
|
|
|
testZone := path.Join(systemZoneinfo, "test")
|
|
|
|
ass.NoError(ioutil.WriteFile(testZone, []byte(""), os.ModePerm))
|
|
|
|
|
|
|
|
ass.EqualError(SystemSetTimeZone("test2"),
|
|
|
|
"invalid time zone given: test2")
|
|
|
|
|
|
|
|
ass.NoError(SystemSetTimeZone("test"))
|
|
|
|
ass.NoError(SystemSetTimeZone("test"))
|
|
|
|
|
|
|
|
ass.NoError(os.Remove(systemLocaltimeFile))
|
|
|
|
ass.NoError(os.Remove(testZone))
|
|
|
|
ass.NoError(os.Remove(systemZoneinfo))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSystemGetTimeZone(t *testing.T) {
|
|
|
|
ass := assert.New(t)
|
|
|
|
|
|
|
|
ass.NoError(os.MkdirAll(systemZoneinfo, os.ModePerm))
|
|
|
|
testZone := path.Join(systemZoneinfo, "test")
|
|
|
|
ass.NoError(ioutil.WriteFile(testZone, []byte(""), os.ModePerm))
|
|
|
|
|
|
|
|
_, err := SystemGetTimeZone()
|
|
|
|
ass.EqualError(err, "failed to get local time zone")
|
|
|
|
|
|
|
|
ass.NoError(os.Symlink(path.Join(systemZoneinfo, "test"), systemLocaltimeFile))
|
|
|
|
|
|
|
|
zone, err := SystemGetTimeZone()
|
|
|
|
ass.NoError(err)
|
|
|
|
ass.Equal("test", zone)
|
|
|
|
|
|
|
|
ass.NoError(os.Remove(systemLocaltimeFile))
|
|
|
|
ass.NoError(os.Remove(testZone))
|
|
|
|
ass.NoError(os.Remove(systemZoneinfo))
|
|
|
|
}
|