diff options
-rw-r--r-- | flow-cleaner_test.go | 161 | ||||
-rw-r--r-- | testdata/jsoninput | 34 |
2 files changed, 179 insertions, 16 deletions
diff --git a/flow-cleaner_test.go b/flow-cleaner_test.go new file mode 100644 index 0000000..16bc3b0 --- /dev/null +++ b/flow-cleaner_test.go @@ -0,0 +1,161 @@ +package main + +import ( + "bufio" + "database/sql" + _ "github.com/go-sql-driver/mysql" + "io" + "os" + "testing" + "time" +) + +func TestCleaningFromJSON(t *testing.T) { + cfg := &Config{ + Limit: 0, + Interval: "5min", + Epsilon: 0, + DataSource: "json", + + DBConn: "", + DBName: "test", + CleanTable: "test_clean", + DBUser: "flowcleaner", + DBPass: "nil", + } + + testProcessFromStdin(t, cfg) + controlDB(t, cfg) +} + +func testProcessFromStdin(t *testing.T, cfg *Config) { + file, err := os.Open("testdata/jsoninput") + if err != nil { + t.Fatal(err) + } + + fakeStdin := make(chan []byte) + reader := bufio.NewReader(file) + go func() { + defer close(fakeStdin) + i := 0 + for i < 2 { + line, err := reader.ReadBytes('\n') + if err == io.EOF { + i++ + time.Sleep(2 * time.Second) + } else if err != nil { + t.Fatal(err) + } else { + fakeStdin <- line + } + } + }() + + rDatChan := parseRawData(fakeStdin, cfg) + err = cleanFromStdin(rDatChan, cfg) + if err != nil { + t.Fatal(err) + } +} + +func controlDB(t *testing.T, cfg *Config) { + db, err := sql.Open("mysql", cfg.DBUser+":"+cfg.DBPass+"@"+cfg.DBConn+"/"+cfg.DBName) + if err != nil { + t.Fatal("Failed to connect to db:", err) + } + defer db.Close() + + rows, err := db.Query("SELECT * FROM " + cfg.CleanTable) + if err != nil { + t.Fatal("Failed to select cleaned data:", err) + } + defer rows.Close() + + numRows := 0 + for rows.Next() { + numRows++ + } + if numRows != 14 { + t.Fatal("Wrong number of rows found in db") + } + + check1, err := db.Query("SELECT occurences, volume FROM " + cfg.CleanTable + " ORDER BY occurences DESC") + if err != nil { + t.Fatal("Failed to select occurences and volume:", err) + } + defer check1.Close() + var oc int + var vol string + + check1.Next() + check1.Scan(&oc, &vol) + if oc != 36 && vol == "0-199" { + t.Fatal("Failed oc 36, vol 0-199. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 20 && vol == "200-299" { + t.Fatal("Failed oc 20, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 18 && vol == "200-299" { + t.Fatal("Failed oc 18, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 14 && vol == "200-299" { + t.Fatal("Failed oc 14, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 12 && vol == "200-299" { + t.Fatal("Failed oc 12, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 10 && vol == "200-299" { + t.Fatal("Failed oc 10, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 8 && vol == "200-299" { + t.Fatal("Failed oc 8, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 7 && vol == "200-299" { + t.Fatal("Failed oc 7, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 6 && vol == "200-299" { + t.Fatal("Failed oc 6, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 4 && vol == "200-299" { + t.Fatal("Failed oc 4, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 2 && vol == "200-299" { + t.Fatal("Failed oc 2, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 1 && vol == "200-299" { + t.Fatal("Failed oc 1, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 0 && vol == "200-299" { + t.Fatal("Failed oc 0, vol 200-299. Actually was:", oc, vol) + } + check1.Next() + check1.Scan(&oc, &vol) + if oc != 0 && vol == "200-299" { + t.Fatal("Failed oc 0, vol 200-299. Actually was:", oc, vol) + } +} diff --git a/testdata/jsoninput b/testdata/jsoninput index 3695436..af1f8dc 100644 --- a/testdata/jsoninput +++ b/testdata/jsoninput @@ -1,16 +1,18 @@ -{"pkt_len_distrib": "0-199", "as_src": 1, "as_dst": 2, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} -{"pkt_len_distrib": "0-199", "as_src": 1, "as_dst": 2, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} -{"pkt_len_distrib": "0-199", "as_src": 1, "as_dst": 2, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} - -{"pkt_len_distrib": "200-299", "as_src": 1, "as_dst": 2, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} -{"pkt_len_distrib": "200-299", "as_src": 1, "as_dst": 2, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} - -{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} - -{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 5} - -{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 5} - -{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 2, "bytes": 3, "port_dst": 10, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 6} - -{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 2, "bytes": 3, "port_dst": 11, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 6} +---- +{"pkt_len_distrib": "0-199", "as_src": 1, "as_dst": 2, "packets": 5, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} +{"pkt_len_distrib": "0-199", "as_src": 1, "as_dst": 2, "packets": 6, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} +{"pkt_len_distrib": "0-199", "as_src": 1, "as_dst": 2, "packets": 7, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} +---- +{"pkt_len_distrib": "200-299", "as_src": 1, "as_dst": 2, "packets": 9, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} +{"pkt_len_distrib": "200-299", "as_src": 1, "as_dst": 2, "packets": 1, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} +---- +{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 7, "bytes": 3, "port_dst": 10, "ip_src": "1.1.1.1", "ip_dst": "2.2.2.2", "port_src": 5} +---- +{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 6, "bytes": 3, "port_dst": 10, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 5} +---- +{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 4, "bytes": 3, "port_dst": 10, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 5} +---- +{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 1, "bytes": 3, "port_dst": 10, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 6} +---- +{"pkt_len_distrib": "200-299", "as_src": 2, "as_dst": 3, "packets": 0, "bytes": 3, "port_dst": 11, "ip_src": "2.2.2.2", "ip_dst": "1.1.1.1", "port_src": 6} +---- |