Files
kubevela/pkg/dsl/task/process_test.go
2021-01-18 15:52:22 +08:00

88 lines
1.7 KiB
Go

package task
import (
"encoding/json"
"fmt"
"net"
"net/http"
"net/http/httptest"
"testing"
"cuelang.org/go/cue"
cueJson "cuelang.org/go/pkg/encoding/json"
"github.com/bmizerany/assert"
)
const TaskTemplate = `
parameter: {
serviceURL: string
}
processing: {
output: {
token ?: string
}
http: {
method: *"GET" | string
url: parameter.serviceURL
request: {
body ?: bytes
header: {}
trailer: {}
}
}
}
patch: {
data: token: processing.output.token
}
output: {
data: processing.output.token
}
`
func TestProcess(t *testing.T) {
s := NewMock()
defer s.Close()
r := cue.Runtime{}
taskTemplate, err := r.Compile("", TaskTemplate)
if err != nil {
t.Fatal(err)
}
taskTemplate, _ = taskTemplate.Fill(map[string]interface{}{
"serviceURL": "http://127.0.0.1:8090/api/v1/token?val=test-token",
}, "parameter")
inst, err := Process(taskTemplate)
if err != nil {
t.Fatal(err)
}
output := inst.Lookup("output")
data, _ := cueJson.Marshal(output)
assert.Equal(t, "{\"data\":\"test-token\"}", data)
}
func NewMock() *httptest.Server {
ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
fmt.Printf("Expected 'GET' request, got '%s'", r.Method)
}
if r.URL.EscapedPath() != "/api/v1/token" {
fmt.Printf("Expected request to '/person', got '%s'", r.URL.EscapedPath())
}
r.ParseForm()
token := r.Form.Get("val")
tokenBytes, _ := json.Marshal(map[string]interface{}{"token": token})
w.WriteHeader(http.StatusOK)
w.Write(tokenBytes)
}))
l, _ := net.Listen("tcp", "127.0.0.1:8090")
ts.Listener.Close()
ts.Listener = l
ts.Start()
return ts
}