Skip to content

Commit 0b1cb06

Browse files
authored
Apply development environment to the Protos. (#10474)
1 parent 75b63b7 commit 0b1cb06

File tree

6 files changed

+107
-1
lines changed

6 files changed

+107
-1
lines changed

FirebaseSessions/Sources/ApplicationInfo.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ import Foundation
1818
@_implementationOnly import FirebaseCore
1919
@_implementationOnly import GoogleUtilities
2020

21+
/// Development environment for the application.
22+
enum DevEnvironment: String {
23+
case prod // Prod environment
24+
case staging // Staging environment
25+
case autopush // Autopush environment
26+
}
27+
2128
protocol ApplicationInfoProtocol {
2229
/// Google App ID / GMP App ID
2330
var appID: String { get }
@@ -33,16 +40,22 @@ protocol ApplicationInfoProtocol {
3340

3441
/// Validated Mobile Country Code and Mobile Network Code
3542
var mccMNC: String { get }
43+
44+
/// Development environment on which the application is running.
45+
var environment: DevEnvironment { get }
3646
}
3747

3848
class ApplicationInfo: ApplicationInfoProtocol {
3949
let appID: String
4050

4151
private let networkInfo: NetworkInfoProtocol
52+
private let envParams: [String: String]
4253

43-
init(appID: String, networkInfo: NetworkInfoProtocol = NetworkInfo()) {
54+
init(appID: String, networkInfo: NetworkInfoProtocol = NetworkInfo(),
55+
envParams: [String: String] = ProcessInfo.processInfo.environment) {
4456
self.appID = appID
4557
self.networkInfo = networkInfo
58+
self.envParams = envParams
4659
}
4760

4861
var bundleID: String {
@@ -63,4 +76,12 @@ class ApplicationInfo: ApplicationInfoProtocol {
6376
var mccMNC: String {
6477
return FIRSESValidateMccMnc(networkInfo.mobileCountryCode, networkInfo.mobileNetworkCode) ?? ""
6578
}
79+
80+
var environment: DevEnvironment {
81+
if let environment = envParams["FirebaseSessionsRunEnvironment"] {
82+
return DevEnvironment(rawValue: environment.trimmingCharacters(in: .whitespaces).lowercased())
83+
?? DevEnvironment.prod
84+
}
85+
return DevEnvironment.prod
86+
}
6687
}

FirebaseSessions/Sources/Development/DevEventConsoleLogger.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class DevEventConsoleLogger: EventGDTLoggerProtocol {
5656
.mobile_subtype.rawValue)
5757
os_name: \(proto.application_info.apple_app_info.os_name.description)
5858
mcc_mnc: \(proto.application_info.apple_app_info.mcc_mnc.description)
59+
log_environment: \(proto.application_info.log_environment)
5960
"""
6061

6162
Logger.logInfo(logOutput)

FirebaseSessions/Sources/SessionStartEvent.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class SessionStartEvent: NSObject, GDTCOREventDataObject {
3838

3939
proto.application_info.app_id = makeProtoString(appInfo.appID)
4040
proto.application_info.session_sdk_version = makeProtoString(appInfo.sdkVersion)
41+
proto.application_info.log_environment = convertLogEnvironment(environment: appInfo.environment)
4142
// proto.application_info.device_model = makeProtoString(appInfo.deviceModel)
4243
// proto.application_info.development_platform_name;
4344
// proto.application_info.development_platform_version;
@@ -124,4 +125,17 @@ class SessionStartEvent: NSObject, GDTCOREventDataObject {
124125
}
125126
return proto
126127
}
128+
129+
/// Converts the provided log environment to its Proto format.
130+
private func convertLogEnvironment(environment: DevEnvironment)
131+
-> firebase_appquality_sessions_LogEnvironment {
132+
switch environment {
133+
case .prod:
134+
return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_PROD
135+
case .staging:
136+
return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_STAGING
137+
case .autopush:
138+
return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_AUTOPUSH
139+
}
140+
}
127141
}

FirebaseSessions/Tests/Unit/ApplicationInfoTests.swift

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,46 @@ class ApplicationInfoTests: XCTestCase {
6262
XCTAssertEqual(appInfo.mccMNC, "")
6363
}
6464
}
65+
66+
func test_LogEnvironment_hasProdAsDefault() {
67+
XCTAssertEqual(appInfo.environment, .prod)
68+
}
69+
70+
func test_LogEnvironment_takesOverrideValues() {
71+
var envValues = ["FirebaseSessionsRunEnvironment": "prod"]
72+
var appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
73+
XCTAssertEqual(appInfo.environment, .prod)
74+
75+
envValues = ["FirebaseSessionsRunEnvironment": "PROD"]
76+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
77+
XCTAssertEqual(appInfo.environment, .prod)
78+
79+
// Verify staging overrides
80+
envValues = ["FirebaseSessionsRunEnvironment": "staging"]
81+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
82+
XCTAssertEqual(appInfo.environment, .staging)
83+
84+
// Verify staging overrides
85+
envValues = ["FirebaseSessionsRunEnvironment": "STAGING"]
86+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
87+
XCTAssertEqual(appInfo.environment, .staging)
88+
89+
// Verify autopush overrides
90+
envValues = ["FirebaseSessionsRunEnvironment": "autopush"]
91+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
92+
XCTAssertEqual(appInfo.environment, .autopush)
93+
94+
envValues = ["FirebaseSessionsRunEnvironment": "AUTOPUSH"]
95+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
96+
XCTAssertEqual(appInfo.environment, .autopush)
97+
98+
// Verify random overrides
99+
envValues = ["FirebaseSessionsRunEnvironment": "random"]
100+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
101+
XCTAssertEqual(appInfo.environment, .prod)
102+
103+
envValues = ["FirebaseSessionsRunEnvironment": ""]
104+
appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
105+
XCTAssertEqual(appInfo.environment, .prod)
106+
}
65107
}

FirebaseSessions/Tests/Unit/Mocks/MockApplicationInfo.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,21 @@ class MockApplicationInfo: ApplicationInfoProtocol {
2828

2929
var mccMNC: String = ""
3030

31+
var environment: DevEnvironment = .prod
32+
3133
static let testAppID = "testAppID"
3234
static let testBundleID = "testBundleID"
3335
static let testSDKVersion = "testSDKVersion"
3436
static let testOSName = "ios"
3537
static let testMCCMNC = "testMCCMNC"
38+
static let testEnvironment: DevEnvironment = .prod
3639

3740
func mockAllInfo() {
3841
appID = MockApplicationInfo.testAppID
3942
bundleID = MockApplicationInfo.testBundleID
4043
sdkVersion = MockApplicationInfo.testSDKVersion
4144
osName = MockApplicationInfo.testOSName
4245
mccMNC = MockApplicationInfo.testMCCMNC
46+
environment = MockApplicationInfo.testEnvironment
4347
}
4448
}

FirebaseSessions/Tests/Unit/SessionStartEventTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,28 @@ class SessionStartEventTests: XCTestCase {
137137
}
138138
}
139139
}
140+
141+
func test_convertLogEnvironment_convertsCorrectly() {
142+
let expectations: [(given: DevEnvironment,
143+
expected: firebase_appquality_sessions_LogEnvironment)] = [
144+
(.prod, firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_PROD),
145+
(
146+
.staging,
147+
firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_STAGING
148+
),
149+
(
150+
.autopush,
151+
firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_AUTOPUSH
152+
),
153+
]
154+
155+
expectations.forEach { (given: DevEnvironment,
156+
expected: firebase_appquality_sessions_LogEnvironment) in
157+
appInfo.environment = given
158+
159+
let event = SessionStartEvent(identifiers: identifiers, appInfo: appInfo, time: time)
160+
161+
XCTAssertEqual(event.proto.application_info.log_environment, expected)
162+
}
163+
}
140164
}

0 commit comments

Comments
 (0)