1818package pipeline
1919
2020import (
21+ "github.com/json-iterator/go"
2122 "github.com/netobserv/flowlogs2metrics/pkg/config"
23+ "github.com/netobserv/flowlogs2metrics/pkg/pipeline/decode"
24+ "github.com/netobserv/flowlogs2metrics/pkg/pipeline/ingest"
2225 "github.com/netobserv/flowlogs2metrics/pkg/pipeline/transform"
2326 "github.com/netobserv/flowlogs2metrics/pkg/pipeline/write"
27+ "github.com/netobserv/flowlogs2metrics/pkg/test"
2428 "github.com/stretchr/testify/require"
2529 "testing"
2630)
@@ -37,3 +41,67 @@ func Test_transformToLoki(t *testing.T) {
3741 loki .Write (transformed )
3842 require .NoError (t , err )
3943}
44+
45+ const configTemplate = `---
46+ log-level: debug
47+ pipeline:
48+ ingest:
49+ type: file
50+ file:
51+ filename: ../../hack/examples/ocp-ipfix-flowlogs.json
52+ decode:
53+ type: json
54+ transform:
55+ - type: generic
56+ generic:
57+ - input: Bytes
58+ output: fl2m_bytes
59+ - input: DstAddr
60+ output: fl2m_dstAddr
61+ - input: DstPort
62+ output: fl2m_dstPort
63+ - input: Packets
64+ output: fl2m_packets
65+ - input: SrcAddr
66+ output: fl2m_srcAddr
67+ - input: SrcPort
68+ output: fl2m_srcPort
69+ extract:
70+ type: none
71+ encode:
72+ type: none
73+ write:
74+ type: none
75+ `
76+
77+ func Test_SimplePipeline (t * testing.T ) {
78+ var json = jsoniter .ConfigCompatibleWithStandardLibrary
79+ var mainPipeline * Pipeline
80+ var err error
81+ var b []byte
82+ v := test .InitConfig (t , configTemplate )
83+ config .Opt .PipeLine .Ingest .Type = "file"
84+ config .Opt .PipeLine .Decode .Type = "json"
85+ config .Opt .PipeLine .Extract .Type = "none"
86+ config .Opt .PipeLine .Encode .Type = "none"
87+ config .Opt .PipeLine .Write .Type = "none"
88+ config .Opt .PipeLine .Ingest .File .Filename = "../../hack/examples/ocp-ipfix-flowlogs.json"
89+
90+ val := v .Get ("pipeline.transform\n " )
91+ b , err = json .Marshal (& val )
92+ require .NoError (t , err )
93+ config .Opt .PipeLine .Transform = string (b )
94+
95+ mainPipeline , err = NewPipeline ()
96+ require .NoError (t , err )
97+
98+ // The file ingester reads the entire file, pushes it down the pipeline, and then exits
99+ // So we don't need to run it in a separate go-routine
100+ mainPipeline .Run ()
101+ // What is there left to check? Check length of saved data of each stage in private structure.
102+ ingester := mainPipeline .Ingester .(* ingest.IngestFile )
103+ decoder := mainPipeline .Decoder .(* decode.DecodeJson )
104+ writer := mainPipeline .Writer .(* write.WriteNone )
105+ require .Equal (t , len (ingester .PrevRecords ), len (decoder .PrevRecords ))
106+ require .Equal (t , len (ingester .PrevRecords ), len (writer .PrevRecords ))
107+ }
0 commit comments