viewcontroller.swift 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. * Copyright 2019 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. import Foundation
  17. import Dispatch
  18. import GoogleDataTransport
  19. public extension ViewController {
  20. override func viewDidLoad() {
  21. super.viewDidLoad()
  22. Globals.SharedViewController = self
  23. }
  24. @IBAction func generateDataEvent(sender: AnyObject?) {
  25. print("Generating data event")
  26. let transportToUse = transport
  27. let event: GDTCOREvent = transportToUse.eventForTransport()
  28. let testMessage = FirelogTestMessageHolder()
  29. testMessage.root.identifier = "ios_test_app_data_event"
  30. testMessage.root.repeatedID = ["id1", "id2", "id3"]
  31. testMessage.root.warriorChampionships = 1_111_110
  32. testMessage.root.subMessage.starTrekData = "technoBabble".data(using: String.Encoding.utf8)!
  33. testMessage.root.subMessage.repeatedSubMessage = [
  34. SubMessageTwo(),
  35. SubMessageTwo(),
  36. ]
  37. testMessage.root.subMessage.repeatedSubMessage[0].samplingPercentage = 13.37
  38. event.dataObject = testMessage
  39. transportToUse.sendDataEvent(event)
  40. }
  41. @IBAction func generateTelemetryEvent(sender: AnyObject?) {
  42. print("Generating telemetry event")
  43. let transportToUse = transport
  44. let event: GDTCOREvent = transportToUse.eventForTransport()
  45. let testMessage = FirelogTestMessageHolder()
  46. testMessage.root.identifier = "ios_test_app_telemetry_event"
  47. testMessage.root.warriorChampionships = 1000
  48. testMessage.root.subMessage.repeatedSubMessage = [
  49. SubMessageTwo(),
  50. ]
  51. event.dataObject = testMessage
  52. transportToUse.sendTelemetryEvent(event)
  53. }
  54. @IBAction func generateHighPriorityEvent(sender: AnyObject?) {
  55. print("Generating high priority event")
  56. let transportToUse = transport
  57. let event: GDTCOREvent = transportToUse.eventForTransport()
  58. let testMessage = FirelogTestMessageHolder()
  59. testMessage.root.identifier = "ios_test_app_high_priority_event"
  60. testMessage.root.repeatedID = ["id1", "id2", "id3"]
  61. testMessage.root.warriorChampionships = 1337
  62. event.qosTier = GDTCOREventQoS.qoSFast
  63. event.dataObject = testMessage
  64. transportToUse.sendDataEvent(event)
  65. }
  66. @IBAction func generateWifiOnlyEvent(sender: AnyObject?) {
  67. print("Generating wifi only event")
  68. let transportToUse = transport
  69. let event: GDTCOREvent = transportToUse.eventForTransport()
  70. let testMessage = FirelogTestMessageHolder()
  71. testMessage.root.identifier = "ios_test_app_wifi_only_event"
  72. event.qosTier = GDTCOREventQoS.qoSWifiOnly
  73. event.dataObject = testMessage
  74. transportToUse.sendDataEvent(event)
  75. }
  76. @IBAction func generateDailyEvent(sender: AnyObject?) {
  77. print("Generating daily event")
  78. let transportToUse = transport
  79. let event: GDTCOREvent = transportToUse.eventForTransport()
  80. let testMessage = FirelogTestMessageHolder()
  81. testMessage.root.identifier = "ios_test_app_daily_event"
  82. testMessage.root.repeatedID = ["id1", "id2", "id3"]
  83. testMessage.root.warriorChampionships = 9001
  84. testMessage.root.subMessage.starTrekData = "engage!".data(using: String.Encoding.utf8)!
  85. testMessage.root.subMessage.repeatedSubMessage = [
  86. SubMessageTwo(),
  87. ]
  88. testMessage.root.subMessage.repeatedSubMessage[0].samplingPercentage = 100.0
  89. event.qosTier = GDTCOREventQoS.qoSDaily
  90. event.dataObject = testMessage
  91. transportToUse.sendDataEvent(event)
  92. }
  93. func beginMonkeyTest(completion: () -> Void) {
  94. print("Beginning monkey test")
  95. Globals.IsMonkeyTesting = true
  96. let sema: DispatchSemaphore = DispatchSemaphore(value: 0)
  97. var generateEvents = true
  98. DispatchQueue.global().asyncAfter(deadline: .now() + Globals.MonkeyTestLength) {
  99. generateEvents = false
  100. sema.signal()
  101. }
  102. func generateEvent() {
  103. DispatchQueue.global().asyncAfter(deadline: .now() + Double.random(in: 0 ..< 3.0)) {
  104. let generationFunctions = [
  105. self.generateDataEvent,
  106. self.generateTelemetryEvent,
  107. self.generateHighPriorityEvent,
  108. self.generateWifiOnlyEvent,
  109. self.generateDailyEvent,
  110. ]
  111. let randomIndex: Int = Int.random(in: 0 ..< generationFunctions.count)
  112. generationFunctions[randomIndex](self)
  113. }
  114. RunLoop.current.run(until: Date(timeIntervalSinceNow: Double.random(in: 0 ..< 1.5)))
  115. if generateEvents {
  116. generateEvent()
  117. }
  118. }
  119. generateEvent()
  120. sema.wait()
  121. Globals.IsMonkeyTesting = false
  122. completion()
  123. }
  124. }