chore(): increase test coverage and update dependencies
Some checks are pending
ci/woodpecker/pr/pr Pipeline is pending
Some checks are pending
ci/woodpecker/pr/pr Pipeline is pending
This commit is contained in:
110
internal/woodpecker/agent_test.go
Normal file
110
internal/woodpecker/agent_test.go
Normal file
@@ -0,0 +1,110 @@
|
||||
package woodpecker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.uploadfilter24.eu/covidnetes/woodpecker-autoscaler/internal/config"
|
||||
"git.uploadfilter24.eu/covidnetes/woodpecker-autoscaler/internal/models"
|
||||
)
|
||||
|
||||
func TestCreateAndGetAndDeleteAgent(t *testing.T) {
|
||||
// prepare a fake agent to return
|
||||
createdAgent := models.Agent{
|
||||
ID: 42,
|
||||
Name: "woodpecker-autoscaler-agent-abcde",
|
||||
Token: "tok",
|
||||
}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/api/agents", func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == http.MethodPost {
|
||||
// ensure content-type
|
||||
if ct := r.Header.Get("Content-Type"); ct != "application/json" {
|
||||
t.Fatalf("expected json content-type, got %s", ct)
|
||||
}
|
||||
body, _ := io.ReadAll(r.Body)
|
||||
defer r.Body.Close()
|
||||
if !strings.Contains(string(body), "woodpecker-autoscaler-agent-") {
|
||||
t.Fatalf("unexpected agent request body: %s", string(body))
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_ = json.NewEncoder(w).Encode(createdAgent)
|
||||
return
|
||||
}
|
||||
// For GET listing, return an AgentList
|
||||
w.WriteHeader(http.StatusOK)
|
||||
list := models.AgentList{Agents: []models.Agent{createdAgent}}
|
||||
_ = json.NewEncoder(w).Encode(list)
|
||||
})
|
||||
|
||||
mux.HandleFunc("/api/agents?page=1&perPage=100", func(w http.ResponseWriter, r *http.Request) {
|
||||
// return list in expected format for GetAgentIdByName
|
||||
w.WriteHeader(http.StatusOK)
|
||||
// GetAgentIdByName expects a models.AgentList; encode accordingly
|
||||
list := models.AgentList{Agents: []models.Agent{createdAgent}}
|
||||
_ = json.NewEncoder(w).Encode(list)
|
||||
})
|
||||
|
||||
// handle delete
|
||||
mux.HandleFunc(fmt.Sprintf("/api/agents/%d", createdAgent.ID), func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodDelete {
|
||||
t.Fatalf("expected DELETE, got %s", r.Method)
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
|
||||
srv := httptest.NewServer(mux)
|
||||
defer srv.Close()
|
||||
|
||||
cfg := config.Config{
|
||||
WoodpeckerInstance: srv.URL,
|
||||
WoodpeckerApiToken: "testtoken",
|
||||
}
|
||||
|
||||
// Test CreateWoodpeckerAgent
|
||||
a, err := CreateWoodpeckerAgent(&cfg)
|
||||
if err != nil {
|
||||
t.Fatalf("CreateWoodpeckerAgent failed: %v", err)
|
||||
}
|
||||
if a == nil || !strings.HasPrefix(a.Name, "woodpecker-autoscaler-agent-") {
|
||||
t.Fatalf("unexpected agent returned: %#v", a)
|
||||
}
|
||||
|
||||
// Test GetAgentIdByName
|
||||
id, err := GetAgentIdByName(&cfg, a.Name)
|
||||
if err != nil {
|
||||
t.Fatalf("GetAgentIdByName failed: %v", err)
|
||||
}
|
||||
if id != int(a.ID) {
|
||||
t.Fatalf("unexpected id: got %d want %d", id, a.ID)
|
||||
}
|
||||
|
||||
// Test DecomAgent
|
||||
if err := DecomAgent(&cfg, a.ID); err != nil {
|
||||
t.Fatalf("DecomAgent failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetAgentIdByName_NotFound(t *testing.T) {
|
||||
// server returns empty list
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/api/agents?page=1&perPage=100", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
list := models.AgentList{Agents: []models.Agent{{ID: 1, Name: "other"}}}
|
||||
_ = json.NewEncoder(w).Encode(list)
|
||||
})
|
||||
srv := httptest.NewServer(mux)
|
||||
defer srv.Close()
|
||||
|
||||
cfg := config.Config{WoodpeckerInstance: srv.URL, WoodpeckerApiToken: "t"}
|
||||
_, err := GetAgentIdByName(&cfg, "nonexistent")
|
||||
if err == nil {
|
||||
t.Fatalf("expected error for unknown agent name")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user