github.com/awesome-flow/flow@v0.0.3-0.20190918184116-508d75d68a2c/pkg/corev1alpha1/actor/sink_head_file_test.go (about)

     1  package actor
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"reflect"
     7  	"testing"
     8  
     9  	testutil "github.com/awesome-flow/flow/pkg/util/test"
    10  )
    11  
    12  type testWriteCloser struct {
    13  	bytes.Buffer
    14  }
    15  
    16  var _ (io.WriteCloser) = (*testWriteCloser)(nil)
    17  
    18  func NewTestWriteCloser() io.WriteCloser {
    19  	return &testWriteCloser{}
    20  }
    21  
    22  func (wc *testWriteCloser) Close() error {
    23  	return nil
    24  }
    25  
    26  func TestSinkHeadFileConnect(t *testing.T) {
    27  	out := NewTestWriteCloser()
    28  	opener := func(string) (io.WriteCloser, error) {
    29  		return out, nil
    30  	}
    31  	head, err := NewSinkHeadFile("/dev/null")
    32  	if err != nil {
    33  		t.Fatalf("failed to create file sink head: %s", err)
    34  	}
    35  	head.Opener = opener
    36  	if err := head.Connect(); err != nil {
    37  		t.Fatalf("failed to connect file sink head: %s", err)
    38  	}
    39  	if !reflect.DeepEqual(head.out, out) {
    40  		t.Fatalf("unexpected head out: got: %+v, want: %+v", head.out, out)
    41  	}
    42  }
    43  
    44  func TestSinkHeadFileWrite(t *testing.T) {
    45  	out := NewTestWriteCloser()
    46  	opener := func(string) (io.WriteCloser, error) {
    47  		return out, nil
    48  	}
    49  	head, err := NewSinkHeadFile("/dev/null")
    50  	if err != nil {
    51  		t.Fatalf("failed to create file sink head: %s", err)
    52  	}
    53  	head.Opener = opener
    54  	if err := head.Connect(); err != nil {
    55  		t.Fatalf("failed to connect file sink head: %s", err)
    56  	}
    57  	data := testutil.RandBytes(1024)
    58  	n, err, rec := head.Write(data)
    59  	if err != nil {
    60  		t.Fatalf("unexpected error: %s", err)
    61  	}
    62  	if n != len(data)+2 {
    63  		t.Fatalf("unexpected write bytes length: got: %d, want: %d", n, len(data)+2)
    64  	}
    65  	if rec {
    66  		t.Fatalf("unexpected reconnect flag: got: %t, want: false", rec)
    67  	}
    68  	gotdata := out.(*testWriteCloser).Bytes()
    69  	wantdata := append(data, []byte("\r\n")...)
    70  	if !reflect.DeepEqual(gotdata, wantdata) {
    71  		t.Fatalf("unexpected buf contents: got: %q, want: %q", gotdata, wantdata)
    72  	}
    73  }