mirror of https://github.com/knative/func.git
				
				
				
			Adding sample function in go template (#840)
* adding sample function in go template * adding simple echo, using the correct signature * fixing readme
This commit is contained in:
		
							parent
							
								
									bea34d21a0
								
							
						
					
					
						commit
						b97fe9c4ec
					
				|  | @ -7,7 +7,7 @@ | |||
| /coverage.out | ||||
| /bin | ||||
| /target | ||||
| 
 | ||||
| .DS_Store | ||||
| node_modules | ||||
| __pycache__ | ||||
| /coverage.out | ||||
|  |  | |||
|  | @ -9,13 +9,14 @@ Develop new features by adding a test to [`handle_test.go`](handle_test.go) for | |||
| Update the running analog of the function using the `func` CLI or client library, and it can be invoked using a manually-created CloudEvent: | ||||
| 
 | ||||
| ```console | ||||
| curl -X POST -d '{"hello": "world"}' \ | ||||
| curl -v -X POST -d 'hello' \ | ||||
|   -H'Content-type: application/json' \ | ||||
|   -H'Ce-id: 1' \ | ||||
|   -H'Ce-source: cloud-event-example' \ | ||||
|   -H'Ce-type: dev.knative.example' \ | ||||
|   -H'Ce-subject: Echo content' \ | ||||
|   -H'Ce-type: MyEvent' \ | ||||
|   -H'Ce-specversion: 1.0' \ | ||||
|   http://myFunction.example.com/ | ||||
|   http://localhost:8080/ | ||||
| ``` | ||||
| 
 | ||||
| For more, see [the complete documentation]('https://github.com/knative-sandbox/kn-plugin-func/tree/main/docs') | ||||
|  |  | |||
|  | @ -2,13 +2,16 @@ package function | |||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	event "github.com/cloudevents/sdk-go/v2" | ||||
| 	"github.com/cloudevents/sdk-go/v2/event" | ||||
| 
 | ||||
| 	cloudevents "github.com/cloudevents/sdk-go/v2" | ||||
| ) | ||||
| 
 | ||||
| // Handle an event.
 | ||||
| func Handle(ctx context.Context, event event.Event) error { | ||||
| func Handle(ctx context.Context, event cloudevents.Event) (*event.Event, error) { | ||||
| 
 | ||||
| 	/* | ||||
| 	 * YOUR CODE HERE | ||||
|  | @ -16,10 +19,23 @@ func Handle(ctx context.Context, event event.Event) error { | |||
| 	 * Try running `go test`.  Add more test as you code in `handle_test.go`. | ||||
| 	 */ | ||||
| 
 | ||||
| 	// Example implementation:
 | ||||
| 	fmt.Printf("%v\n", event) // print the received event to standard output
 | ||||
| 	fmt.Printf("Incoming Event: %v\n", event) // print the received event to standard output
 | ||||
| 	payload := "" | ||||
| 	err := json.Unmarshal(event.Data(), &payload) | ||||
| 	if err != nil { | ||||
| 		fmt.Printf("%v\n", err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| 	payload = "echo " + payload | ||||
| 	outputEvent := cloudevents.NewEvent() | ||||
| 	outputEvent.SetSource("http://example.com/echo") | ||||
| 	outputEvent.SetType("Echo") | ||||
| 	outputEvent.SetData(cloudevents.ApplicationJSON, &payload) | ||||
| 
 | ||||
| 	fmt.Printf("Outgoing Event: %v\n", outputEvent) | ||||
| 
 | ||||
| 	return &outputEvent, nil | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|  |  | |||
|  | @ -2,8 +2,11 @@ package function | |||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	cloudevents "github.com/cloudevents/sdk-go/v2" | ||||
| 
 | ||||
| 	"github.com/cloudevents/sdk-go/v2/event" | ||||
| ) | ||||
| 
 | ||||
|  | @ -12,11 +15,30 @@ func TestHandle(t *testing.T) { | |||
| 	// A minimal, but valid, event.
 | ||||
| 	event := event.New() | ||||
| 	event.SetID("TEST-EVENT-01") | ||||
| 	event.SetType("com.example.event.test") | ||||
| 	event.SetType("MyEvent") | ||||
| 	event.SetSource("http://localhost:8080/") | ||||
| 
 | ||||
| 	event.SetSubject("Echo") | ||||
| 	input := "hello" | ||||
| 	event.SetData(cloudevents.ApplicationJSON, &input) | ||||
| 	// Invoke the defined handler.
 | ||||
| 	if err := Handle(context.Background(), event); err != nil { | ||||
| 	ce, err := Handle(context.Background(), event) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if ce == nil { | ||||
| 		t.Errorf("The output CloudEvent cannot be nil") | ||||
| 	} | ||||
| 	if ce.Type() != "Echo" { | ||||
| 		t.Errorf("Wrong CloudEvent Type received: %v , expected Echo", ce.Type()) | ||||
| 	} | ||||
| 	output := "" | ||||
| 	err = json.Unmarshal(ce.Data(), &output) | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	if output != "echo "+input { | ||||
| 		t.Errorf("The expected output should be: 'echo hello and it was: %v", output) | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue