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  }