github.com/argoproj/argo-events@v1.9.1/sensors/triggers/http/http_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 http 17 18 import ( 19 "context" 20 "net/http" 21 "testing" 22 23 "github.com/argoproj/argo-events/common/logging" 24 "github.com/argoproj/argo-events/pkg/apis/common" 25 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1" 26 cloudevents "github.com/cloudevents/sdk-go/v2" 27 "github.com/stretchr/testify/assert" 28 corev1 "k8s.io/api/core/v1" 29 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 30 ) 31 32 var sensorObj = &v1alpha1.Sensor{ 33 ObjectMeta: metav1.ObjectMeta{ 34 Name: "fake-sensor", 35 Namespace: "fake", 36 }, 37 Spec: v1alpha1.SensorSpec{ 38 Triggers: []v1alpha1.Trigger{ 39 { 40 Template: &v1alpha1.TriggerTemplate{ 41 Name: "fake-trigger", 42 HTTP: &v1alpha1.HTTPTrigger{ 43 URL: "http://fake.com:12000", 44 Method: "POST", 45 Timeout: 10, 46 }, 47 }, 48 }, 49 }, 50 }, 51 } 52 53 func getFakeHTTPTrigger() *HTTPTrigger { 54 return &HTTPTrigger{ 55 Client: nil, 56 Sensor: sensorObj.DeepCopy(), 57 Trigger: sensorObj.Spec.Triggers[0].DeepCopy(), 58 Logger: logging.NewArgoEventsLogger(), 59 } 60 } 61 62 func TestHTTPTrigger_FetchResource(t *testing.T) { 63 trigger := getFakeHTTPTrigger() 64 obj, err := trigger.FetchResource(context.TODO()) 65 assert.Nil(t, err) 66 assert.NotNil(t, obj) 67 trigger1, ok := obj.(*v1alpha1.HTTPTrigger) 68 assert.Equal(t, true, ok) 69 assert.Equal(t, trigger.Trigger.Template.HTTP.URL, trigger1.URL) 70 } 71 72 func TestHTTPTrigger_ApplyResourceParameters(t *testing.T) { 73 trigger := getFakeHTTPTrigger() 74 75 testEvents := map[string]*v1alpha1.Event{ 76 "fake-dependency": { 77 Context: &v1alpha1.EventContext{ 78 ID: "1", 79 Type: "webhook", 80 Source: "webhook-gateway", 81 DataContentType: "application/json", 82 SpecVersion: cloudevents.VersionV1, 83 Subject: "example-1", 84 }, 85 Data: []byte(`{"url": "http://another-fake.com", "method": "GET"}`), 86 }, 87 } 88 89 defaultValue := "http://default.com" 90 secureHeader := &common.SecureHeader{Name: "test", ValueFrom: &common.ValueFromSource{ 91 SecretKeyRef: &corev1.SecretKeySelector{ 92 LocalObjectReference: corev1.LocalObjectReference{ 93 Name: "tokens", 94 }, 95 Key: "serviceToken"}}, 96 } 97 98 secureHeaders := []*common.SecureHeader{} 99 secureHeaders = append(secureHeaders, secureHeader) 100 trigger.Trigger.Template.HTTP.SecureHeaders = secureHeaders 101 trigger.Trigger.Template.HTTP.Parameters = []v1alpha1.TriggerParameter{ 102 { 103 Src: &v1alpha1.TriggerParameterSource{ 104 DependencyName: "fake-dependency", 105 DataKey: "url", 106 Value: &defaultValue, 107 }, 108 Dest: "serverURL", 109 }, 110 { 111 Src: &v1alpha1.TriggerParameterSource{ 112 DependencyName: "fake-dependency", 113 DataKey: "method", 114 Value: &defaultValue, 115 }, 116 Dest: "method", 117 }, 118 } 119 120 assert.Equal(t, http.MethodPost, trigger.Trigger.Template.HTTP.Method) 121 122 resource, err := trigger.ApplyResourceParameters(testEvents, trigger.Trigger.Template.HTTP) 123 assert.Nil(t, err) 124 assert.NotNil(t, resource) 125 126 updatedTrigger, ok := resource.(*v1alpha1.HTTPTrigger) 127 assert.Equal(t, "serviceToken", updatedTrigger.SecureHeaders[0].ValueFrom.SecretKeyRef.Key) 128 assert.Nil(t, err) 129 assert.Equal(t, true, ok) 130 assert.Equal(t, "http://fake.com:12000", updatedTrigger.URL) 131 assert.Equal(t, http.MethodGet, updatedTrigger.Method) 132 } 133 134 func TestHTTPTrigger_ApplyPolicy(t *testing.T) { 135 trigger := getFakeHTTPTrigger() 136 trigger.Trigger.Policy = &v1alpha1.TriggerPolicy{ 137 Status: &v1alpha1.StatusPolicy{Allow: []int32{200, 300}}, 138 } 139 response := &http.Response{StatusCode: 200} 140 err := trigger.ApplyPolicy(context.TODO(), response) 141 assert.Nil(t, err) 142 143 trigger.Trigger.Policy = &v1alpha1.TriggerPolicy{ 144 Status: &v1alpha1.StatusPolicy{Allow: []int32{300}}, 145 } 146 err = trigger.ApplyPolicy(context.TODO(), response) 147 assert.NotNil(t, err) 148 }