diff --git a/internal/slurm/slurmdb_config.go b/internal/slurm/slurmdb_config.go new file mode 100644 index 0000000..7d0f5fc --- /dev/null +++ b/internal/slurm/slurmdb_config.go @@ -0,0 +1,33 @@ +package slurm + +import "context" + +// GetConfig returns slurmdbd configuration. +func (s *SlurmdbConfigService) GetConfig(ctx context.Context) (*OpenapiSlurmdbdConfigResp, *Response, error) { + path := "slurmdb/v0.0.40/config" + req, err := s.client.NewRequest("GET", path, nil) + if err != nil { + return nil, nil, err + } + var result OpenapiSlurmdbdConfigResp + resp, err := s.client.Do(ctx, req, &result) + if err != nil { + return nil, resp, err + } + return &result, resp, nil +} + +// PostConfig updates slurmdbd configuration. +func (s *SlurmdbConfigService) PostConfig(ctx context.Context, config *OpenapiSlurmdbdConfigResp) (*OpenapiResp, *Response, error) { + path := "slurmdb/v0.0.40/config" + req, err := s.client.NewRequest("POST", path, config) + if err != nil { + return nil, nil, err + } + var result OpenapiResp + resp, err := s.client.Do(ctx, req, &result) + if err != nil { + return nil, resp, err + } + return &result, resp, nil +} diff --git a/internal/slurm/slurmdb_config_test.go b/internal/slurm/slurmdb_config_test.go new file mode 100644 index 0000000..58e6071 --- /dev/null +++ b/internal/slurm/slurmdb_config_test.go @@ -0,0 +1,68 @@ +package slurm + +import ( + "context" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestSlurmdbConfigService_GetConfig(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/slurmdb/v0.0.40/config", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"accounts": [], "clusters": [], "qos": []}`) + }) + server := httptest.NewServer(mux) + defer server.Close() + + client, _ := NewClient(server.URL, nil) + resp, _, err := client.SlurmdbConfig.GetConfig(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if resp == nil { + t.Fatal("expected non-nil response") + } +} + +func TestSlurmdbConfigService_PostConfig(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/slurmdb/v0.0.40/config", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "POST") + fmt.Fprint(w, `{}`) + }) + server := httptest.NewServer(mux) + defer server.Close() + + client, _ := NewClient(server.URL, nil) + config := &OpenapiSlurmdbdConfigResp{} + resp, _, err := client.SlurmdbConfig.PostConfig(context.Background(), config) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if resp == nil { + t.Fatal("expected non-nil response") + } +} + +func TestSlurmdbConfigService_GetConfig_Error(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/slurmdb/v0.0.40/config", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprint(w, `{"errors": [{"error": "internal error"}]}`) + }) + server := httptest.NewServer(mux) + defer server.Close() + + client, _ := NewClient(server.URL, nil) + _, _, err := client.SlurmdbConfig.GetConfig(context.Background()) + if err == nil { + t.Fatal("expected error for 500 response") + } + if !strings.Contains(err.Error(), "500") { + t.Errorf("expected error to contain 500, got %v", err) + } +}