Files
go-sip/internal/config/asterisk_user_ari_test.go
T

56 lines
2.1 KiB
Go

package config_test
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
)
func TestConfigureUserAsteriskARIPrivateAndNoOverwrite(t *testing.T) {
home := t.TempDir()
root := filepath.Join(home, ".config", "go-sip-asterisk")
if err := os.MkdirAll(root, 0700); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(root, "asterisk.conf"), []byte("[directories]\n"), 0600); err != nil {
t.Fatal(err)
}
path := "../../deploys/cell/configure-asterisk-user-ari.sh"
run := func() (string, error) {
command := exec.Command("bash", path)
command.Env = append(os.Environ(), "HOME="+home)
output, err := command.CombinedOutput()
return string(output), err
}
if output, err := run(); err != nil {
t.Fatalf("private ARI configuration failed: %v %s", err, output)
}
for _, name := range []string{"ari.conf", "http.conf", "ari-secret"} {
info, err := os.Stat(filepath.Join(root, name))
if err != nil || info.Mode().Perm() != 0600 {
t.Fatalf("ARI file %s must be private: info=%v err=%v", name, info, err)
}
}
password, err := os.ReadFile(filepath.Join(root, "ari-secret"))
if err != nil || len(password) != 64 {
t.Fatalf("ARI credential must be a generated 32-byte hex secret: err=%v length=%d", err, len(password))
}
ari, err := os.ReadFile(filepath.Join(root, "ari.conf"))
if err != nil || !strings.Contains(string(ari), "password = "+string(password)) || !strings.Contains(string(ari), "read_only = no") {
t.Fatalf("ARI config did not bind generated credential: err=%v", err)
}
http, err := os.ReadFile(filepath.Join(root, "http.conf"))
if err != nil || !strings.Contains(string(http), "bindaddr = 127.0.0.1") || !strings.Contains(string(http), "bindport = 8088") {
t.Fatalf("HTTP must be explicitly restricted to the local Cell: err=%v", err)
}
if output, err := run(); err == nil || !strings.Contains(output, "already exists") {
t.Fatalf("repeat install must not overwrite private credentials: err=%v output=%s", err, output)
}
again, err := os.ReadFile(filepath.Join(root, "ari-secret"))
if err != nil || string(again) != string(password) {
t.Fatal("existing ARI credential was changed by a repeat install")
}
}