Skip to content

Commit

Permalink
Reply from REST can come in pieces
Browse files Browse the repository at this point in the history
It is not given that one reply comes in one piece. It might come n
multiple messages and we need to connect them before trying to parse
them.

Fixes cockpit-project#1025
  • Loading branch information
marusak committed Jul 11, 2022
1 parent 05daa80 commit 25339c2
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/rest.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,21 @@ function connect(address, system) {

connection.monitor = function(options, callback, system, return_raw) {
return new Promise((resolve, reject) => {
let buffer = "";

http.request(options)
.stream(data => {
if (return_raw)
callback(data);
else
callback(JSON.parse(data));
else {
buffer += data;

const chunks = buffer.split("\0");
buffer = chunks.pop();

for (let i = 0; i < chunks.length; i += 1)
callback(JSON.parse(chunks[i]));
}
})
.catch((error, content) => {
manage_error(reject, error, content);
Expand Down
9 changes: 9 additions & 0 deletions test/check-application
Original file line number Diff line number Diff line change
Expand Up @@ -2122,6 +2122,15 @@ class TestApplication(testlib.MachineCase):
self.execute(auth, f"podman inspect --format '{{{{.Id}}}}' {container_name_new}").strip()
self.waitContainerRow(container_name_new)

def testMultipleContainers(self):
# Create 31 containers
for i in range(31):
self.execute(True, f"podman run -dt --name container{i} quay.io/libpod/busybox:latest")

self.login()

self.waitContainerRow("container30")


if __name__ == '__main__':
testlib.test_main()

0 comments on commit 25339c2

Please sign in to comment.