viewcontroller.swift 5.6 KB

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