diff --git a/internal/slurm/slurmdb_diag.go b/internal/slurm/slurmdb_diag.go new file mode 100644 index 0000000..5fbc20e --- /dev/null +++ b/internal/slurm/slurmdb_diag.go @@ -0,0 +1,19 @@ +package slurm + +import "context" + +// GetDiag returns slurmdbd diagnostics information. +func (s *SlurmdbDiagService) GetDiag(ctx context.Context) (*OpenapiSlurmdbdStatsResp, *Response, error) { + path := "slurmdb/v0.0.40/diag" + req, err := s.client.NewRequest("GET", path, nil) + if err != nil { + return nil, nil, err + } + + var result OpenapiSlurmdbdStatsResp + 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_diag_test.go b/internal/slurm/slurmdb_diag_test.go new file mode 100644 index 0000000..5a8accf --- /dev/null +++ b/internal/slurm/slurmdb_diag_test.go @@ -0,0 +1,51 @@ +package slurm + +import ( + "context" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestSlurmdbDiagService_GetDiag(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/slurmdb/v0.0.40/diag", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"statistics": {"time_start": 1700000000}}`) + }) + server := httptest.NewServer(mux) + defer server.Close() + + client, _ := NewClient(server.URL, nil) + resp, _, err := client.SlurmdbDiag.GetDiag(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if resp == nil { + t.Fatal("expected non-nil response") + } + if resp.Statistics == nil { + t.Fatal("expected non-nil statistics") + } +} + +func TestSlurmdbDiagService_GetDiag_Error(t *testing.T) { + mux := http.NewServeMux() + mux.HandleFunc("/slurmdb/v0.0.40/diag", 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.SlurmdbDiag.GetDiag(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) + } +}