Files
VoCat/cmd/vocat/install_script_test.go
T

58 lines
1.6 KiB
Go

package main
import (
"os"
"strings"
"testing"
)
func TestInstallerValidatesDatabaseBeforeReplacingBinary(t *testing.T) {
scriptBytes, err := os.ReadFile("../../scripts/install.sh")
if err != nil {
t.Fatal(err)
}
script := string(scriptBytes)
mainStart := strings.LastIndex(script, "# --- Main ")
if mainStart < 0 {
t.Fatal("installer main section not found")
}
main := script[mainStart:]
validateAt := strings.Index(main, `bootstrap_admin "${VOCAT_TMP}/vocat"`)
installAt := strings.Index(main, "install_binary")
if validateAt < 0 {
t.Fatal("installer does not validate the database with the downloaded binary")
}
if installAt < 0 {
t.Fatal("installer does not install the downloaded binary")
}
if validateAt > installAt {
t.Fatal("installer replaces the current binary before validating database compatibility")
}
}
func TestInstallerProvidesRequiredQMIUtilities(t *testing.T) {
scriptBytes, err := os.ReadFile("../../scripts/install.sh")
if err != nil {
t.Fatal(err)
}
script := string(scriptBytes)
for _, required := range []string{
"install_qmi_support()",
"command -v qmicli",
"command -v qmi-network",
"apt-get install -y libqmi-utils",
"dnf install -y libqmi-utils",
"pacman -Sy --noconfirm libqmi",
"apk add --no-cache qmi-utils",
"Could not install or find qmicli/qmi-network",
} {
if !strings.Contains(script, required) {
t.Errorf("installer is missing required QMI handling %q", required)
}
}
mainStart := strings.LastIndex(script, "# --- Main ")
if mainStart < 0 || !strings.Contains(script[mainStart:], "install_qmi_support") {
t.Error("installer does not install QMI utilities from its main path")
}
}