From 4a710429decf5e27b80e519382ada2321f2e01cd Mon Sep 17 00:00:00 2001 From: Lars Karlitski Date: Wed, 15 Apr 2020 23:29:07 +0200 Subject: [PATCH] worker: rename API to Server This makes it symmetric with the client: s := worker.NewServer() c := worker.NewClient() --- cmd/osbuild-composer/main.go | 6 +-- internal/worker/{api.go => server.go} | 46 +++++++++---------- .../worker/{api_test.go => server_test.go} | 16 +++---- 3 files changed, 34 insertions(+), 34 deletions(-) rename internal/worker/{api.go => server.go} (73%) rename internal/worker/{api_test.go => server_test.go} (84%) diff --git a/cmd/osbuild-composer/main.go b/cmd/osbuild-composer/main.go index c1ff08904..04af74f3e 100644 --- a/cmd/osbuild-composer/main.go +++ b/cmd/osbuild-composer/main.go @@ -117,11 +117,11 @@ func main() { store := store.New(&stateDir) - jobAPI := worker.New(logger, store) + workerAPI := worker.NewServer(logger, store) weldrAPI := weldr.New(rpm, arch, distribution, repoMap[common.CurrentArch()], logger, store) go func() { - err := jobAPI.Serve(jobListener) + err := workerAPI.Serve(jobListener) common.PanicOnError(err) }() @@ -157,7 +157,7 @@ func main() { listener := tls.NewListener(listener, tlsConfig) go func() { - err := jobAPI.Serve(listener) + err := workerAPI.Serve(listener) common.PanicOnError(err) }() } diff --git a/internal/worker/api.go b/internal/worker/server.go similarity index 73% rename from internal/worker/api.go rename to internal/worker/server.go index eb1f8e510..8630c5516 100644 --- a/internal/worker/api.go +++ b/internal/worker/server.go @@ -14,33 +14,33 @@ import ( "github.com/osbuild/osbuild-composer/internal/store" ) -type API struct { +type Server struct { logger *log.Logger store *store.Store router *httprouter.Router } -func New(logger *log.Logger, store *store.Store) *API { - api := &API{ +func NewServer(logger *log.Logger, store *store.Store) *Server { + s := &Server{ logger: logger, store: store, } - api.router = httprouter.New() - api.router.RedirectTrailingSlash = false - api.router.RedirectFixedPath = false - api.router.MethodNotAllowed = http.HandlerFunc(methodNotAllowedHandler) - api.router.NotFound = http.HandlerFunc(notFoundHandler) + s.router = httprouter.New() + s.router.RedirectTrailingSlash = false + s.router.RedirectFixedPath = false + s.router.MethodNotAllowed = http.HandlerFunc(methodNotAllowedHandler) + s.router.NotFound = http.HandlerFunc(notFoundHandler) - api.router.POST("/job-queue/v1/jobs", api.addJobHandler) - api.router.PATCH("/job-queue/v1/jobs/:job_id/builds/:build_id", api.updateJobHandler) - api.router.POST("/job-queue/v1/jobs/:job_id/builds/:build_id/image", api.addJobImageHandler) + s.router.POST("/job-queue/v1/jobs", s.addJobHandler) + s.router.PATCH("/job-queue/v1/jobs/:job_id/builds/:build_id", s.updateJobHandler) + s.router.POST("/job-queue/v1/jobs/:job_id/builds/:build_id/image", s.addJobImageHandler) - return api + return s } -func (api *API) Serve(listener net.Listener) error { - server := http.Server{Handler: api} +func (s *Server) Serve(listener net.Listener) error { + server := http.Server{Handler: s} err := server.Serve(listener) if err != nil && err != http.ErrServerClosed { @@ -50,13 +50,13 @@ func (api *API) Serve(listener net.Listener) error { return nil } -func (api *API) ServeHTTP(writer http.ResponseWriter, request *http.Request) { - if api.logger != nil { +func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + if s.logger != nil { log.Println(request.Method, request.URL.Path) } writer.Header().Set("Content-Type", "application/json; charset=utf-8") - api.router.ServeHTTP(writer, request) + s.router.ServeHTTP(writer, request) } // jsonErrorf() is similar to http.Error(), but returns the message in a json @@ -78,7 +78,7 @@ func notFoundHandler(writer http.ResponseWriter, request *http.Request) { jsonErrorf(writer, http.StatusNotFound, "not found") } -func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) { +func (s *Server) addJobHandler(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) { contentType := request.Header["Content-Type"] if len(contentType) != 1 || contentType[0] != "application/json" { jsonErrorf(writer, http.StatusUnsupportedMediaType, "request must contain application/json data") @@ -92,7 +92,7 @@ func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request, return } - nextJob := api.store.PopJob() + nextJob := s.store.PopJob() writer.WriteHeader(http.StatusCreated) // FIXME: handle or comment this possible error @@ -104,7 +104,7 @@ func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request, }) } -func (api *API) updateJobHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { +func (s *Server) updateJobHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { contentType := request.Header["Content-Type"] if len(contentType) != 1 || contentType[0] != "application/json" { jsonErrorf(writer, http.StatusUnsupportedMediaType, "request must contain application/json data") @@ -131,7 +131,7 @@ func (api *API) updateJobHandler(writer http.ResponseWriter, request *http.Reque return } - err = api.store.UpdateImageBuildInCompose(id, imageBuildId, body.Status, body.Result) + err = s.store.UpdateImageBuildInCompose(id, imageBuildId, body.Status, body.Result) if err != nil { switch err.(type) { case *store.NotFoundError, *store.NotPendingError: @@ -147,7 +147,7 @@ func (api *API) updateJobHandler(writer http.ResponseWriter, request *http.Reque _ = json.NewEncoder(writer).Encode(updateJobResponse{}) } -func (api *API) addJobImageHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { +func (s *Server) addJobImageHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { id, err := uuid.Parse(params.ByName("job_id")) if err != nil { jsonErrorf(writer, http.StatusBadRequest, "cannot parse compose id: %v", err) @@ -161,7 +161,7 @@ func (api *API) addJobImageHandler(writer http.ResponseWriter, request *http.Req return } - err = api.store.AddImageToImageUpload(id, imageBuildId, request.Body) + err = s.store.AddImageToImageUpload(id, imageBuildId, request.Body) if err != nil { switch err.(type) { diff --git a/internal/worker/api_test.go b/internal/worker/server_test.go similarity index 84% rename from internal/worker/api_test.go rename to internal/worker/server_test.go index e5acac811..23b8fb81b 100644 --- a/internal/worker/api_test.go +++ b/internal/worker/server_test.go @@ -35,8 +35,8 @@ func TestErrors(t *testing.T) { } for _, c := range cases { - api := worker.New(nil, store.New(nil)) - test.TestRoute(t, api, false, c.Method, c.Path, c.Body, c.ExpectedStatus, "{}", "message") + server := worker.NewServer(nil, store.New(nil)) + test.TestRoute(t, server, false, c.Method, c.Path, c.Body, c.ExpectedStatus, "{}", "message") } } @@ -51,14 +51,14 @@ func TestCreate(t *testing.T) { t.Fatalf("error getting image type from arch") } store := store.New(nil) - api := worker.New(nil, store) + server := worker.NewServer(nil, store) id, err := store.PushCompose(imageType, &blueprint.Blueprint{}, nil, nil, nil, 0, nil) if err != nil { t.Fatalf("error pushing compose: %v", err) } - test.TestRoute(t, api, false, "POST", "/job-queue/v1/jobs", `{}`, http.StatusCreated, + test.TestRoute(t, server, false, "POST", "/job-queue/v1/jobs", `{}`, http.StatusCreated, `{"compose_id":"`+id.String()+`","image_build_id":0,"manifest":{"sources":{},"pipeline":{}},"targets":[]}`, "created") } @@ -73,7 +73,7 @@ func testUpdateTransition(t *testing.T, from, to string, expectedStatus int) { t.Fatalf("error getting image type from arch") } store := store.New(nil) - api := worker.New(nil, store) + server := worker.NewServer(nil, store) id := uuid.Nil if from != "VOID" { @@ -83,14 +83,14 @@ func testUpdateTransition(t *testing.T, from, to string, expectedStatus int) { } if from != "WAITING" { - test.SendHTTP(api, false, "POST", "/job-queue/v1/jobs", `{}`) + test.SendHTTP(server, false, "POST", "/job-queue/v1/jobs", `{}`) if from != "RUNNING" { - test.SendHTTP(api, false, "PATCH", "/job-queue/v1/jobs/"+id.String()+"/builds/0", `{"status":"`+from+`"}`) + test.SendHTTP(server, false, "PATCH", "/job-queue/v1/jobs/"+id.String()+"/builds/0", `{"status":"`+from+`"}`) } } } - test.TestRoute(t, api, false, "PATCH", "/job-queue/v1/jobs/"+id.String()+"/builds/0", `{"status":"`+to+`"}`, expectedStatus, "{}", "message") + test.TestRoute(t, server, false, "PATCH", "/job-queue/v1/jobs/"+id.String()+"/builds/0", `{"status":"`+to+`"}`, expectedStatus, "{}", "message") } func TestUpdate(t *testing.T) {