Updated on 2026-08-14
This commit is contained in:
parent
ce86d3f87c
commit
0551a8f2fe
4 changed files with 77 additions and 2 deletions
|
|
@ -18,6 +18,10 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
tasks.withType<Test>().configureEach {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
/** Project */
|
||||
|
|
@ -84,7 +88,8 @@ dependencies {
|
|||
ksp(deps.room.compiler)
|
||||
|
||||
testImplementation(deps.test.coroutine)
|
||||
testImplementation(deps.test.junit)
|
||||
testImplementation(deps.test.junit5)
|
||||
testRuntimeOnly(deps.test.junit5.engine)
|
||||
testImplementation(deps.test.mockk)
|
||||
testImplementation(deps.test.truth)
|
||||
}
|
||||
|
|
@ -115,7 +115,8 @@ class AppLogsStore @Inject constructor(
|
|||
BufferedWriter(FileWriter(logFile, true)).use { writer ->
|
||||
writer.append(formatter.print(DateTime.now()))
|
||||
writer.append(": $tag ")
|
||||
messages.forEach(writer::append)
|
||||
messages.map(LogsSanitizer::sanitize)
|
||||
.forEach(writer::append)
|
||||
writer.newLine()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.tangem.datasource.local.logs
|
||||
|
||||
/**
|
||||
* Logs sanitizer
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal object LogsSanitizer {
|
||||
|
||||
private val HEX_REGEX = Regex("(0[xX])?(?:[A-Fa-f0-9]{2}-?){4,}")
|
||||
private const val HIDDEN_TEXT = "******"
|
||||
|
||||
fun sanitize(value: String): String {
|
||||
return HEX_REGEX.replace(input = value, replacement = HIDDEN_TEXT)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
package com.tangem.datasource.local.logs
|
||||
|
||||
import com.google.common.truth.Truth
|
||||
import org.junit.jupiter.api.TestInstance
|
||||
import org.junit.jupiter.params.ParameterizedTest
|
||||
import org.junit.jupiter.params.provider.MethodSource
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
internal class LogsSanitizerTest {
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideTestModels")
|
||||
fun sanitize(model: TestModel) {
|
||||
// Act
|
||||
val actual = LogsSanitizer.sanitize(model.input)
|
||||
|
||||
// Assert
|
||||
val expected = model.expected
|
||||
Truth.assertThat(actual).isEqualTo(expected)
|
||||
}
|
||||
|
||||
private fun provideTestModels() = listOf(
|
||||
TestModel(input = "dead-beef-cafe-babe", expected = HIDDEN_TEXT),
|
||||
TestModel(input = "[dead-beef-cafe-babe]", expected = "[$HIDDEN_TEXT]"),
|
||||
TestModel(input = "0xdead-beef-cafe-babe", expected = HIDDEN_TEXT),
|
||||
TestModel(input = "0XaA-Bb-Cc-Dd-Ee-Ff", expected = HIDDEN_TEXT),
|
||||
TestModel(input = "A1B2C3D4E5F6", expected = HIDDEN_TEXT),
|
||||
TestModel(input = "deadbeefcafebabe", expected = HIDDEN_TEXT),
|
||||
TestModel(input = "deadbeefcafebabe", expected = HIDDEN_TEXT),
|
||||
TestModel(
|
||||
input = "Values: 12345678 and ABCDEF12 and cafe9876",
|
||||
expected = "Values: $HIDDEN_TEXT and $HIDDEN_TEXT and $HIDDEN_TEXT",
|
||||
),
|
||||
TestModel(
|
||||
input = "Chunks: DEADBEEF CAFEBABE F00DBABE",
|
||||
expected = "Chunks: $HIDDEN_TEXT $HIDDEN_TEXT $HIDDEN_TEXT",
|
||||
),
|
||||
TestModel(
|
||||
input = "Normal log message without secrets",
|
||||
expected = "Normal log message without secrets",
|
||||
),
|
||||
)
|
||||
|
||||
data class TestModel(val input: String, val expected: String)
|
||||
|
||||
private companion object {
|
||||
|
||||
const val HIDDEN_TEXT = "******"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue