Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        public void IncompleteLineIsWrittenByDispose()
        {
            var secretTracker = new SecretTracker();

            var outputStream = new StringWriter();

            using (var secretStream = secretTracker.FilterTextWriter(outputStream))
            {
                secretStream.WriteLine("FullLine");
                secretStream.Write("IncompleteLine");
            }

            var output = outputStream.GetStringBuilder().ToString();

            Assert.AreEqual($"FullLine{Environment.NewLine}IncompleteLine", output);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }