Skip to content

Commit 0a626bf

Browse files
authored
feat(api): validate required app config items (#2472)
* feat(api): validate required app config items * f * f * f * f * f * f
1 parent c5604fb commit 0a626bf

File tree

25 files changed

+1941
-135
lines changed

25 files changed

+1941
-135
lines changed

api/client/client_test.go

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -881,17 +881,22 @@ func TestLinuxPatchAppConfigValues(t *testing.T) {
881881

882882
// Create a test server
883883
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
884+
// Check request method and path
884885
assert.Equal(t, "PATCH", r.Method)
885886
assert.Equal(t, "/api/linux/install/app/config/values", r.URL.Path)
886887

888+
// Check headers
887889
assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
888890
assert.Equal(t, "Bearer test-token", r.Header.Get("Authorization"))
889891

890-
// Decode and verify request body
892+
// Decode request body
891893
var req types.PatchAppConfigValuesRequest
892894
err := json.NewDecoder(r.Body).Decode(&req)
893-
require.NoError(t, err)
895+
require.NoError(t, err, "Failed to decode request body")
896+
897+
// Verify the request contains expected values
894898
assert.Equal(t, "new-value", req.Values["test-item"])
899+
assert.Equal(t, "required-value", req.Values["required-item"])
895900

896901
// Return successful response
897902
w.WriteHeader(http.StatusOK)
@@ -901,32 +906,33 @@ func TestLinuxPatchAppConfigValues(t *testing.T) {
901906

902907
// Test successful set
903908
c := New(server.URL, WithToken("test-token"))
904-
values := map[string]string{
905-
"test-item": "new-value",
909+
configValues := map[string]string{
910+
"test-item": "new-value",
911+
"required-item": "required-value",
906912
}
907-
config, err := c.PatchLinuxAppConfigValues(values)
908-
assert.NoError(t, err)
913+
config, err := c.PatchLinuxAppConfigValues(configValues)
914+
require.NoError(t, err)
909915
assert.Equal(t, expectedConfig, config)
910916

911917
// Test error response
912918
errorServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
913-
w.WriteHeader(http.StatusInternalServerError)
919+
w.WriteHeader(http.StatusBadRequest)
914920
json.NewEncoder(w).Encode(types.APIError{
915-
StatusCode: http.StatusInternalServerError,
916-
Message: "Internal Server Error",
921+
StatusCode: http.StatusBadRequest,
922+
Message: "Bad Request",
917923
})
918924
}))
919925
defer errorServer.Close()
920926

921927
c = New(errorServer.URL, WithToken("test-token"))
922-
config, err = c.PatchLinuxAppConfigValues(values)
928+
config, err = c.PatchLinuxAppConfigValues(configValues)
923929
assert.Error(t, err)
924930
assert.Equal(t, types.AppConfig{}, config)
925931

926932
apiErr, ok := err.(*types.APIError)
927933
require.True(t, ok, "Expected err to be of type *types.APIError")
928-
assert.Equal(t, http.StatusInternalServerError, apiErr.StatusCode)
929-
assert.Equal(t, "Internal Server Error", apiErr.Message)
934+
assert.Equal(t, http.StatusBadRequest, apiErr.StatusCode)
935+
assert.Equal(t, "Bad Request", apiErr.Message)
930936
}
931937

