github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgeworkers/edgekv_initialize_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 TestInitializeEdgeKV(t *testing.T) { 15 tests := map[string]struct { 16 responseStatus int 17 responseBody string 18 expectedPath string 19 expectedResponse *EdgeKVInitializationStatus 20 withError error 21 }{ 22 "201 Created": { 23 responseStatus: http.StatusCreated, 24 responseBody: ` 25 { 26 "accountStatus": "INITIALIZED", 27 "cpcode": "123456", 28 "productionStatus": "INITIALIZED", 29 "stagingStatus": "INITIALIZED" 30 }`, 31 expectedPath: "/edgekv/v1/initialize", 32 expectedResponse: &EdgeKVInitializationStatus{ 33 AccountStatus: "INITIALIZED", 34 CPCode: "123456", 35 ProductionStatus: "INITIALIZED", 36 StagingStatus: "INITIALIZED", 37 }, 38 }, 39 "500 internal server error": { 40 responseStatus: http.StatusInternalServerError, 41 responseBody: ` 42 { 43 "type": "https://learn.akamai.com", 44 "title": "Internal Server Error", 45 "detail": "An internal error occurred.", 46 "instance": "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 47 "status": 500, 48 "errorCode": "EKV_0000", 49 "additionalDetail": { 50 "requestId": "db6e61d461c20395" 51 } 52 }`, 53 54 expectedPath: "/edgekv/v1/initialize", 55 withError: &Error{ 56 Type: "https://learn.akamai.com", 57 Title: "Internal Server Error", 58 Detail: "An internal error occurred.", 59 Instance: "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 60 Status: 500, 61 ErrorCode: "EKV_0000", 62 AdditionalDetail: Additional{ 63 RequestID: "db6e61d461c20395", 64 }, 65 }, 66 }, 67 "503 service unavailable error": { 68 responseStatus: http.StatusInternalServerError, 69 responseBody: ` 70 { 71 "type": "https://learn.akamai.com", 72 "title": "Service Unavailable Error", 73 "detail": "An internal error occurred.", 74 "instance": "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 75 "status": 503, 76 "errorCode": "EKV_0000", 77 "additionalDetail": { 78 "requestId": "db6e61d461c20395" 79 } 80 }`, 81 expectedPath: "/edgekv/v1/initialize", 82 withError: &Error{ 83 Type: "https://learn.akamai.com", 84 Title: "Service Unavailable Error", 85 Detail: "An internal error occurred.", 86 Instance: "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 87 Status: 503, 88 ErrorCode: "EKV_0000", 89 AdditionalDetail: Additional{ 90 RequestID: "db6e61d461c20395", 91 }, 92 }, 93 }, 94 } 95 96 for name, test := range tests { 97 t.Run(name, func(t *testing.T) { 98 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 99 assert.Equal(t, test.expectedPath, r.URL.String()) 100 assert.Equal(t, http.MethodPut, r.Method) 101 w.WriteHeader(test.responseStatus) 102 _, err := w.Write([]byte(test.responseBody)) 103 assert.NoError(t, err) 104 })) 105 client := mockAPIClient(t, mockServer) 106 result, err := client.InitializeEdgeKV(context.Background()) 107 if test.withError != nil { 108 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 109 return 110 } 111 require.NoError(t, err) 112 assert.Equal(t, test.expectedResponse, result) 113 }) 114 } 115 } 116 117 func TestGetEdgeKVInitializeStatus(t *testing.T) { 118 tests := map[string]struct { 119 responseStatus int 120 responseBody string 121 expectedPath string 122 expectedResponse *EdgeKVInitializationStatus 123 withError error 124 }{ 125 "200 OK": { 126 responseStatus: http.StatusOK, 127 responseBody: ` 128 { 129 "accountStatus": "INITIALIZED", 130 "cpcode": "123456", 131 "productionStatus": "INITIALIZED", 132 "stagingStatus": "INITIALIZED" 133 }`, 134 expectedPath: "/edgekv/v1/initialize", 135 expectedResponse: &EdgeKVInitializationStatus{ 136 AccountStatus: "INITIALIZED", 137 CPCode: "123456", 138 ProductionStatus: "INITIALIZED", 139 StagingStatus: "INITIALIZED", 140 }, 141 }, 142 "500 internal server error": { 143 responseStatus: http.StatusInternalServerError, 144 responseBody: ` 145 { 146 "type": "https://learn.akamai.com", 147 "title": "Internal Server Error", 148 "detail": "An internal error occurred.", 149 "instance": "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 150 "status": 500, 151 "errorCode": "EKV_0000", 152 "additionalDetail": { 153 "requestId": "db6e61d461c20395" 154 } 155 }`, 156 expectedPath: "/edgekv/v1/initialize", 157 withError: &Error{ 158 Type: "https://learn.akamai.com", 159 Title: "Internal Server Error", 160 Detail: "An internal error occurred.", 161 Instance: "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 162 Status: 500, 163 ErrorCode: "EKV_0000", 164 AdditionalDetail: Additional{ 165 RequestID: "db6e61d461c20395", 166 }, 167 }, 168 }, 169 "503 service unavailable error": { 170 responseStatus: http.StatusInternalServerError, 171 responseBody: ` 172 { 173 "type": "https://learn.akamai.com", 174 "title": "Service Unavailable Error", 175 "detail": "An internal error occurred.", 176 "instance": "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 177 "status": 503, 178 "errorCode": "EKV_0000", 179 "additionalDetail": { 180 "requestId": "db6e61d461c20395" 181 } 182 }`, 183 expectedPath: "/edgekv/v1/initialize", 184 withError: &Error{ 185 Type: "https://learn.akamai.com", 186 Title: "Service Unavailable Error", 187 Detail: "An internal error occurred.", 188 Instance: "/edgeKV/error-instances/1386a423-377c-4dba-b746-abe84738f5c5", 189 Status: 503, 190 ErrorCode: "EKV_0000", 191 AdditionalDetail: Additional{ 192 RequestID: "db6e61d461c20395", 193 }, 194 }, 195 }, 196 } 197 198 for name, test := range tests { 199 t.Run(name, func(t *testing.T) { 200 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 201 assert.Equal(t, test.expectedPath, r.URL.String()) 202 assert.Equal(t, http.MethodGet, r.Method) 203 w.WriteHeader(test.responseStatus) 204 _, err := w.Write([]byte(test.responseBody)) 205 assert.NoError(t, err) 206 })) 207 client := mockAPIClient(t, mockServer) 208 result, err := client.GetEdgeKVInitializationStatus(context.Background()) 209 if test.withError != nil { 210 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 211 return 212 } 213 require.NoError(t, err) 214 assert.Equal(t, test.expectedResponse, result) 215 }) 216 } 217 }