diff --git a/manager/config.go b/manager/config.go index 54d8568..9a422f7 100644 --- a/manager/config.go +++ b/manager/config.go @@ -24,6 +24,8 @@ type ServerConfig struct { type FileConfig struct { StatusFile string `toml:"status_file"` DBFile string `toml:"db_file"` + // used to connect to worker + CACert string `toml:"ca_cert"` } func loadConfig(cfgFile string, c *cli.Context) (*Config, error) { diff --git a/manager/server.go b/manager/server.go new file mode 100644 index 0000000..3c41889 --- /dev/null +++ b/manager/server.go @@ -0,0 +1,36 @@ +package manager + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +type worker struct { + // worker name + name string + // url to connect to worker + url string + // session token + token string +} + +func makeHTTPServer(debug bool) *gin.Engine { + if !debug { + gin.SetMode(gin.ReleaseMode) + } + r := gin.Default() + r.GET("/ping", func(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"msg": "pong"}) + }) + // List jobs, status page + r.GET("/jobs", func(c *gin.Context) {}) + // worker online + r.POST("/workers/:name", func(c *gin.Context) {}) + // post job list + r.POST("/workers/:name/jobs", func(c *gin.Context) {}) + // post job status + r.POST("/workers/:name/jobs/:job", func(c *gin.Context) {}) + + return r +} diff --git a/manager/server_test.go b/manager/server_test.go new file mode 100644 index 0000000..c6cb0e7 --- /dev/null +++ b/manager/server_test.go @@ -0,0 +1,37 @@ +package manager + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "math/rand" + "net/http" + "testing" + "time" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestHTTPServer(t *testing.T) { + Convey("HTTP server should work", t, func() { + s := makeHTTPServer(false) + So(s, ShouldNotBeNil) + port := rand.Intn(10000) + 20000 + go func() { + s.Run(fmt.Sprintf("127.0.0.1:%d", port)) + }() + time.Sleep(50 * time.Microsecond) + resp, err := http.Get(fmt.Sprintf("http://127.0.0.1:%d/ping", port)) + So(err, ShouldBeNil) + So(resp.StatusCode, ShouldEqual, http.StatusOK) + So(resp.Header.Get("Content-Type"), ShouldEqual, "application/json; charset=utf-8") + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + So(err, ShouldBeNil) + var p map[string]string + err = json.Unmarshal(body, &p) + So(err, ShouldBeNil) + So(p["msg"], ShouldEqual, "pong") + }) + +}