From 8d85fc5f81c49a778ae5272b9cd54a7e7a92eb0a Mon Sep 17 00:00:00 2001 From: Philipp Mieden Date: Mon, 27 May 2019 12:11:16 +0200 Subject: [PATCH] GetRepo cleanup and testing, fixed unit tests --- client/client_test.go | 14 ++++++++++++++ client/sockettransport.go | 1 + repo/history.go | 3 +++ repo/history_test.go | 7 ++++--- repo/repo.go | 9 +++++++++ server/handlerequest.go | 7 ++----- 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index d7e46ee..e52df3a 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -68,6 +68,7 @@ func initTestServer(t testing.TB) (socketAddr, webserverAddr string) { t.Fatal("test server crashed: ", err) } }() + socketClient, errClient := NewClient(socketAddr, 1, time.Duration(time.Millisecond*100)) if errClient != nil { panic(errClient) @@ -79,6 +80,11 @@ func initTestServer(t testing.TB) (socketAddr, webserverAddr string) { if err != nil { continue } + + if len(r) == 0 { + t.Fatal("received empty JSON from GetRepo") + } + if r["dimension_foo"].Nodes["id-a"].Data["baz"].(float64) == float64(1) { break } @@ -149,10 +155,18 @@ func TestGetURIs(t *testing.T) { func TestGetRepo(t *testing.T) { testWithClients(t, func(c *Client) { + + time.Sleep(time.Millisecond * 100) + r, err := c.GetRepo() if err != nil { t.Fatal(err) } + + if len(r) == 0 { + t.Fatal("received empty JSON from GetRepo") + } + if r["dimension_foo"].Nodes["id-a"].Data["baz"].(float64) != float64(1) { t.Fatal("failed to drill deep for data") } diff --git a/client/sockettransport.go b/client/sockettransport.go index e236ed4..aade59b 100644 --- a/client/sockettransport.go +++ b/client/sockettransport.go @@ -111,6 +111,7 @@ func (c *socketTransport) call(handler server.Handler, request interface{}, resp break } } + // unmarshal response responseJSONErr := json.Unmarshal(responseBytes, &serverResponse{Reply: response}) if responseJSONErr != nil { diff --git a/repo/history.go b/repo/history.go index 2b3d67a..fb14d25 100644 --- a/repo/history.go +++ b/repo/history.go @@ -100,6 +100,9 @@ func (h *history) getCurrentFilename() string { func (h *history) getCurrent(buf *bytes.Buffer) (err error) { f, err := os.Open(h.getCurrentFilename()) + if err != nil { + return err + } defer f.Close() _, err = io.Copy(buf, f) return err diff --git a/repo/history_test.go b/repo/history_test.go index fc06a6b..914fdc5 100644 --- a/repo/history_test.go +++ b/repo/history_test.go @@ -21,17 +21,18 @@ func TestHistoryCurrent(t *testing.T) { var ( h = testHistory() test = []byte("test") + b bytes.Buffer ) err := h.add(test) if err != nil { t.Fatal("failed to add: ", err) } - current, err := h.getCurrent() + err = h.getCurrent(&b) if err != nil { t.Fatal(err) } - if !bytes.Equal(current, test) { - t.Fatal(fmt.Sprintf("expected %q, got %q", string(test), string(current))) + if !bytes.Equal(b.Bytes(), test) { + t.Fatal(fmt.Sprintf("expected %q, got %q", string(test), string(b.Bytes()))) } } diff --git a/repo/repo.go b/repo/repo.go index 152c94e..2a7c22f 100644 --- a/repo/repo.go +++ b/repo/repo.go @@ -221,12 +221,21 @@ func (repo *Repo) GetRepo() map[string]*content.RepoNode { } // WriteRepoBytes get the whole repo in all dimensions +// reads the JSON history file from the Filesystem and copies it directly in to the supplied buffer +// the result is wrapped as service response, e.g: {"reply": } func (repo *Repo) WriteRepoBytes(w io.Writer) { + f, err := os.Open(repo.history.getCurrentFilename()) + if err != nil { + Log.Error("failed to serve Repo JSON", zap.Error(err)) + } + + w.Write([]byte("{\"reply\":")) _, err = io.Copy(w, f) if err != nil { Log.Error("failed to serve Repo JSON", zap.Error(err)) } + w.Write([]byte("}")) } // Update - reload contents of repository with json from repo.server diff --git a/server/handlerequest.go b/server/handlerequest.go index 2d14a34..3562ad6 100644 --- a/server/handlerequest.go +++ b/server/handlerequest.go @@ -31,6 +31,8 @@ func handleRequest(r *repo.Repo, handler Handler, jsonBytes []byte, source strin // handle and process switch handler { + // case HandlerGetRepo: // This case is handled prior to handleRequest being called. + // since the resulting bytes are written directly in to the http.ResponseWriter / net.Connection case HandlerGetURIs: getURIRequest := &requests.URIs{} processIfJSONIsOk(json.Unmarshal(jsonBytes, &getURIRequest), func() { @@ -51,11 +53,6 @@ func handleRequest(r *repo.Repo, handler Handler, jsonBytes []byte, source strin processIfJSONIsOk(json.Unmarshal(jsonBytes, &updateRequest), func() { reply = r.Update() }) - // case HandlerGetRepo: - // repoRequest := &requests.Repo{} - // processIfJSONIsOk(json.Unmarshal(jsonBytes, &repoRequest), func() { - // reply = r.GetRepo() - // }) default: reply = responses.NewError(1, "unknown handler: "+string(handler))