Source code
Revision control
Copy as Markdown
Other Tools
# Any copyright is dedicated to the Public Domain.
Function TelemetryTests
${UnitTest} TestGenerateUUID
${UnitTest} TestCommonPingHttpDetails
${UnitTest} Test64BitBuildTelemetryField
${UnitTest} TestManualDownloadTelemetryField
${UnitTest} TestLaunchStatusTelemetryFields
${UnitTest} TestExistingInstallationTelemetryFields
FunctionEnd
Function FakePingInfo
nsJSON::Set /tree ping "Data" "another_ping_for_testing" /value '"it works"'
FunctionEnd
!macro MakeTelemetryPing Callback
Push "~~ sentinel ~~"
GetFunctionAddress $0 ${Callback}
Push $0
Call PrepareTelemetryPing
Pop $0
${AssertEqual} 0 "~~ sentinel ~~"
; TODO somehow check that we don't botch registers
!macroend
!macro AssertTelemetryData FIELD TYPE EXPECTED
nsJSON::Get /tree ping /type "Data" "${FIELD}" /end
Exch $0
${AssertEqual} 0 "${TYPE}"
nsJSON::Get /tree ping "Data" "${FIELD}" /end
Pop $0
${AssertEqual} 0 "${EXPECTED}"
Pop $0
!macroend
!define AssertTelemetryData "!insertmacro AssertTelemetryData"
Function TestGenerateUUID
Push $0
Push $1
Call GenerateUUID_dontcall ; don't want the mocked one!
Pop $0
Call GenerateUUID_dontcall
Pop $1
${If} "$0" == "$1"
${Fail} "Generated UUIDs were the same! Both were '$0'."
${EndIf}
StrCpy $1 $0 1 0
${If} "$1" == "{"
${Fail} "Curly brace prefix was still present!"
${EndIf}
StrCpy $1 $0 1 -1
${If} "$1" == "}"
${Fail} "Curly brace suffix was still present!"
${EndIf}
Pop $1
Pop $0
FunctionEnd
Function TestCommonPingHttpDetails
Push $0
!insertmacro MakeTelemetryPing FakePingInfo
nsJSON::Get /tree ping "Url" /end
Pop $0
${AssertEqual} 0 "${TELEMETRY_BASE_URL}/${TELEMETRY_NAMESPACE}/${TELEMETRY_INSTALL_PING_DOCTYPE}/${TELEMETRY_INSTALL_PING_VERSION}/THIS_IS_A_UNIQUE_ID_FOR_TESTING"
nsJSON::Get /tree ping "Verb" /end
Pop $0
${AssertEqual} 0 "POST"
nsJSON::Get /tree ping "DataType" /end
Pop $0
${AssertEqual} 0 "JSON"
nsJSON::Get /tree ping "AccessType" /end
Pop $0
${AssertEqual} 0 "PreConfig"
${AssertTelemetryData} "build_channel" "string" "${Channel}"
${AssertTelemetryData} "update_channel" "string" "${UpdateChannel}"
${AssertTelemetryData} "locale" "string" "${AB_CD}"
; Ensure the callback was used.
${AssertTelemetryData} "another_ping_for_testing" "string" "it works"
Pop $0
FunctionEnd
Function Test64BitBuildTelemetryField
; This currently only runs for the stub installer, so the full-installer part
; isn't tested.
Push $ArchToInstall
StrCpy $ArchToInstall ${ARCH_X86}
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "64bit_build" "value" "false"
StrCpy $ArchToInstall ${ARCH_AMD64}
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "64bit_build" "value" "true"
StrCpy $ArchToInstall ${ARCH_AARCH64}
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "64bit_build" "value" "true"
Pop $ArchToInstall
FunctionEnd
Function TestManualDownloadTelemetryField
Push $OpenedDownloadPage
StrCpy $OpenedDownloadPage "1"
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "manual_download" "value" "true"
StrCpy $OpenedDownloadPage "0"
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "manual_download" "value" "false"
StrCpy $OpenedDownloadPage "1239" ; unknown
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "manual_download" "value" "false"
Pop $OpenedDownloadPage
FunctionEnd
Function TestLaunchStatusTelemetryFields
Push $FirefoxLaunchCode
StrCpy $FirefoxLaunchCode "0"
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "old_running" "value" "false"
${AssertTelemetryData} "new_launched" "value" "false"
StrCpy $FirefoxLaunchCode "2"
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "old_running" "value" "false"
${AssertTelemetryData} "new_launched" "value" "true"
StrCpy $FirefoxLaunchCode "98475" ; unknown
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "old_running" "value" "false"
${AssertTelemetryData} "new_launched" "value" "false"
Pop $FirefoxLaunchCode
FunctionEnd
Function TestExistingInstallationTelemetryFields
Push $ExistingVersion
Push $ExistingBuildID
; On error, these are set to '0' (see createInstall in stub.nsh)
StrCpy $ExistingVersion "0"
StrCpy $ExistingBuildID "0"
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "old_version" "string" "0"
${AssertTelemetryData} "old_build_id" "string" "0"
StrCpy $ExistingVersion "qwerty"
StrCpy $ExistingBuildID "uiop"
!insertmacro MakeTelemetryPing PrepareStubInstallPing
${AssertTelemetryData} "old_version" "string" "qwerty"
${AssertTelemetryData} "old_build_id" "string" "uiop"
Pop $ExistingBuildID
Pop $ExistingVersion
FunctionEnd