github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgeworkers/resource_tier_test.go (about) 1 package edgeworkers 2 3 import ( 4 "context" 5 "errors" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestListResourceTiers(t *testing.T) { 15 tests := map[string]struct { 16 params ListResourceTiersRequest 17 responseStatus int 18 responseBody string 19 expectedPath string 20 expectedResponse *ListResourceTiersResponse 21 withError error 22 }{ 23 "200 OK": { 24 params: ListResourceTiersRequest{ContractID: "123"}, 25 responseStatus: http.StatusOK, 26 responseBody: ` 27 { 28 "resourceTiers": [ 29 { 30 "resourceTierId": 100, 31 "resourceTierName": "Basic Compute", 32 "edgeWorkerLimits": [ 33 { 34 "limitName": "Maximum CPU time during initialization", 35 "limitValue": 30, 36 "limitUnit": "MILLISECOND" 37 }, 38 { 39 "limitName": "Maximum response size for HTTP sub-requests during the responseProvider event handler", 40 "limitValue": 1048576, 41 "limitUnit": "BYTE" 42 } 43 ] 44 }, 45 { 46 "resourceTierId": 200, 47 "resourceTierName": "Dynamic Compute", 48 "edgeWorkerLimits": [ 49 { 50 "limitName": "Maximum number of HTTP sub-requests allowed in parallel for responseProvider", 51 "limitValue": 5, 52 "limitUnit": "COUNT" 53 }, 54 { 55 "limitName": "Maximum wall time for HTTP sub-requests during the execution of the responseProvider event handler", 56 "limitValue": 1000, 57 "limitUnit": "MILLISECOND" 58 } 59 ] 60 } 61 ] 62 }`, 63 expectedPath: "/edgeworkers/v1/resource-tiers?contractId=123", 64 expectedResponse: &ListResourceTiersResponse{[]ResourceTier{ 65 { 66 ID: 100, 67 Name: "Basic Compute", 68 EdgeWorkerLimits: []EdgeWorkerLimit{ 69 { 70 LimitName: "Maximum CPU time during initialization", 71 LimitValue: 30, 72 LimitUnit: "MILLISECOND", 73 }, 74 { 75 LimitName: "Maximum response size for HTTP sub-requests during the responseProvider event handler", 76 LimitValue: 1048576, 77 LimitUnit: "BYTE", 78 }, 79 }, 80 }, 81 { 82 ID: 200, 83 Name: "Dynamic Compute", 84 EdgeWorkerLimits: []EdgeWorkerLimit{ 85 { 86 LimitName: "Maximum number of HTTP sub-requests allowed in parallel for responseProvider", 87 LimitValue: 5, 88 LimitUnit: "COUNT", 89 }, 90 { 91 LimitName: "Maximum wall time for HTTP sub-requests during the execution of the responseProvider event handler", 92 LimitValue: 1000, 93 LimitUnit: "MILLISECOND", 94 }, 95 }, 96 }, 97 }}, 98 }, 99 "500 internal server error": { 100 params: ListResourceTiersRequest{ContractID: "123"}, 101 responseStatus: http.StatusInternalServerError, 102 responseBody: ` 103 { 104 "type": "/edgeworkers/error-types/edgeworkers-server-error", 105 "title": "An unexpected error has occurred.", 106 "detail": "Error processing request", 107 "instance": "/edgeworkers/error-instances/abc", 108 "status": 500, 109 "errorCode": "EW4303" 110 }`, 111 expectedPath: "/edgeworkers/v1/resource-tiers?contractId=123", 112 withError: &Error{ 113 Type: "/edgeworkers/error-types/edgeworkers-server-error", 114 Title: "An unexpected error has occurred.", 115 Detail: "Error processing request", 116 Instance: "/edgeworkers/error-instances/abc", 117 Status: 500, 118 ErrorCode: "EW4303", 119 }, 120 }, 121 "missing contract ID": { 122 params: ListResourceTiersRequest{}, 123 withError: ErrStructValidation, 124 }, 125 } 126 127 for name, test := range tests { 128 t.Run(name, func(t *testing.T) { 129 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 130 assert.Equal(t, test.expectedPath, r.URL.String()) 131 assert.Equal(t, http.MethodGet, r.Method) 132 w.WriteHeader(test.responseStatus) 133 _, err := w.Write([]byte(test.responseBody)) 134 assert.NoError(t, err) 135 })) 136 client := mockAPIClient(t, mockServer) 137 result, err := client.ListResourceTiers(context.Background(), test.params) 138 if test.withError != nil { 139 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 140 return 141 } 142 require.NoError(t, err) 143 assert.Equal(t, test.expectedResponse, result) 144 }) 145 } 146 } 147 148 func TestGetResourceTier(t *testing.T) { 149 tests := map[string]struct { 150 params GetResourceTierRequest 151 responseStatus int 152 responseBody string 153 expectedPath string 154 expectedResponse *ResourceTier 155 withError error 156 }{ 157 "200 OK": { 158 params: GetResourceTierRequest{EdgeWorkerID: 123}, 159 responseStatus: http.StatusOK, 160 responseBody: ` 161 { 162 163 "resourceTierId": 100, 164 "resourceTierName": "Basic Compute", 165 "edgeWorkerLimits": [ 166 { 167 "limitName": "Maximum CPU time during initialization", 168 "limitValue": 30, 169 "limitUnit": "MILLISECOND" 170 }, 171 { 172 "limitName": "Maximum response size for HTTP sub-requests during the responseProvider event handler", 173 "limitValue": 1048576, 174 "limitUnit": "BYTE" 175 } 176 ] 177 } 178 `, 179 expectedPath: "/edgeworkers/v1/ids/123/resource-tier", 180 expectedResponse: &ResourceTier{ 181 ID: 100, 182 Name: "Basic Compute", 183 EdgeWorkerLimits: []EdgeWorkerLimit{ 184 { 185 LimitName: "Maximum CPU time during initialization", 186 LimitValue: 30, 187 LimitUnit: "MILLISECOND", 188 }, 189 { 190 LimitName: "Maximum response size for HTTP sub-requests during the responseProvider event handler", 191 LimitValue: 1048576, 192 LimitUnit: "BYTE", 193 }, 194 }, 195 }, 196 }, 197 "500 internal server error": { 198 params: GetResourceTierRequest{EdgeWorkerID: 123}, 199 responseStatus: http.StatusInternalServerError, 200 responseBody: ` 201 { 202 "type": "/edgeworkers/error-types/edgeworkers-server-error", 203 "title": "An unexpected error has occurred.", 204 "detail": "Error processing request", 205 "instance": "/edgeworkers/error-instances/abc", 206 "status": 500, 207 "errorCode": "EW4303" 208 }`, 209 expectedPath: "/edgeworkers/v1/ids/123/resource-tier", 210 withError: &Error{ 211 Type: "/edgeworkers/error-types/edgeworkers-server-error", 212 Title: "An unexpected error has occurred.", 213 Detail: "Error processing request", 214 Instance: "/edgeworkers/error-instances/abc", 215 Status: 500, 216 ErrorCode: "EW4303", 217 }, 218 }, 219 "missing edgeworker ID": { 220 params: GetResourceTierRequest{}, 221 withError: ErrStructValidation, 222 }, 223 } 224 225 for name, test := range tests { 226 t.Run(name, func(t *testing.T) { 227 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 228 assert.Equal(t, test.expectedPath, r.URL.String()) 229 assert.Equal(t, http.MethodGet, r.Method) 230 w.WriteHeader(test.responseStatus) 231 _, err := w.Write([]byte(test.responseBody)) 232 assert.NoError(t, err) 233 })) 234 client := mockAPIClient(t, mockServer) 235 result, err := client.GetResourceTier(context.Background(), test.params) 236 if test.withError != nil { 237 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 238 return 239 } 240 require.NoError(t, err) 241 assert.Equal(t, test.expectedResponse, result) 242 }) 243 } 244 }