github.com/Jeffail/benthos/v3@v3.65.0/lib/input/reader/files_test.go (about) 1 package reader 2 3 import ( 4 "context" 5 "os" 6 "path" 7 "reflect" 8 "testing" 9 10 "github.com/Jeffail/benthos/v3/lib/response" 11 "github.com/Jeffail/benthos/v3/lib/types" 12 ) 13 14 //------------------------------------------------------------------------------ 15 16 func TestFilesDirectory(t *testing.T) { 17 tmpDir := t.TempDir() 18 19 tmpInnerDir, err := os.MkdirTemp(tmpDir, "benthos_inner") 20 if err != nil { 21 t.Fatal(err) 22 } 23 24 var tmpFile *os.File 25 if tmpFile, err = os.CreateTemp(tmpDir, "f1"); err != nil { 26 t.Fatal(err) 27 } 28 defer os.Remove(tmpFile.Name()) 29 if _, err = tmpFile.WriteString("foo"); err != nil { 30 t.Fatal(err) 31 } 32 if err = tmpFile.Close(); err != nil { 33 t.Fatal(err) 34 } 35 36 if tmpFile, err = os.CreateTemp(tmpInnerDir, "f2"); err != nil { 37 t.Fatal(err) 38 } 39 if _, err = tmpFile.WriteString("bar"); err != nil { 40 t.Fatal(err) 41 } 42 if err = tmpFile.Close(); err != nil { 43 t.Fatal(err) 44 } 45 46 exp := map[string]struct{}{ 47 "foo": {}, 48 "bar": {}, 49 } 50 act := map[string]struct{}{} 51 52 conf := NewFilesConfig() 53 conf.Path = tmpDir 54 55 var f Type 56 if f, err = NewFiles(conf); err != nil { 57 t.Fatal(err) 58 } 59 60 if err = f.Connect(); err != nil { 61 t.Error(err) 62 } 63 64 var msg types.Message 65 if msg, err = f.Read(); err != nil { 66 t.Error(err) 67 } else { 68 resStr := string(msg.Get(0).Get()) 69 if _, exists := act[resStr]; exists { 70 t.Errorf("Received duplicate message: %v", resStr) 71 } 72 act[resStr] = struct{}{} 73 } 74 if msg, err = f.Read(); err != nil { 75 t.Error(err) 76 } else { 77 resStr := string(msg.Get(0).Get()) 78 if _, exists := act[resStr]; exists { 79 t.Errorf("Received duplicate message: %v", resStr) 80 } 81 act[resStr] = struct{}{} 82 } 83 if _, err = f.Read(); err != types.ErrTypeClosed { 84 t.Error(err) 85 } 86 87 if !reflect.DeepEqual(exp, act) { 88 t.Errorf("Wrong result: %v != %v", act, exp) 89 } 90 } 91 92 func TestFilesFile(t *testing.T) { 93 tmpFile, err := os.CreateTemp("", "f1") 94 if err != nil { 95 t.Fatal(err) 96 } 97 defer os.Remove(tmpFile.Name()) 98 if _, err = tmpFile.WriteString("foo"); err != nil { 99 t.Fatal(err) 100 } 101 if err = tmpFile.Close(); err != nil { 102 t.Fatal(err) 103 } 104 105 exp := map[string]struct{}{ 106 "foo": {}, 107 } 108 act := map[string]struct{}{} 109 110 conf := NewFilesConfig() 111 conf.Path = tmpFile.Name() 112 113 var f *Files 114 if f, err = NewFiles(conf); err != nil { 115 t.Fatal(err) 116 } 117 118 if err = f.Connect(); err != nil { 119 t.Error(err) 120 } 121 122 var msg types.Message 123 var ackFn AsyncAckFn 124 if msg, ackFn, err = f.ReadWithContext(context.Background()); err != nil { 125 t.Error(err) 126 } else { 127 resStr := string(msg.Get(0).Get()) 128 if _, exists := act[resStr]; exists { 129 t.Errorf("Received duplicate message: %v", resStr) 130 } 131 act[resStr] = struct{}{} 132 if err = ackFn(context.Background(), response.NewAck()); err != nil { 133 t.Error(err) 134 } 135 } 136 if _, err = f.Read(); err != types.ErrTypeClosed { 137 t.Error(err) 138 } 139 140 if !reflect.DeepEqual(exp, act) { 141 t.Errorf("Wrong result: %v != %v", act, exp) 142 } 143 } 144 145 func TestFilesBadPath(t *testing.T) { 146 conf := NewFilesConfig() 147 conf.Path = "fdgdfkte34%#@$%#$%KL@#K$@:L#$23k;32l;23" 148 149 if _, err := NewFiles(conf); err == nil { 150 t.Error("Expected error from bad path") 151 } 152 } 153 154 func TestFilesDirectoryDelete(t *testing.T) { 155 tmpDir := t.TempDir() 156 157 tmpFile, err := os.CreateTemp(tmpDir, "f1") 158 if err != nil { 159 t.Fatal(err) 160 } 161 if _, err = tmpFile.WriteString("foo"); err != nil { 162 t.Fatal(err) 163 } 164 if err = tmpFile.Close(); err != nil { 165 t.Fatal(err) 166 } 167 168 exp := map[string]struct{}{ 169 "foo": {}, 170 } 171 act := map[string]struct{}{} 172 173 conf := NewFilesConfig() 174 conf.Path = tmpDir 175 conf.DeleteFiles = true 176 177 var f Type 178 if f, err = NewFiles(conf); err != nil { 179 t.Fatal(err) 180 } 181 182 if err = f.Connect(); err != nil { 183 t.Error(err) 184 } 185 186 var msg types.Message 187 if msg, err = f.Read(); err != nil { 188 t.Error(err) 189 } else { 190 resStr := string(msg.Get(0).Get()) 191 if _, exists := act[resStr]; exists { 192 t.Errorf("Received duplicate message: %v", resStr) 193 } 194 act[resStr] = struct{}{} 195 } 196 if _, err = f.Read(); err != types.ErrTypeClosed { 197 t.Error(err) 198 } 199 200 if _, err := os.Stat(path.Join(tmpDir, "f1")); err != nil { 201 if !os.IsNotExist(err) { 202 t.Errorf("Expected deleted file, received: %v", err) 203 } 204 } else { 205 t.Error("Expected deleted file") 206 } 207 208 if !reflect.DeepEqual(exp, act) { 209 t.Errorf("Wrong result: %v != %v", act, exp) 210 } 211 } 212 213 //------------------------------------------------------------------------------