summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Langesten <daniel.langest@gmail.com>2015-03-19 11:58:57 +0100
committerDaniel Langesten <daniel.langest@gmail.com>2015-03-19 11:58:57 +0100
commitbcbc92280377217e0c68260998408cb38b1c3aa8 (patch)
tree6ae4bd4d779a48fed41c1d2583483ce885d15ddb
parent8a24169751948e0300e9b2bc13e5482cea546cec (diff)
added testcode
-rw-r--r--flow-cleaner_test.go161
-rw-r--r--testdata/jsoninput34
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}
+----