mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-11-28 13:10:24 +08:00
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// Copyright 2025, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package iochan_test
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/wavetermdev/waveterm/pkg/util/iochan"
|
|
)
|
|
|
|
const (
|
|
buflen = 1024
|
|
)
|
|
|
|
func TestIochan_Basic(t *testing.T) {
|
|
// Write the packet to the source pipe from a goroutine
|
|
srcPipeReader, srcPipeWriter := io.Pipe()
|
|
packet := []byte("hello world")
|
|
go func() {
|
|
srcPipeWriter.Write(packet)
|
|
srcPipeWriter.Close()
|
|
}()
|
|
|
|
// Initialize the reader channel
|
|
readerChanCallbackCalled := false
|
|
readerChanCallback := func() {
|
|
srcPipeReader.Close()
|
|
readerChanCallbackCalled = true
|
|
}
|
|
defer readerChanCallback() // Ensure the callback is called
|
|
ioch := iochan.ReaderChan(context.TODO(), srcPipeReader, buflen, readerChanCallback)
|
|
|
|
// Initialize the destination pipe and the writer channel
|
|
destPipeReader, destPipeWriter := io.Pipe()
|
|
writerChanCallbackCalled := false
|
|
writerChanCallback := func() {
|
|
destPipeReader.Close()
|
|
destPipeWriter.Close()
|
|
writerChanCallbackCalled = true
|
|
}
|
|
defer writerChanCallback() // Ensure the callback is called
|
|
iochan.WriterChan(context.TODO(), destPipeWriter, ioch, writerChanCallback, func(err error) {})
|
|
|
|
// Read the packet from the destination pipe and compare it to the original packet
|
|
buf := make([]byte, buflen)
|
|
n, err := destPipeReader.Read(buf)
|
|
if err != nil {
|
|
t.Fatalf("Read failed: %v", err)
|
|
}
|
|
if n != len(packet) {
|
|
t.Fatalf("Read length mismatch: %d != %d", n, len(packet))
|
|
}
|
|
if string(buf[:n]) != string(packet) {
|
|
t.Fatalf("Read data mismatch: %s != %s", buf[:n], packet)
|
|
}
|
|
|
|
// Give the callbacks a chance to run before checking if they were called
|
|
time.Sleep(10 * time.Millisecond)
|
|
if !readerChanCallbackCalled {
|
|
t.Fatalf("ReaderChan callback not called")
|
|
}
|
|
if !writerChanCallbackCalled {
|
|
t.Fatalf("WriterChan callback not called")
|
|
}
|
|
}
|