1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
// Copyright (c) 2019, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE.md file distributed with the sources of this project regarding your
// rights to use or distribute this software.
package copy
import (
"bytes"
"testing"
"github.com/sylabs/singularity/v4/internal/pkg/test"
)
func TestMultiWriter(t *testing.T) {
test.DropPrivilege(t)
defer test.ResetPrivilege(t)
// Create multiwriter instance
mw := &MultiWriter{}
// Write some bytes, not duplicated since there is no writer
n, err := mw.Write([]byte("test"))
if err != nil {
t.Error(err)
}
if n != 4 {
t.Errorf("wrong number of bytes written")
}
// Create two writers
buf1 := new(bytes.Buffer)
buf2 := new(bytes.Buffer)
// no effect
mw.Add(nil)
// Add first writer
mw.Add(buf1)
// Write some bytes
n, err = mw.Write([]byte("test"))
if err != nil {
t.Error(err)
}
if n != 4 {
t.Errorf("wrong number of bytes written")
}
// Check if first writer get the right content
if buf1.String() != "test" {
t.Errorf("wrong data returned")
}
// Reset buffer content for later check
buf1.Reset()
// Remove it from writer queue
mw.Del(buf1)
// Add second writer
mw.Add(buf2)
n, err = mw.Write([]byte("test"))
if err != nil {
t.Error(err)
}
if n != 4 {
t.Errorf("wrong number of bytes written")
}
// Check if second writer get the right content
if buf2.String() != "test" {
t.Errorf("wrong data returned")
}
// Check that first writer has empty buffer
if buf1.String() != "" {
t.Errorf("unexpected data in buf1")
}
mw.Del(buf2)
}
|