public void SecretsAreReplacedInAnOrderThatIsDeterminedBySubstringContainment() { var secretTracker1 = new SecretTracker(); secretTracker1.AddSecret("defghijkl"); secretTracker1.AddSecret("abc"); secretTracker1.AddSecret("ghi"); secretTracker1.AddSecret("d"); var redacted1 = secretTracker1.FilterString("abcdefghijklmno abc-def-ghi-jkl-mno"); var secretTracker2 = new SecretTracker(); secretTracker2.AddSecret("a"); secretTracker2.AddSecret("d"); secretTracker2.AddSecret("g"); secretTracker2.AddSecret("ghi"); secretTracker2.AddSecret("abc"); secretTracker2.AddSecret("defghijkl"); var redacted2 = secretTracker2.FilterString("abcdefghijklmno abc-def-ghi-jkl-mno"); var secretTracker3 = new SecretTracker(); secretTracker3.AddSecret("g"); secretTracker3.AddSecret("defghijkl"); secretTracker3.AddSecret("abc"); secretTracker3.AddSecret("d"); secretTracker3.AddSecret("ghi"); secretTracker3.AddSecret("a"); var redacted3 = secretTracker3.FilterString("abcdefghijklmno abc-def-ghi-jkl-mno"); Assert.AreEqual($"{Redacted}{Redacted}mno {Redacted}-{Redacted}ef-{Redacted}-jkl-mno", redacted1); Assert.AreEqual($"{Redacted}{Redacted}mno {Redacted}-{Redacted}ef-{Redacted}-jkl-mno", redacted2); Assert.AreEqual($"{Redacted}{Redacted}mno {Redacted}-{Redacted}ef-{Redacted}-jkl-mno", redacted3); }
public void SecretsAreRemovedFromText() { var secretTracker = new SecretTracker(); secretTracker.AddSecret("secret"); var redacted1 = secretTracker.FilterString("This is a secret."); secretTracker.AddSecret("is"); var redacted2 = secretTracker.FilterString("This is a secret."); Assert.AreEqual($"This is a {Redacted}.", redacted1); Assert.AreEqual($"Th{Redacted} {Redacted} a {Redacted}.", redacted2); }
public void NullOrEmptySecretsAreIgnored() { var secretTracker = new SecretTracker(); secretTracker.AddSecret(string.Empty); secretTracker.AddSecret(null); var outputStream = new StringWriter(); using (var secretStream = secretTracker.FilterTextWriter(outputStream)) { secretStream.WriteLine("DoesNotFail"); } var output = outputStream.GetStringBuilder().ToString(); Assert.AreEqual($"DoesNotFail{Environment.NewLine}", output); }
public void SecretsAreReplacedInTextStream() { var secretTracker = new SecretTracker(); var outputStream = new StringWriter(); using (var secretStream = secretTracker.FilterTextWriter(outputStream)) { secretTracker.AddSecret("secret"); secretStream.WriteLine("This is a secret."); secretTracker.AddSecret("is"); secretStream.WriteLine("This is a secret."); } var output = outputStream.GetStringBuilder().ToString(); var expected = $"This is a {Redacted}.{Environment.NewLine}Th{Redacted} {Redacted} a {Redacted}.{Environment.NewLine}"; Assert.AreEqual(expected, output); }
public void SecretIsDetectedInPartialLineFollowingNewline() { var secretTracker = new SecretTracker(); secretTracker.AddSecret("SecretEmbedded"); var outputStream = new StringWriter(); using (var secretStream = secretTracker.FilterTextWriter(outputStream)) { secretStream.WriteLine("FullLine"); secretStream.Write($"IncompleteLine{Environment.NewLine}WithSecret"); secretStream.WriteLine("EmbeddedInIt"); } var output = outputStream.GetStringBuilder().ToString(); Assert.AreEqual($"FullLine{Environment.NewLine}IncompleteLine{Environment.NewLine}With{Redacted}InIt{Environment.NewLine}", output); }
public void SecretsAreReplacedEvenIfTheyAreOverSmallerWrites() { var secretTracker = new SecretTracker(); var outputStream = new StringWriter(); using (var secretStream = secretTracker.FilterTextWriter(outputStream)) { secretTracker.AddSecret("sIs5429Lon"); // ThisIs5429Longer secretStream.Write("ThisIs5"); secretStream.Write(42); secretStream.Write('9'); secretStream.Write('L'); secretStream.WriteLine("onger"); } var output = outputStream.GetStringBuilder().ToString(); Assert.AreEqual($"Thi{Redacted}ger{Environment.NewLine}", output); }