75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
package fake
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"github.com/google/go-github/v33/github"
 | 
						|
	"github.com/gorilla/mux"
 | 
						|
)
 | 
						|
 | 
						|
type RunnersList struct {
 | 
						|
	runners []*github.Runner
 | 
						|
}
 | 
						|
 | 
						|
func NewRunnersList() *RunnersList {
 | 
						|
	return &RunnersList{
 | 
						|
		runners: make([]*github.Runner, 0),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (r *RunnersList) Add(runner *github.Runner) {
 | 
						|
	if !exists(r.runners, runner) {
 | 
						|
		r.runners = append(r.runners, runner)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (r *RunnersList) GetServer() *httptest.Server {
 | 
						|
	router := mux.NewRouter()
 | 
						|
 | 
						|
	router.Handle("/repos/{owner}/{repo}/actions/runners", r.HandleList())
 | 
						|
	router.Handle("/repos/{owner}/{repo}/actions/runners/{id}", r.handleRemove())
 | 
						|
	router.Handle("/orgs/{org}/actions/runners", r.HandleList())
 | 
						|
	router.Handle("/orgs/{org}/actions/runners/{id}", r.handleRemove())
 | 
						|
 | 
						|
	return httptest.NewServer(router)
 | 
						|
}
 | 
						|
 | 
						|
func (r *RunnersList) HandleList() http.HandlerFunc {
 | 
						|
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						|
		j, err := json.Marshal(github.Runners{
 | 
						|
			TotalCount: len(r.runners),
 | 
						|
			Runners:    r.runners,
 | 
						|
		})
 | 
						|
		if err != nil {
 | 
						|
			panic(err)
 | 
						|
		}
 | 
						|
 | 
						|
		w.WriteHeader(http.StatusOK)
 | 
						|
		w.Write(j)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (r *RunnersList) handleRemove() http.HandlerFunc {
 | 
						|
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						|
		vars := mux.Vars(res)
 | 
						|
		for i, runner := range r.runners {
 | 
						|
			if runner.ID != nil && vars["id"] == strconv.FormatInt(*runner.ID, 10) {
 | 
						|
				r.runners = append(r.runners[:i], r.runners[i+1:]...)
 | 
						|
			}
 | 
						|
		}
 | 
						|
		w.WriteHeader(http.StatusOK)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func exists(runners []*github.Runner, runner *github.Runner) bool {
 | 
						|
	for _, r := range runners {
 | 
						|
		if *r.Name == *runner.Name {
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return false
 | 
						|
}
 |