123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- //
- // ViewController.swift
- // Autobahn
- //
- // Created by Dalton Cherry on 7/24/15.
- // Copyright (c) 2015 vluxe. All rights reserved.
- //
- import UIKit
- import Starscream
- class ViewController: UIViewController {
-
- let host = "localhost:9001"
- var socketArray = [WebSocket]()
- var caseCount = 300 //starting cases
- override func viewDidLoad() {
- super.viewDidLoad()
- getCaseCount()
- //getTestInfo(1)
- //runTest(304)
- }
-
- func removeSocket(_ s: WebSocket?) {
- guard let s = s else {return}
- socketArray = socketArray.filter{$0 !== s}
- }
-
- func getCaseCount() {
- let req = URLRequest(url: URL(string: "ws://\(host)/getCaseCount")!)
- let s = WebSocket(request: req)
- socketArray.append(s)
- s.onEvent = { [weak self] event in
- switch event {
- case .text(let string):
- if let c = Int(string) {
- print("number of cases is: \(c)")
- self?.caseCount = c
- }
- case .disconnected(_, _):
- self?.runTest(1)
- self?.removeSocket(s)
- default:
- break
- }
- }
- s.connect()
- }
-
- func getTestInfo(_ caseNum: Int) {
- let s = createSocket("getCaseInfo",caseNum)
- socketArray.append(s)
- // s.onText = { (text: String) in
- // let data = text.dataUsingEncoding(NSUTF8StringEncoding)
- // do {
- // let resp: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data!,
- // options: NSJSONReadingOptions())
- // if let dict = resp as? Dictionary<String,String> {
- // let num = dict["id"]
- // let summary = dict["description"]
- // if let n = num, let sum = summary {
- // print("running case:\(caseNum) id:\(n) summary: \(sum)")
- // }
- // }
- // } catch {
- // print("error parsing the json")
- // }
- // }
- var once = false
- s.onEvent = { [weak self] event in
- switch event {
- case .disconnected(_, _), .error(_):
- if !once {
- once = true
- self?.runTest(caseNum)
- }
- self?.removeSocket(s)
- default:
- break
- }
- }
- s.connect()
- }
-
- func runTest(_ caseNum: Int) {
- let s = createSocket("runCase",caseNum)
- self.socketArray.append(s)
-
- var once = false
- s.onEvent = { [weak self, weak s] event in
- switch event {
- case .disconnected(_, _), .error(_):
- if !once {
- once = true
- print("case:\(caseNum) finished")
- //self?.verifyTest(caseNum) //disabled since it slows down the tests
- let nextCase = caseNum+1
- if nextCase <= (self?.caseCount)! {
- self?.runTest(nextCase)
- //self?.getTestInfo(nextCase) //disabled since it slows down the tests
- } else {
- self?.finishReports()
- }
- self?.removeSocket(s)
- }
- self?.removeSocket(s)
- case .text(let string):
- s?.write(string: string)
- case .binary(let data):
- s?.write(data: data)
- // case .error(let error):
- // print("got an error: \(error)")
- default:
- break
- }
- }
- s.connect()
- }
-
- // func verifyTest(_ caseNum: Int) {
- // let s = createSocket("getCaseStatus",caseNum)
- // self.socketArray.append(s)
- // s.onText = { (text: String) in
- // let data = text.data(using: String.Encoding.utf8)
- // do {
- // let resp: Any? = try JSONSerialization.jsonObject(with: data!,
- // options: JSONSerialization.ReadingOptions())
- // if let dict = resp as? Dictionary<String,String> {
- // if let status = dict["behavior"] {
- // if status == "OK" {
- // print("SUCCESS: \(caseNum)")
- // return
- // }
- // }
- // print("FAILURE: \(caseNum)")
- // }
- // } catch {
- // print("error parsing the json")
- // }
- // }
- // var once = false
- // s.onDisconnect = { [weak self, weak s] (error: Error?) in
- // if !once {
- // once = true
- // let nextCase = caseNum+1
- // print("next test is: \(nextCase)")
- // if nextCase <= (self?.caseCount)! {
- // self?.getTestInfo(nextCase)
- // } else {
- // self?.finishReports()
- // }
- // }
- // self?.removeSocket(s)
- // }
- // s.connect()
- // }
-
- func finishReports() {
- let s = createSocket("updateReports",0)
- self.socketArray.append(s)
- s.onEvent = { [weak self, weak s] event in
- switch event {
- case .disconnected(_, _):
- print("finished all the tests!")
- self?.removeSocket(s)
- default:
- break
- }
- }
- s.connect()
- }
-
- func createSocket(_ cmd: String, _ caseNum: Int) -> WebSocket {
- let req = URLRequest(url: URL(string: "ws://\(host)\(buildPath(cmd,caseNum))")!)
- //return WebSocket(request: req, compressionHandler: WSCompression())
- return WebSocket(request: req)
- }
-
- func buildPath(_ cmd: String, _ caseNum: Int) -> String {
- return "/\(cmd)?case=\(caseNum)&agent=Starscream"
- }
- }
|