dashboard_test.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package dashboard
  2. // import (
  3. // "bufio"
  4. // "encoding/json"
  5. // "fmt"
  6. // "github.com/flashmob/go-guerrilla/log"
  7. // "github.com/gorilla/websocket"
  8. // "net/url"
  9. // "os"
  10. // "regexp"
  11. // "strings"
  12. // "sync"
  13. // "testing"
  14. // "time"
  15. // )
  16. //
  17. // var testlog log.Logger
  18. //
  19. // func init() {
  20. // testlog, _ = log.GetLogger(log.OutputOff.String(), log.InfoLevel.String())
  21. // }
  22. //
  23. // func TestRunStop(t *testing.T) {
  24. //
  25. // config := &Config{
  26. // Enabled: true,
  27. // ListenInterface: ":8082",
  28. // TickInterval: "5s",
  29. // MaxWindow: "24h",
  30. // RankingUpdateInterval: "6h",
  31. // }
  32. //
  33. // var wg sync.WaitGroup
  34. //
  35. // wg.Add(1)
  36. // go func() {
  37. // Run(config, testlog)
  38. // wg.Done()
  39. // }()
  40. // // give Run some time to start
  41. // time.Sleep(time.Second)
  42. //
  43. // Stop()
  44. //
  45. // // Wait for Run() to exit
  46. // wg.Wait()
  47. //
  48. // }
  49. //
  50. // // Test if starting with a bad interface address
  51. // func TestRunStopBadAddress(t *testing.T) {
  52. //
  53. // config := &Config{
  54. // Enabled: true,
  55. // ListenInterface: "1.1.1.1:0",
  56. // TickInterval: "5s",
  57. // MaxWindow: "24h",
  58. // RankingUpdateInterval: "6h",
  59. // }
  60. //
  61. // var wg sync.WaitGroup
  62. //
  63. // wg.Add(1)
  64. // go func() {
  65. // Run(config, testlog)
  66. // wg.Done()
  67. // }()
  68. //
  69. // time.Sleep(time.Second * 2)
  70. //
  71. // Stop()
  72. //
  73. // // Wait for Run() to exit
  74. // wg.Wait()
  75. //
  76. // }
  77. //
  78. // // Run a simulation from an already captured log
  79. // func TestSimulationRun(t *testing.T) {
  80. //
  81. // config := &Config{
  82. // Enabled: true,
  83. // ListenInterface: ":8082",
  84. // TickInterval: "1s",
  85. // MaxWindow: "24h",
  86. // RankingUpdateInterval: "6h",
  87. // }
  88. //
  89. // var wg sync.WaitGroup
  90. //
  91. // wg.Add(1)
  92. // go func() {
  93. // Run(config, testlog)
  94. // wg.Done()
  95. // }()
  96. // // give Run some time to start
  97. // time.Sleep(time.Second)
  98. //
  99. // simulateEvents(t)
  100. //
  101. // Stop()
  102. //
  103. // // Wait for Run() to exit
  104. // wg.Wait()
  105. //
  106. // }
  107. //
  108. // func simulateEvents(t *testing.T) {
  109. //
  110. // file, err := os.Open("simulation.log")
  111. //
  112. // if err != nil {
  113. // panic(err.Error())
  114. // }
  115. //
  116. // defer file.Close()
  117. //
  118. // reader := bufio.NewReader(file)
  119. // scanner := bufio.NewScanner(reader)
  120. //
  121. // scanner.Split(bufio.ScanLines)
  122. //
  123. // testlog.AddHook(LogHook)
  124. //
  125. // // match with quotes or without, ie. time="..." or level=
  126. // r := regexp.MustCompile(`(.+?)=("[^"]*"|\S*)\s*`)
  127. // simStart := time.Now()
  128. // var start time.Time
  129. // for scanner.Scan() {
  130. // fields := map[string]interface{}{}
  131. // line := scanner.Text()
  132. // items := r.FindAllString(line, -1)
  133. // msg := ""
  134. // var logElapsed time.Duration
  135. // for i := range items {
  136. // key, val := parseItem(items[i])
  137. // //fmt.Println(key, val)
  138. // if key != "time" && key != "level" && key != "msg" {
  139. // fields[key] = val
  140. // }
  141. // if key == "msg" {
  142. // msg = val
  143. // }
  144. // if key == "time" {
  145. // tv, err := time.Parse(time.RFC3339, val)
  146. // if err != nil {
  147. // t.Error("invalid time", tv)
  148. // }
  149. // if start.IsZero() {
  150. // start = tv
  151. // }
  152. // fields["start"] = start
  153. // logElapsed = tv.Sub(start)
  154. // }
  155. //
  156. // }
  157. //
  158. // diff := time.Now().Sub(simStart) - logElapsed
  159. // time.Sleep(diff) // wait so that we don't go too fast
  160. // simStart = simStart.Add(diff) // catch up
  161. //
  162. // testlog.WithFields(fields).Info(msg)
  163. //
  164. // }
  165. // }
  166. //
  167. // // parseItem parses a log item, eg time="2017-03-24T11:55:44+11:00" will be:
  168. // // key = time and val will be 2017-03-24T11:55:44+11:00
  169. // func parseItem(item string) (key string, val string) {
  170. // arr := strings.Split(item, "=")
  171. // if len(arr) == 2 {
  172. // key = arr[0]
  173. // if arr[1][0:1] == "\"" {
  174. // pos := len(arr[1]) - 2
  175. // val = arr[1][1:pos]
  176. // } else {
  177. // val = arr[1]
  178. // }
  179. // }
  180. // val = strings.TrimSpace(val)
  181. // return
  182. // }
  183. //
  184. // // Run a simulation from an already captured log
  185. // // Then open a websocket and validate that we are getting some data from it
  186. // func TestWebsocket(t *testing.T) {
  187. //
  188. // config := &Config{
  189. // Enabled: true,
  190. // ListenInterface: "127.0.0.1:8082",
  191. // TickInterval: "1s",
  192. // MaxWindow: "24h",
  193. // RankingUpdateInterval: "6h",
  194. // }
  195. //
  196. // var wg sync.WaitGroup
  197. //
  198. // wg.Add(1)
  199. // go func() {
  200. // Run(config, testlog)
  201. // wg.Done()
  202. // }()
  203. //
  204. // var simWg sync.WaitGroup
  205. // go func() {
  206. // simWg.Add(1)
  207. // simulateEvents(t)
  208. // simWg.Done()
  209. // }()
  210. //
  211. // time.Sleep(time.Second)
  212. //
  213. // // lets talk to the websocket
  214. // u := url.URL{Scheme: "ws", Host: "127.0.0.1:8082", Path: "/ws"}
  215. //
  216. // c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
  217. // if err != nil {
  218. // t.Error("cant conect':", err)
  219. // return
  220. // }
  221. //
  222. // simWg.Add(1)
  223. // go func() {
  224. // defer func() {
  225. // simWg.Done()
  226. // }()
  227. // i := 0
  228. // for {
  229. // c.SetReadDeadline(time.Now().Add(time.Second + 5))
  230. // _, msg, err := c.ReadMessage()
  231. // if err != nil {
  232. // fmt.Println("socket err:", err)
  233. // t.Error("websocket failed to connect")
  234. // return
  235. // }
  236. // var objmap map[string]*json.RawMessage
  237. // json.Unmarshal(msg, &objmap)
  238. //
  239. // if pl, ok := objmap["payload"]; ok {
  240. // df := &dataFrame{}
  241. // json.Unmarshal(*pl, &df)
  242. // if df.NClients.Y > 10 && len(df.TopHelo) > 10 && len(df.TopDomain) > 10 && len(df.TopIP) > 10 {
  243. // return
  244. // }
  245. // }
  246. // fmt.Println("recv:", string(msg))
  247. // i++
  248. // if i > 2 {
  249. // t.Error("Websocket did get find expected result")
  250. // return
  251. // }
  252. // }
  253. //
  254. // }()
  255. // simWg.Wait() // wait for sim to exit, wait for websocket to finish reading
  256. // Stop()
  257. // // Wait for Run() to exit
  258. // wg.Wait()
  259. // c.Close()
  260. //
  261. // }