From 874453d0c8fdf8ed8c948e6c37a7bc06a90854b5 Mon Sep 17 00:00:00 2001 From: dailz Date: Wed, 8 Apr 2026 21:31:58 +0800 Subject: [PATCH] feat(slurmdb): add ConfigService Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- internal/slurm/slurmdb_config.go | 33 +++++++++++++ internal/slurm/slurmdb_config_test.go | 68 +++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 internal/slurm/slurmdb_config.go create mode 100644 internal/slurm/slurmdb_config_test.go 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) + } +}