1
0
Fork 0
mirror of https://github.com/postmannen/ctrl.git synced 2025-03-05 06:46:48 +00:00
ctrl/steward_test.go

111 lines
2.6 KiB
Go
Raw Normal View History

2021-08-09 09:18:30 +02:00
package steward
import (
2021-08-09 14:41:31 +02:00
"io"
"net"
"os"
2021-08-09 09:18:30 +02:00
"path/filepath"
2021-08-09 14:41:31 +02:00
"strings"
2021-08-09 09:18:30 +02:00
"testing"
"time"
natsserver "github.com/nats-io/nats-server/v2/server"
)
func TestSteward(t *testing.T) {
// Start up the nats-server message broker.
nsOpt := &natsserver.Options{
Host: "127.0.0.1",
Port: 40222,
}
ns, err := natsserver.NewServer(nsOpt)
if err != nil {
t.Fatalf("error: failed to start nats-server %v\n", err)
}
if err := natsserver.Run(ns); err != nil {
natsserver.PrintAndDie(err.Error())
}
2021-08-09 14:41:31 +02:00
// Start Steward instance
// ---------------------------------------
tempdir := "./tmp"
2021-08-09 09:18:30 +02:00
conf := &Configuration{
2021-08-09 14:41:31 +02:00
SocketFolder: filepath.Join(tempdir, "tmp"),
DatabaseFolder: filepath.Join(tempdir, "var/lib"),
SubscribersDataFolder: filepath.Join(tempdir, "data"),
BrokerAddress: "127.0.0.1:40222",
NodeName: "central",
CentralNodeName: "central",
DefaultMessageRetries: 1,
DefaultMessageTimeout: 3,
StartSubREQnCliCommand: flagNodeSlice{OK: true, Values: []Node{"*"}},
StartSubREQErrorLog: flagNodeSlice{OK: true, Values: []Node{"*"}},
StartSubREQToFileAppend: flagNodeSlice{OK: true, Values: []Node{"*"}},
2021-08-09 09:18:30 +02:00
}
s, err := NewServer(conf)
if err != nil {
t.Fatalf("error: failed to start nats-server %v\n", err)
}
s.Start()
2021-08-09 14:41:31 +02:00
// Messaging tests.
//
// Write to socket.
// ---------------------------------------
want := "apekatt"
2021-08-09 09:34:05 +02:00
2021-08-09 14:41:31 +02:00
socket, err := net.Dial("unix", filepath.Join(conf.SocketFolder, "steward.sock"))
if err != nil {
t.Fatalf("error: failed to open socket file for writing: %v\n", err)
}
defer socket.Close()
m := `[
{
"directory":"commands-executed",
"fileExtension":".result",
"toNode": "central",
"data": ["bash","-c","echo apekatt"],
"replyMethod":"REQToFileAppend",
"method":"REQnCliCommand",
"ACKTimeout":3,
"retries":3,
"methodTimeout": 10
}
]`
_, err = socket.Write([]byte(m))
if err != nil {
t.Fatalf("error: failed to write to socket: %v\n", err)
}
// Wait a couple of seconds for the request to go through..
time.Sleep(time.Second * 2)
resultFile := filepath.Join(conf.SubscribersDataFolder, "commands-executed", "central", "central.REQnCliCommand.result")
fh, err := os.Open(resultFile)
if err != nil {
t.Fatalf("error: failed open result file: %v\n", err)
}
result, err := io.ReadAll(fh)
if err != nil {
t.Fatalf("error: failed read result file: %v\n", err)
}
2021-08-09 09:18:30 +02:00
2021-08-09 14:41:31 +02:00
if strings.Contains(string(result), want) {
t.Fatalf("error: did not find expexted word `%v` in file ", want)
}
// ---------------------------------------
2021-08-09 09:18:30 +02:00
2021-08-09 14:41:31 +02:00
s.Stop()
// Shutdown services.
ns.Shutdown()
2021-08-09 09:18:30 +02:00
}