@@ -3,7 +3,9 @@ package main
33import (
44 "context"
55 "testing"
6+ "time"
67
8+ "github.com/crossplane/function-auto-ready/input/v1beta1"
79 "github.com/google/go-cmp/cmp"
810 "github.com/google/go-cmp/cmp/cmpopts"
911 "google.golang.org/protobuf/testing/protocmp"
@@ -301,7 +303,7 @@ func TestRunFunction(t *testing.T) {
301303
302304 for name , tc := range cases {
303305 t .Run (name , func (t * testing.T ) {
304- f := & Function {log : logging .NewNopLogger (), TTL : response .DefaultTTL }
306+ f := & Function {log : logging .NewNopLogger (), ttl : response .DefaultTTL }
305307 rsp , err := f .RunFunction (tc .args .ctx , tc .args .req )
306308
307309 if diff := cmp .Diff (tc .want .rsp , rsp , protocmp .Transform ()); diff != "" {
@@ -314,3 +316,63 @@ func TestRunFunction(t *testing.T) {
314316 })
315317 }
316318}
319+
320+ func TestRunFunctionCacheTTL (t * testing.T ) {
321+ xr := `{"apiVersion":"example.org/v1","kind":"XR","metadata":{"name":"cool-xr"},"spec":{"count":1}}`
322+
323+ cases := map [string ]struct {
324+ reason string
325+ input * v1beta1.Input
326+ want * fnv1.RunFunctionResponse
327+ }{
328+ "InputTTL" : {
329+ reason : "Set the response ttl value from the input specified" ,
330+ input : & v1beta1.Input {TTL : "5m" },
331+ want : & fnv1.RunFunctionResponse {
332+ Meta : & fnv1.ResponseMeta {Ttl : durationpb .New (5 * time .Minute )},
333+ Desired : & fnv1.State {
334+ Composite : & fnv1.Resource {
335+ Resource : resource .MustStructJSON (xr ),
336+ },
337+ Resources : map [string ]* fnv1.Resource {
338+ "second" : {
339+ Resource : resource .MustStructJSON (xr ),
340+ },
341+ },
342+ },
343+ },
344+ },
345+ }
346+
347+ for name , tc := range cases {
348+ t .Run (name , func (t * testing.T ) {
349+ f := & Function {log : logging .NewNopLogger ()}
350+ req := & fnv1.RunFunctionRequest {
351+ Input : resource .MustStructObject (tc .input ),
352+ Observed : & fnv1.State {
353+ Composite : & fnv1.Resource {
354+ Resource : resource .MustStructJSON (xr ),
355+ },
356+ Resources : map [string ]* fnv1.Resource {},
357+ },
358+ Desired : & fnv1.State {
359+ Composite : & fnv1.Resource {
360+ Resource : resource .MustStructJSON (xr ),
361+ },
362+ Resources : map [string ]* fnv1.Resource {
363+ "second" : {
364+ Resource : resource .MustStructJSON (xr ),
365+ },
366+ },
367+ },
368+ }
369+ rsp , err := f .RunFunction (context .Background (), req )
370+ if diff := cmp .Diff (tc .want , rsp , protocmp .Transform ()); diff != "" {
371+ t .Errorf ("%s\n f.RunFunction(...): -want rsp, +got rsp:\n %s" , tc .reason , diff )
372+ }
373+ if diff := cmp .Diff (nil , err , cmpopts .EquateErrors ()); diff != "" {
374+ t .Errorf ("%s\n f.RunFunction(...): -want err, +got err:\n %s" , tc .reason , diff )
375+ }
376+ })
377+ }
378+ }
0 commit comments