github.com/Jeffail/benthos/v3@v3.65.0/public/service/config_output_test.go (about) 1 package service 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestConfigOutput(t *testing.T) { 15 tmpDir := t.TempDir() 16 17 testFile := filepath.Join(tmpDir, "foo.txt") 18 19 spec := NewConfigSpec(). 20 Field(NewOutputField("a")) 21 22 parsedConfig, err := spec.ParseYAML(fmt.Sprintf(` 23 a: 24 file: 25 path: %v 26 codec: lines 27 `, testFile), nil) 28 require.NoError(t, err) 29 30 output, err := parsedConfig.FieldOutput("a") 31 require.NoError(t, err) 32 33 require.NoError(t, output.Write(context.Background(), NewMessage([]byte("first line")))) 34 require.NoError(t, output.WriteBatch(context.Background(), MessageBatch{ 35 NewMessage([]byte("second line")), 36 NewMessage([]byte("third line")), 37 })) 38 39 require.NoError(t, output.Close(context.Background())) 40 41 resultBytes, err := os.ReadFile(testFile) 42 require.NoError(t, err) 43 assert.Equal(t, "first line\nsecond line\nthird line\n\n", string(resultBytes)) 44 } 45 46 func TestConfigOutputList(t *testing.T) { 47 tmpDir := t.TempDir() 48 49 firstFile := filepath.Join(tmpDir, "foo.txt") 50 secondFile := filepath.Join(tmpDir, "bar.txt") 51 52 spec := NewConfigSpec(). 53 Field(NewOutputListField("a")) 54 55 parsedConfig, err := spec.ParseYAML(fmt.Sprintf(` 56 a: 57 - file: 58 path: %v 59 codec: lines 60 - file: 61 path: %v 62 codec: lines 63 `, firstFile, secondFile), nil) 64 require.NoError(t, err) 65 66 outputs, err := parsedConfig.FieldOutputList("a") 67 require.NoError(t, err) 68 require.Len(t, outputs, 2) 69 70 require.NoError(t, outputs[0].Write(context.Background(), NewMessage([]byte("first line")))) 71 require.NoError(t, outputs[1].Write(context.Background(), NewMessage([]byte("second line")))) 72 73 require.NoError(t, outputs[0].Close(context.Background())) 74 require.NoError(t, outputs[1].Close(context.Background())) 75 76 resultBytes, err := os.ReadFile(firstFile) 77 require.NoError(t, err) 78 assert.Equal(t, "first line\n", string(resultBytes)) 79 80 resultBytes, err = os.ReadFile(secondFile) 81 require.NoError(t, err) 82 assert.Equal(t, "second line\n", string(resultBytes)) 83 }