diff --git a/internal/module/module.go b/internal/module/module.go index 6b270a5..f1274c8 100644 --- a/internal/module/module.go +++ b/internal/module/module.go @@ -123,7 +123,7 @@ func (r *readCloser) Read(data []Module) (n int, err error) { return i, err } } - return 0, nil + return len(data), nil } func (r *readCloser) Close() error { diff --git a/internal/module/module_test.go b/internal/module/module_test.go index fd1751a..47f9244 100644 --- a/internal/module/module_test.go +++ b/internal/module/module_test.go @@ -70,5 +70,25 @@ var _ = Describe("Internal", func() { Expect(n).To(Equal(3)) Expect(modules[:3]).To(Equal(testdata.Modules)) }) + + It("should properly chunk the command data JSON stream", func() { + cmd := func() *exec.Cmd { + return exec.Command(gocatExecutable, filepath.Join("..", "testdata", "modules.json.stream")) + } + rc, err := module.OpenGoList(&module.OpenGoListOptions{Command: cmd}) + Expect(err).NotTo(HaveOccurred()) + DeferCleanup(rc.Close) + + modules := make([]module.Module, 4) + n, err := rc.Read(modules[:2]) + Expect(err).NotTo(HaveOccurred()) + Expect(n).To(Equal(2)) + + n, err = rc.Read(modules[2:4]) + Expect(err).To(MatchError(io.EOF)) + Expect(n).To(Equal(1)) + + Expect(modules[:3]).To(Equal(testdata.Modules)) + }) }) })