yt-function-sdk-go/ytfunction_test.go

163 lines
3.8 KiB
Go

package ytfunction
import (
"fmt"
"os"
"testing"
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network"
)
var serve *Serve
func setup() {
/*host, exists := os.LookupEnv("NATS_HOST")
if !exists {
host = "localhost"
}*/
addr, exists := os.LookupEnv("NATS_ADDR")
if !exists {
addr = "nats://localhost:4222"
}
/*port, exists := os.LookupEnv("NATS_PORT")
if !exists {
port = "4222"
}*/
serve = NewServe(addr, "", "test", nil, nil, nil)
if serve == nil {
panic(fmt.Errorf(`serve is not created`))
}
serve.AddAccept("*")
err := serve.Run()
if err != nil {
panic(err)
}
}
func shutdown() {
serve.Shutdown()
}
func TestMain(m *testing.M) {
setup()
code := m.Run()
shutdown()
os.Exit(code)
}
func TestRegisterFunction(t *testing.T) {
err := serve.RegisterFunction("testFunc", func(header *network.Header, paylod []byte) (result []byte, err error) {
return []byte("Hello world"), nil
})
if err != nil {
t.Error("Has error: ", err)
} else if !serve.HasFunction("testFunc") {
t.Error(`Function "testFunc" not found`)
}
}
func TestCallFunctionAsync(t *testing.T) {
err := serve.RegisterFunction("testFuncSimpleAsync", 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
}
type ChanRes struct {
res []byte
header *network.Header
err error
}
chanRes := make(chan ChanRes)
serve.CallAsync("default.test.testFuncSimpleAsync", nil, []byte("Hello"), func(err error, header *network.Header, result []byte) {
chanRes <- ChanRes{
res: result,
header: header,
err: err,
}
})
res := <-chanRes
if res.err != nil {
t.Error(err)
return
}
if string(res.res) != "world" {
t.Error("Function not returned \"world\"")
return
}
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)
}
}
func TestCallFunction(t *testing.T) {
var err error
err = serve.RegisterFunction("testFuncSimple", 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.testFuncSimple", 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)
}
}
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)
}
}