github.com/argoproj/argo-events@v1.9.1/sensors/triggers/apache-openwhisk/apache-openwhisk_test.go (about)

     1  /*
     2  Copyright 2020 BlackRock, Inc.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8  	http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  package apache_openwhisk
    17  
    18  import (
    19  	"context"
    20  	"net/http"
    21  	"testing"
    22  
    23  	cloudevents "github.com/cloudevents/sdk-go/v2"
    24  	"github.com/stretchr/testify/assert"
    25  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    26  
    27  	"github.com/argoproj/argo-events/common/logging"
    28  	"github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1"
    29  )
    30  
    31  var sensorObj = &v1alpha1.Sensor{
    32  	ObjectMeta: metav1.ObjectMeta{
    33  		Name:      "fake-sensor",
    34  		Namespace: "fake",
    35  	},
    36  	Spec: v1alpha1.SensorSpec{
    37  		Triggers: []v1alpha1.Trigger{
    38  			{
    39  				Template: &v1alpha1.TriggerTemplate{
    40  					Name: "fake-trigger",
    41  					OpenWhisk: &v1alpha1.OpenWhiskTrigger{
    42  						Host:       "fake.com",
    43  						ActionName: "hello",
    44  					},
    45  				},
    46  			},
    47  		},
    48  	},
    49  }
    50  
    51  func getFakeTriggerImpl() *TriggerImpl {
    52  	return &TriggerImpl{
    53  		OpenWhiskClient: nil,
    54  		Sensor:          sensorObj.DeepCopy(),
    55  		Trigger:         sensorObj.Spec.Triggers[0].DeepCopy(),
    56  		Logger:          logging.NewArgoEventsLogger(),
    57  	}
    58  }
    59  
    60  func TestTriggerImpl_FetchResource(t *testing.T) {
    61  	trigger := getFakeTriggerImpl()
    62  	obj, err := trigger.FetchResource(context.TODO())
    63  	assert.Nil(t, err)
    64  	assert.NotNil(t, obj)
    65  	trigger1, ok := obj.(*v1alpha1.OpenWhiskTrigger)
    66  	assert.Equal(t, true, ok)
    67  	assert.Equal(t, trigger.Trigger.Template.OpenWhisk.Host, trigger1.Host)
    68  }
    69  
    70  func TestTriggerImpl_ApplyResourceParameters(t *testing.T) {
    71  	trigger := getFakeTriggerImpl()
    72  
    73  	testEvents := map[string]*v1alpha1.Event{
    74  		"fake-dependency": {
    75  			Context: &v1alpha1.EventContext{
    76  				ID:              "1",
    77  				Type:            "webhook",
    78  				Source:          "webhook-gateway",
    79  				DataContentType: "application/json",
    80  				SpecVersion:     cloudevents.VersionV1,
    81  				Subject:         "example-1",
    82  			},
    83  			Data: []byte(`{"host": "another-fake.com", "actionName": "world"}`),
    84  		},
    85  	}
    86  
    87  	defaultValue := "http://default.com"
    88  
    89  	trigger.Trigger.Template.OpenWhisk.Parameters = []v1alpha1.TriggerParameter{
    90  		{
    91  			Src: &v1alpha1.TriggerParameterSource{
    92  				DependencyName: "fake-dependency",
    93  				DataKey:        "host",
    94  				Value:          &defaultValue,
    95  			},
    96  			Dest: "host",
    97  		},
    98  		{
    99  			Src: &v1alpha1.TriggerParameterSource{
   100  				DependencyName: "fake-dependency",
   101  				DataKey:        "actionName",
   102  				Value:          &defaultValue,
   103  			},
   104  			Dest: "actionName",
   105  		},
   106  	}
   107  
   108  	resource, err := trigger.ApplyResourceParameters(testEvents, trigger.Trigger.Template.OpenWhisk)
   109  	assert.Nil(t, err)
   110  	assert.NotNil(t, resource)
   111  
   112  	updatedTrigger, ok := resource.(*v1alpha1.OpenWhiskTrigger)
   113  	assert.Nil(t, err)
   114  	assert.Equal(t, true, ok)
   115  	assert.Equal(t, "another-fake.com", updatedTrigger.Host)
   116  }
   117  
   118  func TestTriggerImpl_ApplyPolicy(t *testing.T) {
   119  	trigger := getFakeTriggerImpl()
   120  	trigger.Trigger.Policy = &v1alpha1.TriggerPolicy{
   121  		Status: &v1alpha1.StatusPolicy{Allow: []int32{200, 300}},
   122  	}
   123  	response := &http.Response{StatusCode: 200}
   124  	err := trigger.ApplyPolicy(context.TODO(), response)
   125  	assert.Nil(t, err)
   126  
   127  	trigger.Trigger.Policy = &v1alpha1.TriggerPolicy{
   128  		Status: &v1alpha1.StatusPolicy{Allow: []int32{300}},
   129  	}
   130  	err = trigger.ApplyPolicy(context.TODO(), response)
   131  	assert.NotNil(t, err)
   132  }