You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
58 lines
1.8 KiB
|
2 months ago
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"context"
|
||
|
|
"io"
|
||
|
|
"net"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
type openerFunc func(context.Context, string) (io.ReadWriteCloser, error)
|
||
|
|
|
||
|
|
func (f openerFunc) Open(ctx context.Context, channel string) (io.ReadWriteCloser, error) {
|
||
|
|
return f(ctx, channel)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRunRequiresConfirmationAndBounds(t *testing.T) {
|
||
|
|
if code := run([]string{"-direction=tx", "-payload-base64=YQ=="}, io.Discard, io.Discard, nil); code != 2 {
|
||
|
|
t.Fatalf("unconfirmed code = %d", code)
|
||
|
|
}
|
||
|
|
oversized := strings.Repeat("YQ==", 65)
|
||
|
|
if code := run([]string{"-direction=tx", "-operator-confirmed-ch01-com3", "-payload-base64=" + oversized}, io.Discard, io.Discard, nil); code != 2 {
|
||
|
|
t.Fatalf("oversized code = %d", code)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRunTXAndRXUseCanonicalStreamWithoutPrintingPayload(t *testing.T) {
|
||
|
|
for _, direction := range []string{"tx", "rx"} {
|
||
|
|
t.Run(direction, func(t *testing.T) {
|
||
|
|
service, peer := net.Pipe()
|
||
|
|
defer peer.Close()
|
||
|
|
opener := openerFunc(func(_ context.Context, channel string) (io.ReadWriteCloser, error) {
|
||
|
|
if channel != "CH01" {
|
||
|
|
t.Fatalf("channel = %s", channel)
|
||
|
|
}
|
||
|
|
return service, nil
|
||
|
|
})
|
||
|
|
payload := []byte("bounded-check")
|
||
|
|
var stdout bytes.Buffer
|
||
|
|
args := []string{"-direction=" + direction, "-operator-confirmed-ch01-com3"}
|
||
|
|
if direction == "tx" {
|
||
|
|
args = append(args, "-payload-base64=Ym91bmRlZC1jaGVjaw==")
|
||
|
|
go func() { _, _ = io.ReadFull(peer, make([]byte, len(payload))) }()
|
||
|
|
} else {
|
||
|
|
args = append(args, "-bytes=13")
|
||
|
|
go func() { _, _ = peer.Write(payload) }()
|
||
|
|
}
|
||
|
|
if code := run(args, &stdout, io.Discard, opener); code != 0 {
|
||
|
|
t.Fatalf("code = %d", code)
|
||
|
|
}
|
||
|
|
if stdout.String() == "" || strings.Contains(stdout.String(), string(payload)) {
|
||
|
|
t.Fatalf("unsafe report = %s", stdout.String())
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|