package handler import ( "context" "net/http" "net/http/httptest" "strings" "testing" "vctp/server/models" ) func TestMutatingHandlersRejectWrongMethod(t *testing.T) { h := &Handler{Logger: newTestLogger()} tests := []struct { name string path string call func(*Handler, *httptest.ResponseRecorder, *http.Request) }{ { name: "snapshot force hourly", path: "/api/snapshots/hourly/force", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.SnapshotForceHourly(rr, req) }, }, { name: "snapshot aggregate", path: "/api/snapshots/aggregate", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.SnapshotAggregateForce(rr, req) }, }, { name: "snapshot migrate", path: "/api/snapshots/migrate", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.SnapshotMigrate(rr, req) }, }, { name: "snapshot regenerate hourly", path: "/api/snapshots/regenerate-hourly-reports", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.SnapshotRegenerateHourlyReports(rr, req) }, }, { name: "vm create event", path: "/api/event/vm/create", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmCreateEvent(rr, req) }, }, { name: "vm modify event", path: "/api/event/vm/modify", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmModifyEvent(rr, req) }, }, { name: "vm move event", path: "/api/event/vm/move", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmMoveEvent(rr, req) }, }, { name: "vm delete event", path: "/api/event/vm/delete", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmDeleteEvent(rr, req) }, }, { name: "vm import", path: "/api/import/vm", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmImport(rr, req) }, }, { name: "vm update details", path: "/api/inventory/vm/update", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmUpdateDetails(rr, req) }, }, { name: "vm cleanup", path: "/api/inventory/vm/delete", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VmCleanup(rr, req) }, }, { name: "vcenter cleanup", path: "/api/cleanup/vcenter", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.VcCleanup(rr, req) }, }, { name: "update cleanup", path: "/api/cleanup/updates", call: func(h *Handler, rr *httptest.ResponseRecorder, req *http.Request) { h.UpdateCleanup(rr, req) }, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { req := httptest.NewRequest(http.MethodGet, tc.path, strings.NewReader("{}")) rr := httptest.NewRecorder() tc.call(h, rr, req) if rr.Code != http.StatusMethodNotAllowed { t.Fatalf("expected %d, got %d", http.StatusMethodNotAllowed, rr.Code) } if !strings.Contains(rr.Body.String(), "method not allowed") { t.Fatalf("expected method not allowed response, got: %s", rr.Body.String()) } }) } } func TestVcenterLoginFailuresAreHandled(t *testing.T) { h := &Handler{Logger: newTestLogger()} event := models.CloudEventReceived{} event.CloudEvent.Source = "https://invalid.local/sdk" disk := h.calculateNewDiskSize(context.Background(), event) if disk != 0 { t.Fatalf("expected disk size 0 on login failure, got %f", disk) } id, err := h.AddVmToInventory(event, context.Background(), 0) if err == nil { t.Fatal("expected error on login failure") } if id != 0 { t.Fatalf("expected id 0 on login failure, got %d", id) } }