feat: add one pull plug and play feature

This commit is contained in:
2026-05-18 11:28:38 +02:00
parent ad64766cd6
commit fc498379f6
11 changed files with 290 additions and 42 deletions

View File

@ -138,6 +138,11 @@ func (s *Store) UpdateAgentAlias(id, alias string) error {
return err
}
func (s *Store) DeleteAgent(id string) error {
_, err := s.db.Exec(`DELETE FROM agents WHERE id = ?`, id)
return err
}
// ── Users ─────────────────────────────────────────────────────────────────────
func (s *Store) GetUserHash(username string) (string, error) {

View File

@ -195,6 +195,54 @@ func TestUpdateAgentAlias(t *testing.T) {
}
}
func TestDeleteAgent(t *testing.T) {
s := newTestStore(t)
if err := s.CreateAgentToken("a1", "t1", "host1"); err != nil {
t.Fatalf("CreateAgentToken: %v", err)
}
if err := s.DeleteAgent("a1"); err != nil {
t.Fatalf("DeleteAgent: %v", err)
}
_, err := s.GetAgent("a1")
if err == nil {
t.Error("expected error after deletion, got nil")
}
}
func TestDeleteAgent_NotFound(t *testing.T) {
s := newTestStore(t)
// Deleting a non-existent agent should not error (DELETE is idempotent at SQL level)
if err := s.DeleteAgent("nonexistent"); err != nil {
t.Fatalf("DeleteAgent on missing id: %v", err)
}
}
func TestDeleteAgent_RemovesFromList(t *testing.T) {
s := newTestStore(t)
_ = s.CreateAgentToken("a1", "t1", "host1")
_ = s.CreateAgentToken("a2", "t2", "host2")
if err := s.DeleteAgent("a1"); err != nil {
t.Fatalf("DeleteAgent: %v", err)
}
agents, err := s.ListAgents()
if err != nil {
t.Fatalf("ListAgents: %v", err)
}
if len(agents) != 1 {
t.Fatalf("expected 1 agent after deletion, got %d", len(agents))
}
if agents[0].ID != "a2" {
t.Errorf("expected remaining agent to be a2, got %q", agents[0].ID)
}
}
func TestCreateAgentToken_IdempotentIgnore(t *testing.T) {
s := newTestStore(t)