932938
func TestKubernetesPatchAppConfigValues(t *testing.T) {
@@ -951,17 +957,22 @@ func TestKubernetesPatchAppConfigValues(t *testing.T) {
951957

952958
// Create a test server
953959
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
960+
// Check request method and path
954961
assert.Equal(t, "PATCH", r.Method)
955962
assert.Equal(t, "/api/kubernetes/install/app/config/values", r.URL.Path)
956963

964+
// Check headers
957965
assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
958966
assert.Equal(t, "Bearer test-token", r.Header.Get("Authorization"))
959967

960-
// Decode and verify request body
968+
// Decode request body
961969
var req types.PatchAppConfigValuesRequest
962970
err := json.NewDecoder(r.Body).Decode(&req)
963-
require.NoError(t, err)
971+
require.NoError(t, err, "Failed to decode request body")
972+
973+
// Verify the request contains expected values
964974
assert.Equal(t, "new-value", req.Values["test-item"])
975+
assert.Equal(t, "required-value", req.Values["required-item"])
965976

966977
// Return successful response
967978
w.WriteHeader(http.StatusOK)
@@ -971,30 +982,31 @@ func TestKubernetesPatchAppConfigValues(t *testing.T) {
971982

972983
// Test successful set
973984
c := New(server.URL, WithToken("test-token"))
974-
values := map[string]string{
975-
"test-item": "new-value",
985+
configValues := map[string]string{
986+
"test-item": "new-value",
987+
"required-item": "required-value",
976988
}
977-
config, err := c.PatchKubernetesAppConfigValues(values)
989+
config, err := c.PatchKubernetesAppConfigValues(configValues)
978990
assert.NoError(t, err)
979991
assert.Equal(t, expectedConfig, config)
980992

981993
// Test error response
982994
errorServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
983-
w.WriteHeader(http.StatusInternalServerError)
995+
w.WriteHeader(http.StatusBadRequest)
984996
json.NewEncoder(w).Encode(types.APIError{
985-
StatusCode: http.StatusInternalServerError,
986-
Message: "Internal Server Error",
997+
StatusCode: http.StatusBadRequest,
998+
Message: "Bad Request",
987999
})
9881000
}))
9891001
defer errorServer.Close()
9901002

9911003
c = New(errorServer.URL, WithToken("test-token"))
992-
config, err = c.PatchKubernetesAppConfigValues(values)
1004+
config, err = c.PatchKubernetesAppConfigValues(configValues)
9931005
assert.Error(t, err)
9941006
assert.Equal(t, types.AppConfig{}, config)
9951007

9961008
apiErr, ok := err.(*types.APIError)
9971009
require.True(t, ok, "Expected err to be of type *types.APIError")
998-
assert.Equal(t, http.StatusInternalServerError, apiErr.StatusCode)
999-
assert.Equal(t, "Internal Server Error", apiErr.Message)
1010+
assert.Equal(t, http.StatusBadRequest, apiErr.StatusCode)
1011+
assert.Equal(t, "Bad Request", apiErr.Message)
10001012
}

api/client/install.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -439,10 +439,11 @@ func (c *client) GetKubernetesAppConfigValues() (map[string]string, error) {
439439
}
440440

441441
func (c *client) PatchKubernetesAppConfigValues(values map[string]string) (types.AppConfig, error) {
442-
req := types.PatchAppConfigValuesRequest{
442+
request := types.PatchAppConfigValuesRequest{
443443
Values: values,
444444
}
445-
b, err := json.Marshal(req)
445+
446+
b, err := json.Marshal(request)
446447
if err != nil {
447448
return types.AppConfig{}, err
448449
}

api/controllers/kubernetes/install/app.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ func (c *InstallController) PatchAppConfigValues(ctx context.Context, values map
5151
}
5252
}()
5353

54-
err = c.appConfigManager.PatchConfigValues(ctx, *c.releaseData.AppConfig, values)
54+
err = c.appConfigManager.ValidateConfigValues(*c.releaseData.AppConfig, values)
55+
if err != nil {
56+
return fmt.Errorf("validate app config values: %w", err)
57+
}
58+
59+
err = c.appConfigManager.PatchConfigValues(*c.releaseData.AppConfig, values)
5560
if err != nil {
5661
return fmt.Errorf("patch app config values: %w", err)
5762
}
@@ -71,5 +76,5 @@ func (c *InstallController) GetAppConfigValues(ctx context.Context, maskPassword
7176
return nil, fmt.Errorf("get app config: %w", err)
7277
}
7378

74-
return c.appConfigManager.GetConfigValues(ctx, appConfig, maskPasswords)
79+
return c.appConfigManager.GetConfigValues(appConfig, maskPasswords)
7580
}

0 commit comments

Comments
 (0)