(t *testing.T)
| 98 | } |
| 99 | |
| 100 | func TestTaskManager_Cancel(t *testing.T) { |
| 101 | // Setup Mock Server |
| 102 | state := mockpve.NewMockState() |
| 103 | r := mux.NewRouter() |
| 104 | r.HandleFunc("/api2/json/nodes/{node}/tasks/{upid}/status", mockpve.HandleTaskStatus(state)).Methods("GET") |
| 105 | r.HandleFunc("/api2/json/nodes/{node}/tasks/{upid}", mockpve.HandleStopTask(state)).Methods("DELETE") |
| 106 | r.HandleFunc("/api2/json/access/ticket", func(w http.ResponseWriter, r *http.Request) { |
| 107 | w.Header().Set("Content-Type", "application/json") |
| 108 | _, _ = fmt.Fprint(w, `{"data": {"ticket": "dummy", "CSRFPreventionToken": "dummy"}}`) |
| 109 | }) |
| 110 | server := httptest.NewServer(r) |
| 111 | defer server.Close() |
| 112 | |
| 113 | config := &mockConfig{addr: server.URL} |
| 114 | opts := api.ClientOption(func(c *api.ClientOptions) { |
| 115 | c.Logger = &mockLogger{} |
| 116 | c.Cache = &interfaces.NoOpCache{} |
| 117 | }) |
| 118 | client, _ := api.NewClient(config, opts) |
| 119 | |
| 120 | resolver := func(nodeName string) (*api.Client, error) { |
| 121 | return client, nil |
| 122 | } |
| 123 | tm := NewTaskManager(resolver, nil) |
| 124 | defer tm.Stop() |
| 125 | |
| 126 | upid := state.CreateTask("pve", "qmstart", "101", "root@pam") |
| 127 | task := &Task{ |
| 128 | TargetVMID: 101, |
| 129 | TargetNode: "pve", |
| 130 | Type: "Start", |
| 131 | Operation: func() (string, error) { |
| 132 | return upid, nil |
| 133 | }, |
| 134 | } |
| 135 | tm.Enqueue(task) |
| 136 | |
| 137 | // Wait for running |
| 138 | assert.Eventually(t, func() bool { |
| 139 | running := tm.GetActiveTaskForVM("pve", 101) |
| 140 | return running != nil && running.Status == StatusRunning |
| 141 | }, 1*time.Second, 10*time.Millisecond) |
| 142 | |
| 143 | // Cancel |
| 144 | err := tm.CancelTask(task.ID) |
| 145 | assert.NoError(t, err) |
| 146 | |
| 147 | // Wait for status to become failed/completed (since StopTask in mock just errors it out or stops it) |
| 148 | // Mock HandleStopTask calls CompleteTask(..., "ERROR") |
| 149 | |
| 150 | assert.Eventually(t, func() bool { |
| 151 | return tm.GetActiveTaskForVM("pve", 101) == nil |
| 152 | }, 6*time.Second, 100*time.Millisecond) |
| 153 | } |
| 154 | |
| 155 | func TestTaskManager_AllowsSameVMIDOnDifferentNodes(t *testing.T) { |
| 156 | state := mockpve.NewMockState() |
nothing calls this directly
no test coverage detected