yt-function-sdk-go/ytfunction_test.go

163 lines
3.8 KiB
Go
Raw Permalink Normal View History

2022-10-23 20:12:23 +03:00
package ytfunction
import (
"fmt"
"os"
"testing"
2022-10-27 13:57:58 +03:00
2022-12-01 15:23:42 +03:00
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network"
2022-10-23 20:12:23 +03:00
)
var serve *Serve
func setup() {
2022-11-11 19:07:23 +03:00
/*host, exists := os.LookupEnv("NATS_HOST")
2022-10-28 13:46:43 +03:00
if !exists {
host = "localhost"
2022-11-11 19:07:23 +03:00
}*/
addr, exists := os.LookupEnv("NATS_ADDR")
if !exists {
addr = "nats://localhost:4222"
2022-10-28 13:46:43 +03:00
}
2022-11-11 19:07:23 +03:00
/*port, exists := os.LookupEnv("NATS_PORT")
2022-10-28 13:46:43 +03:00
if !exists {
2022-10-28 15:06:24 +03:00
port = "4222"
2022-11-11 19:07:23 +03:00
}*/
2022-10-23 20:12:23 +03:00
2022-12-01 15:23:42 +03:00
serve = NewServe(addr, "", "test", nil, nil, nil)
2022-10-23 20:12:23 +03:00
if serve == nil {
panic(fmt.Errorf(`serve is not created`))
}
2022-10-25 14:47:26 +03:00
serve.AddAccept("*")
2022-10-28 13:46:43 +03:00
err := serve.Run()
if err != nil {
panic(err)
}
2022-10-23 20:12:23 +03:00
}
func shutdown() {
serve.Shutdown()
}
func TestMain(m *testing.M) {
setup()
code := m.Run()
shutdown()
os.Exit(code)
}
func TestRegisterFunction(t *testing.T) {
2022-10-25 12:59:22 +03:00
err := serve.RegisterFunction("testFunc", func(header *network.Header, paylod []byte) (result []byte, err error) {
2022-10-23 20:12:23 +03:00
return []byte("Hello world"), nil
})
if err != nil {
t.Error("Has error: ", err)
} else if !serve.HasFunction("testFunc") {
2022-10-25 12:59:22 +03:00
t.Error(`Function "testFunc" not found`)
}
}
func TestCallFunctionAsync(t *testing.T) {
2022-10-28 13:46:43 +03:00
err := serve.RegisterFunction("testFuncSimpleAsync", func(header *network.Header, paylod []byte) (result []byte, err error) {
2022-11-04 17:10:59 +03:00
header.ResponseHeaders["test"] = "my test"
2022-10-25 12:59:22 +03:00
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
2022-10-28 13:46:43 +03:00
type ChanRes struct {
2022-11-04 17:10:59 +03:00
res []byte
header *network.Header
err error
2022-10-28 13:46:43 +03:00
}
chanRes := make(chan ChanRes)
2022-11-04 17:10:59 +03:00
serve.CallAsync("default.test.testFuncSimpleAsync", nil, []byte("Hello"), func(err error, header *network.Header, result []byte) {
2022-10-28 13:46:43 +03:00
chanRes <- ChanRes{
2022-11-04 17:10:59 +03:00
res: result,
header: header,
err: err,
2022-10-25 12:59:22 +03:00
}
2022-10-28 13:46:43 +03:00
})
res := <-chanRes
if res.err != nil {
t.Error(err)
return
}
if string(res.res) != "world" {
t.Error("Function not returned \"world\"")
return
2022-10-23 20:12:23 +03:00
}
2022-11-04 17:10:59 +03:00
if v, ok := res.header.ResponseHeaders["test"]; !ok {
t.Errorf("not set response header")
} else if v != "my test" {
t.Errorf("got \"my test\", but expect \"%s\"", v)
}
2022-10-23 20:12:23 +03:00
}
2022-10-25 13:09:48 +03:00
func TestCallFunction(t *testing.T) {
var err error
err = serve.RegisterFunction("testFuncSimple", func(header *network.Header, paylod []byte) (result []byte, err error) {
2022-11-04 17:15:34 +03:00
header.ResponseHeaders["test"] = "my test"
2022-10-25 13:09:48 +03:00
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
var result []byte
2022-11-04 17:15:34 +03:00
var header *network.Header
result, header, err = serve.Call("default.test.testFuncSimple", nil, []byte("Hello"))
2022-10-25 13:09:48 +03:00
if err != nil {
t.Error(err)
return
}
if string(result) != "world" {
t.Error("Function not returned \"world\"")
return
}
2022-11-04 17:15:34 +03:00
if v, ok := header.ResponseHeaders["test"]; !ok {
t.Errorf("not set response header")
} else if v != "my test" {
t.Errorf("got \"my test\", but expect \"%s\"", v)
}
2022-10-25 13:09:48 +03:00
}
2022-11-30 14:24:24 +03:00
func TestCallFunctionDouble(t *testing.T) {
var err error
err = serve.RegisterFunction("testFuncSimple1", func(header *network.Header, paylod []byte) (result []byte, err error) {
/*header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil*/
result, _, err = serve.Call("default.test.testFuncSimple2", header, []byte("Hello"))
return result, err
})
if err != nil {
t.Error("Has error: ", err)
return
}
err = serve.RegisterFunction("testFuncSimple2", func(header *network.Header, paylod []byte) (result []byte, err error) {
header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
var result []byte
var header *network.Header
result, header, err = serve.Call("default.test.testFuncSimple1", nil, []byte("Hello"))
if err != nil {
t.Error(err)
return
}
if string(result) != "world" {
t.Error("Function not returned \"world\"")
return
}
if v, ok := header.ResponseHeaders["test"]; !ok {
t.Errorf("not set response header")
} else if v != "my test" {
t.Errorf("got \"my test\", but expect \"%s\"", v)
}
}