163 lines
3.8 KiB
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)
|
|
}
|
|
}
|