Openstatus www.openstatus.dev

๐Ÿ› private location (#1477)

authored by

Thibault Le Ouay and committed by
GitHub
840df35f df267293

+150 -3
+55 -3
apps/checker/pkg/job/http_job.go
··· 15 15 "github.com/openstatushq/openstatus/apps/checker/request" 16 16 ) 17 17 18 + func ProtoNumberAssertionToComparator(assertion v1.NumberComparator) (request.NumberComparator, error) { 19 + switch assertion { 20 + case v1.NumberComparator_NUMBER_COMPARATOR_EQUAL: 21 + return request.NumberEquals, nil 22 + case v1.NumberComparator_NUMBER_COMPARATOR_NOT_EQUAL: 23 + return request.NumberNotEquals, nil 24 + case v1.NumberComparator_NUMBER_COMPARATOR_GREATER_THAN: 25 + return request.NumberGreaterThan, nil 26 + case v1.NumberComparator_NUMBER_COMPARATOR_GREATER_THAN_OR_EQUAL: 27 + return request.NumberGreaterThanEqual, nil 28 + case v1.NumberComparator_NUMBER_COMPARATOR_LESS_THAN: 29 + return request.NumberLowerThan, nil 30 + case v1.NumberComparator_NUMBER_COMPARATOR_LESS_THAN_OR_EQUAL: 31 + return request.NumberLowerThanEqual, nil 32 + default: 33 + 34 + } 35 + return "", fmt.Errorf("unknown comparator type: %v", assertion) 36 + } 37 + 38 + func ProtoStringAssertionToComparator(assertion v1.StringComparator) (request.StringComparator, error) { 39 + switch assertion { 40 + case v1.StringComparator_STRING_COMPARATOR_CONTAINS: 41 + return request.StringContains, nil 42 + case v1.StringComparator_STRING_COMPARATOR_NOT_CONTAINS: 43 + return request.StringNotContains, nil 44 + case v1.StringComparator_STRING_COMPARATOR_EQUAL: 45 + return request.StringEquals, nil 46 + case v1.StringComparator_STRING_COMPARATOR_NOT_EQUAL: 47 + return request.StringNotEquals, nil 48 + case v1.StringComparator_STRING_COMPARATOR_EMPTY: 49 + return request.StringEmpty, nil 50 + case v1.StringComparator_STRING_COMPARATOR_NOT_EMPTY: 51 + return request.StringNotEmpty, nil 52 + } 53 + return "", fmt.Errorf("unknown comparator type: %v", assertion) 54 + } 55 + 18 56 func (jr jobRunner) HTTPJob(ctx context.Context, monitor *v1.HTTPMonitor) (*HttpPrivateRegionData, error) { 19 57 20 58 retry := monitor.Retry ··· 103 141 return nil, fmt.Errorf("error while parsing headers %s: %w", req.URL, err) 104 142 } 105 143 for _, assertion := range monitor.HeaderAssertions { 144 + 145 + a, err := ProtoStringAssertionToComparator(assertion.Comparator) 146 + if err != nil { 147 + return nil, fmt.Errorf("error while parsing header assertion comparator: %w", err) 148 + } 106 149 assert := assertions.HeaderTarget{ 107 - Comparator: request.StringComparator(assertion.Comparator.String()), 150 + Comparator: a, 108 151 Target: assertion.Target, 109 152 Key: assertion.Key, 110 153 } ··· 114 157 115 158 if len(monitor.StatusCodeAssertions) > 0 { 116 159 for _, assertion := range monitor.StatusCodeAssertions { 160 + a, err := ProtoNumberAssertionToComparator(assertion.Comparator) 161 + if err != nil { 162 + return nil, fmt.Errorf("error while parsing header assertion comparator: %w", err) 163 + } 164 + 117 165 assert := assertions.StatusTarget{ 118 - Comparator: request.NumberComparator(assertion.Comparator.String()), 166 + Comparator: a, 119 167 Target: assertion.Target, 120 168 } 121 169 isSuccessful = isSuccessful && assert.StatusEvaluate(int64(res.Status)) ··· 123 171 } 124 172 if len(monitor.BodyAssertions) > 0 { 125 173 for _, assertion := range monitor.BodyAssertions { 174 + a, err := ProtoStringAssertionToComparator(assertion.Comparator) 175 + if err != nil { 176 + return nil, fmt.Errorf("error while parsing header assertion comparator: %w", err) 177 + } 126 178 assert := assertions.StringTargetType{ 127 - Comparator: request.StringComparator(assertion.Comparator.String()), 179 + Comparator: a, 128 180 Target: assertion.Target, 129 181 } 130 182 isSuccessful = isSuccessful && assert.StringEvaluate(res.Body)
+95
apps/checker/pkg/job/http_job_test.go
··· 6 6 7 7 "github.com/openstatushq/openstatus/apps/checker/pkg/job" 8 8 v1 "github.com/openstatushq/openstatus/apps/checker/proto/private_location/v1" 9 + "github.com/openstatushq/openstatus/apps/checker/request" 10 + "github.com/stretchr/testify/assert" 9 11 ) 10 12 11 13 // Save original checker.Http for restoration ··· 50 52 t.Errorf("expected data to be nil on error, got %+v", data) 51 53 } 52 54 } 55 + 56 + func TestProtoStringAssertionToComparator(t *testing.T) { 57 + tests := []struct { 58 + name string 59 + input v1.StringComparator 60 + want request.StringComparator 61 + expectErr bool 62 + }{ 63 + { 64 + name: "Contains", 65 + input: v1.StringComparator_STRING_COMPARATOR_CONTAINS, 66 + want: request.StringContains, 67 + expectErr: false, 68 + }, 69 + { 70 + name: "NotContains", 71 + input: v1.StringComparator_STRING_COMPARATOR_NOT_CONTAINS, 72 + want: request.StringNotContains, 73 + expectErr: false, 74 + }, 75 + { 76 + name: "Equals", 77 + input: v1.StringComparator_STRING_COMPARATOR_EQUAL, 78 + want: request.StringEquals, 79 + expectErr: false, 80 + }, 81 + { 82 + name: "NotEquals", 83 + input: v1.StringComparator_STRING_COMPARATOR_NOT_EQUAL, 84 + want: request.StringNotEquals, 85 + expectErr: false, 86 + }, 87 + { 88 + name: "Empty", 89 + input: v1.StringComparator_STRING_COMPARATOR_EMPTY, 90 + want: request.StringEmpty, 91 + expectErr: false, 92 + }, 93 + { 94 + name: "NotEmpty", 95 + input: v1.StringComparator_STRING_COMPARATOR_NOT_EMPTY, 96 + want: request.StringNotEmpty, 97 + expectErr: false, 98 + }, 99 + { 100 + name: "Unknown", 101 + input: v1.StringComparator(999), 102 + want: "", 103 + expectErr: true, 104 + }, 105 + } 106 + 107 + for _, tt := range tests { 108 + t.Run(tt.name, func(t *testing.T) { 109 + got, err := job.ProtoStringAssertionToComparator(tt.input) 110 + if tt.expectErr { 111 + assert.Error(t, err) 112 + } else { 113 + assert.NoError(t, err) 114 + assert.Equal(t, tt.want, got) 115 + } 116 + }) 117 + } 118 + } 119 + 120 + func TestProtoNumberAssertionToComparator(t *testing.T) { 121 + tests := []struct { 122 + name string 123 + input v1.NumberComparator 124 + want request.NumberComparator 125 + expectErr bool 126 + }{ 127 + {"Equal", v1.NumberComparator_NUMBER_COMPARATOR_EQUAL, request.NumberEquals, false}, 128 + {"NotEqual", v1.NumberComparator_NUMBER_COMPARATOR_NOT_EQUAL, request.NumberNotEquals, false}, 129 + {"GreaterThan", v1.NumberComparator_NUMBER_COMPARATOR_GREATER_THAN, request.NumberGreaterThan, false}, 130 + {"GreaterThanOrEqual", v1.NumberComparator_NUMBER_COMPARATOR_GREATER_THAN_OR_EQUAL, request.NumberGreaterThanEqual, false}, 131 + {"LessThan", v1.NumberComparator_NUMBER_COMPARATOR_LESS_THAN, request.NumberLowerThan, false}, 132 + {"LessThanOrEqual", v1.NumberComparator_NUMBER_COMPARATOR_LESS_THAN_OR_EQUAL, request.NumberLowerThanEqual, false}, 133 + {"Unknown", v1.NumberComparator(999), "", true}, 134 + } 135 + 136 + for _, tt := range tests { 137 + t.Run(tt.name, func(t *testing.T) { 138 + got, err := job.ProtoNumberAssertionToComparator(tt.input) 139 + if tt.expectErr { 140 + assert.Error(t, err) 141 + } else { 142 + assert.NoError(t, err) 143 + assert.Equal(t, tt.want, got) 144 + } 145 + }) 146 + } 147 + }