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  }