Merge pull request #26609 from Luap99/bindings-fixes

pkg/bindings/containers: some attach/logs handling fixes
This commit is contained in:
openshift-merge-bot[bot]
2025-07-11 14:16:31 +00:00
committed by GitHub
4 changed files with 19 additions and 22 deletions

View File

@ -219,7 +219,7 @@ func Attach(ctx context.Context, nameOrID string, stdin io.Reader, stdout io.Wri
// Read multiplexed channels and write to appropriate stream
fd, l, err := DemuxHeader(socket, buffer)
if err != nil {
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
if errors.Is(err, io.EOF) {
return nil
}
return err
@ -232,19 +232,19 @@ func Attach(ctx context.Context, nameOrID string, stdin io.Reader, stdout io.Wri
switch fd {
case 0:
if isSet.stdout {
if _, err := stdout.Write(frame[0:l]); err != nil {
if _, err := stdout.Write(frame); err != nil {
return err
}
}
case 1:
if isSet.stdout {
if _, err := stdout.Write(frame[0:l]); err != nil {
if _, err := stdout.Write(frame); err != nil {
return err
}
}
case 2:
if isSet.stderr {
if _, err := stderr.Write(frame[0:l]); err != nil {
if _, err := stderr.Write(frame); err != nil {
return err
}
}
@ -259,14 +259,10 @@ func Attach(ctx context.Context, nameOrID string, stdin io.Reader, stdout io.Wri
// DemuxHeader reads header for stream from server multiplexed stdin/stdout/stderr/2nd error channel
func DemuxHeader(r io.Reader, buffer []byte) (fd, sz int, err error) {
n, err := io.ReadFull(r, buffer[0:8])
_, err = io.ReadFull(r, buffer[0:8])
if err != nil {
return
}
if n < 8 {
err = io.ErrUnexpectedEOF
return
}
fd = int(buffer[0])
if fd < 0 || fd > 3 {
@ -284,14 +280,10 @@ func DemuxFrame(r io.Reader, buffer []byte, length int) (frame []byte, err error
buffer = append(buffer, make([]byte, length-len(buffer)+1)...)
}
n, err := io.ReadFull(r, buffer[0:length])
_, err = io.ReadFull(r, buffer[0:length])
if err != nil {
return nil, err
}
if n < length {
err = io.ErrUnexpectedEOF
return
}
return buffer[0:length], nil
}
@ -548,7 +540,7 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, options *ExecStar
// Read multiplexed channels and write to appropriate stream
fd, l, err := DemuxHeader(socket, buffer)
if err != nil {
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
if errors.Is(err, io.EOF) {
return nil
}
return err
@ -563,19 +555,19 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, options *ExecStar
if options.GetAttachInput() {
// Write STDIN to STDOUT (echoing characters
// typed by another attach session)
if _, err := options.GetOutputStream().Write(frame[0:l]); err != nil {
if _, err := options.GetOutputStream().Write(frame); err != nil {
return err
}
}
case 1:
if options.GetAttachOutput() {
if _, err := options.GetOutputStream().Write(frame[0:l]); err != nil {
if _, err := options.GetOutputStream().Write(frame); err != nil {
return err
}
}
case 2:
if options.GetAttachError() {
if _, err := options.GetErrorStream().Write(frame[0:l]); err != nil {
if _, err := options.GetErrorStream().Write(frame); err != nil {
return err
}
}

View File

@ -44,7 +44,7 @@ func Logs(ctx context.Context, nameOrID string, options *LogOptions, stdoutChan,
for {
fd, l, err := DemuxHeader(response.Body, buffer)
if err != nil {
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
if errors.Is(err, io.EOF) {
return nil
}
return err

View File

@ -383,6 +383,11 @@ var _ = Describe("Podman containers ", func() {
o = strings.TrimSpace(o)
_, err = time.Parse(time.RFC1123Z, o)
Expect(err).ShouldNot(HaveOccurred())
// drain the line channel and make sure there are no more log lines
for l := range stdoutChan {
Fail("container logs returned more than one line: " + l)
}
})
It("podman top", func() {

View File

@ -250,7 +250,7 @@ var _ = Describe("Podman update", func() {
testCtr := "test-ctr-name"
// Test that the variable is not set.
ctr1 := podmanTest.Podman([]string{"run", "-t", "--name", testCtr, ALPINE, "printenv", "FOO"})
ctr1 := podmanTest.Podman([]string{"run", "--name", testCtr, ALPINE, "printenv", "FOO"})
ctr1.WaitWithDefaultTimeout()
Expect(ctr1).Should(Exit(1))
@ -263,7 +263,7 @@ var _ = Describe("Podman update", func() {
session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly())
env := session.OutputToString()
Expect(env).To(ContainSubstring("BAR"))
Expect(env).To(Equal("BAR"))
session = podmanTest.Podman([]string{"inspect", testCtr, "--format", "{{.Config.Env}}"})
session.WaitWithDefaultTimeout()
@ -281,7 +281,7 @@ var _ = Describe("Podman update", func() {
session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly())
env = session.OutputToString()
Expect(env).To(ContainSubstring("RAB"))
Expect(env).To(Equal("RAB"))
session = podmanTest.Podman([]string{"inspect", testCtr, "--format", "{{.Config.Env}}"})
session.WaitWithDefaultTimeout()