glean-core/ios/GleanTests/Metrics/StringListMetricTests.swift (116 lines of code) (raw):
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@testable import Glean
import XCTest
class StringListMetricTests: XCTestCase {
override func setUp() {
resetGleanDiscardingInitialPings(testCase: self, tag: "StringListMetricTests")
}
override func tearDown() {
tearDownStubs()
}
func testStringSavesToStorageByFirstAddingThenSetting() {
let stringListMetric = StringListMetricType(CommonMetricData(
category: "telemetry",
name: "string_list_metric",
sendInPings: ["store1"],
lifetime: .application,
disabled: false
))
// Record by adding values
stringListMetric.add("value1")
stringListMetric.add("value2")
stringListMetric.add("value3")
let snapshot = stringListMetric.testGetValue()!
XCTAssertEqual(3, snapshot.count)
XCTAssertEqual("value1", snapshot[0])
XCTAssertEqual("value2", snapshot[1])
XCTAssertEqual("value3", snapshot[2])
// Use set() to see that the first list is replaced by the new list
stringListMetric.set(["other1", "other2", "other3"])
// Check that data was properly recorded.
let snapshot2 = stringListMetric.testGetValue()!
XCTAssertEqual(3, snapshot2.count)
XCTAssertEqual("other1", snapshot2[0])
XCTAssertEqual("other2", snapshot2[1])
XCTAssertEqual("other3", snapshot2[2])
}
func testStringSavesToStorageByFirstSettingThenAdding() {
let stringListMetric = StringListMetricType(CommonMetricData(
category: "telemetry",
name: "string_list_metric",
sendInPings: ["store1"],
lifetime: .application,
disabled: false
))
// Record by setting the list
stringListMetric.set(["value1", "value2", "value3"])
let snapshot = stringListMetric.testGetValue()!
XCTAssertEqual(3, snapshot.count)
XCTAssertEqual("value1", snapshot[0])
XCTAssertEqual("value2", snapshot[1])
XCTAssertEqual("value3", snapshot[2])
// Use add() to append to the list
stringListMetric.add("added1")
// Check that data was properly recorded.
let snapshot2 = stringListMetric.testGetValue()!
XCTAssertEqual(4, snapshot2.count)
XCTAssertEqual("value1", snapshot2[0])
XCTAssertEqual("value2", snapshot2[1])
XCTAssertEqual("value3", snapshot2[2])
XCTAssertEqual("added1", snapshot2[3])
}
func testStringMustNotRecordIfDisabled() {
let stringListMetric = StringListMetricType(CommonMetricData(
category: "telemetry",
name: "string_list_metric",
sendInPings: ["store1"],
lifetime: .application,
disabled: true
))
XCTAssertNil(stringListMetric.testGetValue())
stringListMetric.set(["value1", "value2", "value3"])
XCTAssertNil(stringListMetric.testGetValue(), "Strings must not be recorded if they are disabled")
stringListMetric.add("value4")
XCTAssertNil(stringListMetric.testGetValue(), "Strings must not be recorded if they are disabled")
}
func testStringGetValueReturnsNilIfNothingIsStored() {
let stringListMetric = StringListMetricType(CommonMetricData(
category: "telemetry",
name: "string_list_metric",
sendInPings: ["store1"],
lifetime: .application,
disabled: false
))
XCTAssertNil(stringListMetric.testGetValue())
}
func testStringSavesToSecondaryPings() {
let stringListMetric = StringListMetricType(CommonMetricData(
category: "telemetry",
name: "string_list_metric",
sendInPings: ["store1", "store2"],
lifetime: .application,
disabled: false
))
stringListMetric.add("value1")
stringListMetric.add("value2")
stringListMetric.add("value3")
let snapshot = stringListMetric.testGetValue("store2")!
XCTAssertEqual(3, snapshot.count)
XCTAssertEqual("value1", snapshot[0])
XCTAssertEqual("value2", snapshot[1])
XCTAssertEqual("value3", snapshot[2])
// Use set() to see that the first list is replaced by the new list
stringListMetric.set(["other1", "other2", "other3"])
// Check that data was properly recorded.
let snapshot2 = stringListMetric.testGetValue("store2")!
XCTAssertEqual(3, snapshot2.count)
XCTAssertEqual("other1", snapshot2[0])
XCTAssertEqual("other2", snapshot2[1])
XCTAssertEqual("other3", snapshot2[2])
}
func testLongStringListsAreTruncated() {
let stringListMetric = StringListMetricType(CommonMetricData(
category: "telemetry",
name: "string_list_metric",
sendInPings: ["store1", "store2"],
lifetime: .application,
disabled: false
))
for n in 0 ... 100 {
stringListMetric.add(String(format: "value%02d", n))
}
XCTAssertEqual(100, stringListMetric.testGetValue()!.count)
XCTAssertEqual(1, stringListMetric.testGetNumRecordedErrors(.invalidValue))
}
}