| 377 | } |
| 378 | |
| 379 | func (s *MockState) CreateTask(node, taskType, id, user string) string { |
| 380 | s.mu.Lock() |
| 381 | defer s.mu.Unlock() |
| 382 | |
| 383 | hexTime := fmt.Sprintf("%X", time.Now().Unix()) |
| 384 | upid := fmt.Sprintf("UPID:%s:%s:%s:%s:%s:%s:%s:", node, hexTime, "00000000", "00000000", taskType, id, user) |
| 385 | |
| 386 | task := &MockTask{ |
| 387 | UPID: upid, |
| 388 | Node: node, |
| 389 | Type: taskType, |
| 390 | ID: id, |
| 391 | User: user, |
| 392 | StartTime: time.Now().Unix(), |
| 393 | Status: taskStatusRunning, |
| 394 | } |
| 395 | s.Tasks[upid] = task |
| 396 | |
| 397 | // Auto-complete task after a short delay so tests can observe async transitions. |
| 398 | go func(upid string) { |
| 399 | time.Sleep(s.taskDelay) |
| 400 | s.CompleteTask(upid, "OK") |
| 401 | }(upid) |
| 402 | |
| 403 | return upid |
| 404 | } |
| 405 | |
| 406 | func (s *MockState) createTaskWithCompletion(node, taskType, id, user string, onComplete func()) string { |
| 407 | s.mu.Lock() |