@@ -316,3 +316,38 @@ func TestSeekFailure(t *testing.T) {
316316 t .Fatalf ("Seek(-1, 0, 0) return error with empty message" )
317317 }
318318}
319+
320+ func TestDup (t * testing.T ) {
321+ file , err := ioutil .TempFile ("" , "TestDup" )
322+ if err != nil {
323+ t .Fatalf ("Tempfile failed: %v" , err )
324+ }
325+ defer os .Remove (file .Name ())
326+ defer file .Close ()
327+ f := int (file .Fd ())
328+
329+ newFd , err := unix .Dup (f )
330+ if err != nil {
331+ t .Fatalf ("Dup: %v" , err )
332+ }
333+
334+ err = unix .Dup2 (newFd , newFd + 1 )
335+ if err != nil {
336+ t .Fatalf ("Dup2: %v" , err )
337+ }
338+
339+ b1 := []byte ("Test123" )
340+ b2 := make ([]byte , 7 )
341+ _ , err = unix .Write (newFd + 1 , b1 )
342+ if err != nil {
343+ t .Fatalf ("Write to dup2 fd failed: %v" , err )
344+ }
345+ _ , err = unix .Seek (f , 0 , 0 )
346+ _ , err = unix .Read (f , b2 )
347+ if err != nil {
348+ t .Fatalf ("Read back failed: %v" , err )
349+ }
350+ if string (b1 ) != string (b2 ) {
351+ t .Errorf ("Dup: stdout write not in file, expected %v, got %v" , string (b1 ), string (b2 ))
352+ }
353+ }
0 commit comments