Files
go-sip/cmd/sip-call/main_test.go
T

88 lines
2.6 KiB
Go

package main
import (
"bytes"
"context"
"errors"
"git.ipao.vip/rogee/go-sip/internal/sipcall"
"os"
"path/filepath"
"strings"
"testing"
)
func TestCallCLIHasNoBusinessOrAIDependencies(t *testing.T) {
for _, args := range [][]string{{"call", "--sip", "line.env", "18601010101"}, {"call", "--sip", "line.env", "-D", "18601010101"}, {"--debug", "call", "--sip", "line.env", "18601010101"}} {
dir := t.TempDir()
env := filepath.Join(dir, "line.env")
data := `SIP_ID=line
SIP_SERVER=192.0.2.1
SIP_PORT=5060
SIP_CALLER_ID=BD123
SIP_PREFIX=7089
SIP_TRANSPORT=udp
SIP_AUTH=ip
SIP_REGISTER=no
SIP_CODEC=alaw
ASTERISK_CONFIG_DIR=/tmp/ast
ASTERISK_BIN=/usr/local/sbin/asterisk
ASTERISK_LIBRARY_DIR=/usr/local/lib
OUTPUT_DIR=/tmp/results
RING_SECONDS=20
HOLD_SECONDS=3
DEBUG_INTERFACE=any
`
if err := os.WriteFile(env, []byte(data), 0600); err != nil {
t.Fatal(err)
}
for i := range args {
if args[i] == "line.env" {
args[i] = env
}
}
calls := 0
root := newRootCommand(func(ctx context.Context, c sipcall.Config, n string, debug bool) (*sipcall.Report, error) {
calls++
want := strings.Contains(strings.Join(args, " "), "-D") || args[0] == "--debug"
if debug != want || n != "18601010101" || c.ID != "line" {
t.Fatal("incorrect CLI inputs")
}
return &sipcall.Report{Status: "connected", Directory: "/tmp/result", Callee: n, DialedCallee: c.Prefix + n, Debug: debug}, nil
})
out := &bytes.Buffer{}
root.SetOut(out)
root.SetErr(out)
root.SetArgs(args)
if err := root.Execute(); err != nil || calls != 1 {
t.Fatalf("%v %v", args, err)
}
if !strings.Contains(out.String(), "result.json") {
t.Fatal("result path missing")
}
}
}
func TestCallCLIRejectsMissingOrMalformedInputsBeforeHostAccess(t *testing.T) {
for _, args := range [][]string{{}, {"call"}, {"call", "123"}, {"call", "--sip", "missing.env", "+123"}, {"call", "--sip", "missing.env", "123", "456"}, {"agent"}} {
root := newRootCommand(func(context.Context, sipcall.Config, string, bool) (*sipcall.Report, error) {
t.Fatal("invalid input must never access host")
return nil, nil
})
root.SetArgs(args)
root.SetOut(&bytes.Buffer{})
root.SetErr(&bytes.Buffer{})
if err := root.Execute(); err == nil {
t.Fatalf("invalid invocation accepted: %v", args)
}
}
}
func TestCallCLIDoesNotHideRunFailures(t *testing.T) {
errExpected := errors.New("unconfirmed call")
out := &bytes.Buffer{}
err := printReport(out, &sipcall.Report{Status: "unknown", Directory: "/tmp/test", Failure: errExpected.Error()})
if err != nil || !strings.Contains(out.String(), "状态不明") {
t.Fatal("unknown call must not look connected")
}
}