github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/cmds/core/cat/cat_test.go (about) 1 // Copyright 2012 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // by Rafael Campos Nunes <rafaelnunes@engineer.com> 6 7 package main 8 9 import ( 10 "bytes" 11 "fmt" 12 "os" 13 "path" 14 "path/filepath" 15 "testing" 16 ) 17 18 // setup writes a set of files, putting 1 byte in each file. 19 func setup(t *testing.T, data []byte) (string, error) { 20 t.Logf(":: Creating simulation data. ") 21 dir := t.TempDir() 22 23 for i, d := range data { 24 n := fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i) 25 if err := os.WriteFile(n, []byte{d}, 0o666); err != nil { 26 return "", err 27 } 28 } 29 30 return dir, nil 31 } 32 33 // TestCat test cat function against 4 files, in each file it is written a bit of someData 34 // array and the test expect the cat to return the exact same bit from someData array with 35 // the corresponding file. 36 func TestCat(t *testing.T) { 37 var files []string 38 someData := []byte{'l', 2, 3, 4, 'd'} 39 40 dir, err := setup(t, someData) 41 if err != nil { 42 t.Fatalf("setup has failed, %v", err) 43 } 44 45 for i := range someData { 46 files = append(files, fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i)) 47 } 48 var out bytes.Buffer 49 if err := run(files, nil, &out); err != nil { 50 t.Fatal(err) 51 } 52 53 if !bytes.Equal(out.Bytes(), someData) { 54 t.Fatalf("Reading files failed: got %v, want %v", out.Bytes(), someData) 55 } 56 } 57 58 func TestCatPipe(t *testing.T) { 59 var inputbuf bytes.Buffer 60 teststring := "testdata" 61 fmt.Fprintf(&inputbuf, "%s", teststring) 62 63 var out bytes.Buffer 64 65 if err := cat(&inputbuf, &out); err != nil { 66 t.Error(err) 67 } 68 if out.String() != teststring { 69 t.Errorf("CatPipe: Want %q Got: %q", teststring, out.String()) 70 } 71 } 72 73 func TestRunFiles(t *testing.T) { 74 var files []string 75 someData := []byte{'l', 2, 3, 4, 'd'} 76 77 dir, err := setup(t, someData) 78 if err != nil { 79 t.Fatalf("setup has failed, %v", err) 80 } 81 82 for i := range someData { 83 files = append(files, fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i)) 84 } 85 86 var out bytes.Buffer 87 if err := run(files, nil, &out); err != nil { 88 t.Error(err) 89 } 90 if !bytes.Equal(out.Bytes(), someData) { 91 t.Fatalf("Reading files failed: got %v, want %v", out.Bytes(), someData) 92 } 93 } 94 95 func TestRunFilesError(t *testing.T) { 96 var files []string 97 someData := []byte{'l', 2, 3, 4, 'd'} 98 99 dir, err := setup(t, someData) 100 if err != nil { 101 t.Fatalf("setup has failed, %v", err) 102 } 103 104 for i := range someData { 105 files = append(files, fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i)) 106 } 107 filenotexist := "testdata/doesnotexist.txt" 108 files = append(files, filenotexist) 109 var in, out bytes.Buffer 110 if err := run(files, &in, &out); err == nil { 111 t.Error("function run succeeded but should have failed") 112 } 113 } 114 115 func TestRunNoArgs(t *testing.T) { 116 var in, out bytes.Buffer 117 inputdata := "teststring" 118 fmt.Fprintf(&in, "%s", inputdata) 119 args := make([]string, 0) 120 if err := run(args, &in, &out); err != nil { 121 t.Error(err) 122 } 123 if out.String() != inputdata { 124 t.Errorf("Want: %q Got: %q", inputdata, out.String()) 125 } 126 } 127 128 func TestCatDash(t *testing.T) { 129 tempDir := t.TempDir() 130 131 f1 := path.Join(tempDir, "f1") 132 err := os.WriteFile(f1, []byte("line1\nline2\n"), 0o666) 133 if err != nil { 134 t.Fatal(err) 135 } 136 137 f2 := path.Join(tempDir, "f2") 138 err = os.WriteFile(f2, []byte("line4\nline5\n"), 0o666) 139 if err != nil { 140 t.Fatal(err) 141 } 142 143 var stdin, stdout bytes.Buffer 144 stdin.WriteString("line3\n") 145 146 if err = run([]string{f1, "-", f2}, &stdin, &stdout); err != nil { 147 t.Fatal(err) 148 } 149 150 want := "line1\nline2\nline3\nline4\nline5\n" 151 got := stdout.String() 152 153 if got != want { 154 t.Errorf("want: %s, got: %s", want, got) 155 } 156 }