viewcontroller.swift 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. event.customPrioritizationParams = ["needs_network_connection_info": true]
  40. transportToUse.sendDataEvent(event)
  41. }
  42. @IBAction func generateTelemetryEvent(sender: AnyObject?) {
  43. print("Generating telemetry event")
  44. let transportToUse = transport
  45. let event: GDTCOREvent = transportToUse.eventForTransport()
  46. let testMessage = FirelogTestMessageHolder()
  47. testMessage.root.identifier = "ios_test_app_telemetry_event"
  48. testMessage.root.warriorChampionships = 1000
  49. testMessage.root.subMessage.repeatedSubMessage = [
  50. SubMessageTwo(),
  51. ]
  52. event.dataObject = testMessage
  53. event.customPrioritizationParams = ["needs_network_connection_info": true]
  54. transportToUse.sendTelemetryEvent(event)
  55. }
  56. @IBAction func generateHighPriorityEvent(sender: AnyObject?) {
  57. print("Generating high priority event")
  58. let transportToUse = transport
  59. let event: GDTCOREvent = transportToUse.eventForTransport()
  60. let testMessage = FirelogTestMessageHolder()
  61. testMessage.root.identifier = "ios_test_app_high_priority_event"
  62. testMessage.root.repeatedID = ["id1", "id2", "id3"]
  63. testMessage.root.warriorChampionships = 1337
  64. event.qosTier = GDTCOREventQoS.qoSFast
  65. event.dataObject = testMessage
  66. event.customPrioritizationParams = ["needs_network_connection_info": true]
  67. transportToUse.sendDataEvent(event)
  68. }
  69. @IBAction func generateWifiOnlyEvent(sender: AnyObject?) {
  70. print("Generating wifi only event")
  71. let transportToUse = transport
  72. let event: GDTCOREvent = transportToUse.eventForTransport()
  73. let testMessage = FirelogTestMessageHolder()
  74. testMessage.root.identifier = "ios_test_app_wifi_only_event"
  75. event.qosTier = GDTCOREventQoS.qoSWifiOnly
  76. event.dataObject = testMessage
  77. event.customPrioritizationParams = ["needs_network_connection_info": true]
  78. transportToUse.sendDataEvent(event)
  79. }
  80. @IBAction func generateDailyEvent(sender: AnyObject?) {
  81. print("Generating daily event")
  82. let transportToUse = transport
  83. let event: GDTCOREvent = transportToUse.eventForTransport()
  84. let testMessage = FirelogTestMessageHolder()
  85. testMessage.root.identifier = "ios_test_app_daily_event"
  86. testMessage.root.repeatedID = ["id1", "id2", "id3"]
  87. testMessage.root.warriorChampionships = 9001
  88. testMessage.root.subMessage.starTrekData = "engage!".data(using: String.Encoding.utf8)!
  89. testMessage.root.subMessage.repeatedSubMessage = [
  90. SubMessageTwo(),
  91. ]
  92. testMessage.root.subMessage.repeatedSubMessage[0].samplingPercentage = 100.0
  93. event.qosTier = GDTCOREventQoS.qoSDaily
  94. event.dataObject = testMessage
  95. event.customPrioritizationParams = ["needs_network_connection_info": true]
  96. transportToUse.sendDataEvent(event)
  97. }
  98. func beginMonkeyTest(completion: () -> Void) {
  99. print("Beginning monkey test")
  100. Globals.IsMonkeyTesting = true
  101. let sema: DispatchSemaphore = DispatchSemaphore(value: 0)
  102. var generateEvents = true
  103. DispatchQueue.global().asyncAfter(deadline: .now() + Globals.MonkeyTestLength) {
  104. generateEvents = false
  105. sema.signal()
  106. }
  107. func generateEvent() {
  108. DispatchQueue.global().asyncAfter(deadline: .now() + Double.random(in: 0 ..< 3.0)) {
  109. let generationFunctions = [
  110. self.generateDataEvent,
  111. self.generateTelemetryEvent,
  112. self.generateHighPriorityEvent,
  113. self.generateWifiOnlyEvent,
  114. self.generateDailyEvent,
  115. ]
  116. let randomIndex: Int = Int.random(in: 0 ..< generationFunctions.count)
  117. generationFunctions[randomIndex](self)
  118. }
  119. RunLoop.current.run(until: Date(timeIntervalSinceNow: Double.random(in: 0 ..< 1.5)))
  120. if generateEvents {
  121. generateEvent()
  122. }
  123. }
  124. generateEvent()
  125. sema.wait()
  126. Globals.IsMonkeyTesting = false
  127. completion()
  128. }
  129. }